Index: /XIOS/dev/dev_trunk_omp/xios_test_suite/ARCH/arch-X64_IRENE.env
===================================================================
--- /XIOS/dev/dev_trunk_omp/xios_test_suite/ARCH/arch-X64_IRENE.env	(revision 1844)
+++ /XIOS/dev/dev_trunk_omp/xios_test_suite/ARCH/arch-X64_IRENE.env	(revision 1844)
@@ -0,0 +1,9 @@
+module unload netcdf-c netcdf-fortran hdf5 flavor perl hdf5 boost blitz mpi gnu
+#module purge
+module load flavor/hdf5/parallel
+module load netcdf-fortran/4.4.4
+module load hdf5/1.8.20
+module load gnu
+module load boost
+module load blitz
+module load feature/bridge/heterogenous_mpmd
Index: /XIOS/dev/dev_trunk_omp/xios_test_suite/ARCH/arch-X64_IRENE.fcm
===================================================================
--- /XIOS/dev/dev_trunk_omp/xios_test_suite/ARCH/arch-X64_IRENE.fcm	(revision 1844)
+++ /XIOS/dev/dev_trunk_omp/xios_test_suite/ARCH/arch-X64_IRENE.fcm	(revision 1844)
@@ -0,0 +1,26 @@
+################################################################################
+###################                Projet XIOS               ###################
+################################################################################
+
+%CCOMPILER      mpicc
+%FCOMPILER      mpif90
+%LINKER         mpif90  -nofor-main
+
+%BASE_CFLAGS    -std=c++11 -diag-disable 1125 -diag-disable 279 -D__XIOS_EXCEPTION
+%PROD_CFLAGS    -O3 -D BOOST_DISABLE_ASSERTS
+#%DEV_CFLAGS     -g -traceback
+%DEV_CFLAGS     -g 
+%DEBUG_CFLAGS   -DBZ_DEBUG -g -traceback -fno-inline
+
+%BASE_FFLAGS    -D__NONE__ 
+%PROD_FFLAGS    -O3
+#%DEV_FFLAGS     -g -traceback
+%DEV_FFLAGS     -g 
+%DEBUG_FFLAGS   -g -traceback
+
+%BASE_INC       -D__NONE__
+%BASE_LD        -lstdc++
+
+%CPP            mpicc -EP
+%FPP            cpp -P
+%MAKE           gmake
Index: /XIOS/dev/dev_trunk_omp/xios_test_suite/ARCH/arch-X64_IRENE.path
===================================================================
--- /XIOS/dev/dev_trunk_omp/xios_test_suite/ARCH/arch-X64_IRENE.path	(revision 1844)
+++ /XIOS/dev/dev_trunk_omp/xios_test_suite/ARCH/arch-X64_IRENE.path	(revision 1844)
@@ -0,0 +1,28 @@
+NETCDF_INCDIR="-I $NETCDFC_INCDIR -I $NETCDFFORTRAN_INCDIR"
+NETCDF_LIBDIR="-L $NETCDFC_LIBDIR -L $NETCDFFORTRAN_LIBDIR"
+NETCDF_LIB="-lnetcdf -lnetcdff"
+
+MPI_INCDIR=""
+MPI_LIBDIR=""
+MPI_LIB=""
+
+HDF5_INCDIR="-I$HDF5_INCDIR"
+HDF5_LIBDIR="-L$HDF5_LIBDIR"
+HDF5_LIB="-lhdf5_hl -lhdf5 -lz -lcurl"
+
+BOOST_INCDIR="-I $BOOST_INCDIR"
+BOOST_LIBDIR="-L $BOOST_LIBDIR"
+BOOST_LIB=""
+
+BLITZ_INCDIR="-I $BLITZ_INCDIR"
+BLITZ_LIBDIR="-L $BLITZ_LIBDIR"
+BLITZ_LIB=""
+
+OASIS_INCDIR="-I$PWD/../../oasis3-mct/BLD/build/lib/psmile.MPI1"
+OASIS_LIBDIR="-L$PWD/../../oasis3-mct/BLD/lib"
+OASIS_LIB="-lpsmile.MPI1 -lscrip -lmct -lmpeu"
+
+
+#only for MEMTRACK debuging : developper only
+ADDR2LINE_LIBDIR="-L${WORKDIR}/ADDR2LINE_LIB"
+ADDR2LINE_LIB="-laddr2line"
Index: /XIOS/dev/dev_trunk_omp/xios_test_suite/ARCH/arch-X64_JEANZAY.env
===================================================================
--- /XIOS/dev/dev_trunk_omp/xios_test_suite/ARCH/arch-X64_JEANZAY.env	(revision 1844)
+++ /XIOS/dev/dev_trunk_omp/xios_test_suite/ARCH/arch-X64_JEANZAY.env	(revision 1844)
@@ -0,0 +1,30 @@
+module purge
+module load gcc/6.5.0 
+module load intel-compilers/19.0.4 intel-mkl/19.0.4 intel-mpi/19.0.4 intel-vtune/19.0.4 intel-advisor/19.0.4 intel-tbb/19.0.4 intel-itac/19.0.4
+module load intel-all/19.0.4
+module load hdf5/1.10.5-mpi
+module load netcdf/4.7.2-mpi
+module load netcdf-fortran/4.5.2-mpi
+module load nco/4.8.1
+module load ncview/2.1.7-mpi
+
+
+
+#module unload intel-all hdf5 netcdf netcdf-cxx netcdf-fortran
+#module load intel-mkl/19.0.4 intel-vtune/19.0.4 intel-advisor/19.0.4 intel-tbb/19.0.4 intel-itac/19.0.4
+#module load intel-all/19.0.4
+#module load hdf5/1.10.5-mpi
+#module load netcdf/4.7.2-mpi
+#module load netcdf-cxx/4.2-mpi
+#module load netcdf-fortran/4.5.2-mpi
+
+
+#module purge
+#module load gcc/6.5.0/gcc-4.8.5 
+#module load intel-all/19.0.4
+#module load netcdf/4.7.0/intel-19.0.4-mpi
+#module load netcdf-cxx/4.2/intel-19.0.4-mpi
+#module load netcdf-fortran/4.4.5/intel-19.0.4-mpi
+
+
+
Index: /XIOS/dev/dev_trunk_omp/xios_test_suite/ARCH/arch-X64_JEANZAY.fcm
===================================================================
--- /XIOS/dev/dev_trunk_omp/xios_test_suite/ARCH/arch-X64_JEANZAY.fcm	(revision 1844)
+++ /XIOS/dev/dev_trunk_omp/xios_test_suite/ARCH/arch-X64_JEANZAY.fcm	(revision 1844)
@@ -0,0 +1,25 @@
+################################################################################
+####################                Projet XIOS               ###################
+#################################################################################
+
+
+%CCOMPILER      mpiicc -std=c++11 -qopenmp
+%FCOMPILER      mpiifort -qopenmp
+%LINKER         mpiifort  -nofor-main -qopenmp
+
+%BASE_CFLAGS    -diag-disable 1125 -diag-disable 279
+%PROD_CFLAGS    -O3 -D BOOST_DISABLE_ASSERTS
+%DEV_CFLAGS     -g -traceback
+%DEBUG_CFLAGS   -DBZ_DEBUG -g -traceback -fno-inline
+
+%BASE_FFLAGS    -D__NONE__ 
+%PROD_FFLAGS    -O3
+%DEV_FFLAGS     -g -O2 -traceback
+%DEBUG_FFLAGS   -g -traceback
+
+%BASE_INC       -D__NONE__
+%BASE_LD        -lstdc++
+
+%CPP            mpiicc -EP
+%FPP            cpp -P
+%MAKE           gmake
Index: /XIOS/dev/dev_trunk_omp/xios_test_suite/ARCH/arch-X64_JEANZAY.path
===================================================================
--- /XIOS/dev/dev_trunk_omp/xios_test_suite/ARCH/arch-X64_JEANZAY.path	(revision 1844)
+++ /XIOS/dev/dev_trunk_omp/xios_test_suite/ARCH/arch-X64_JEANZAY.path	(revision 1844)
@@ -0,0 +1,15 @@
+NETCDF_INCDIR=""
+NETCDF_LIBDIR=""
+NETCDF_LIB="-lnetcdff -lnetcdf"
+
+MPI_INCDIR=""
+MPI_LIBDIR=""
+MPI_LIB=""
+
+HDF5_INCDIR=""
+HDF5_LIBDIR=""
+HDF5_LIB=""
+
+OASIS_INCDIR="-I$PWD/../../oasis3-mct/BLD/build/lib/psmile.MPI1"
+OASIS_LIBDIR="-L$PWD/../../oasis3-mct/BLD/lib"
+OASIS_LIB="-lpsmile.MPI1 -lscrip -lmct -lmpeu"
Index: /XIOS/dev/dev_trunk_omp/xios_test_suite/COMPILE/compile_irene
===================================================================
--- /XIOS/dev/dev_trunk_omp/xios_test_suite/COMPILE/compile_irene	(revision 1844)
+++ /XIOS/dev/dev_trunk_omp/xios_test_suite/COMPILE/compile_irene	(revision 1844)
@@ -0,0 +1,20 @@
+#!/bin/bash
+
+set -x 
+
+export revision=$(svn info --show-item revision .. 2>&1)
+
+python config_compile.py
+
+ccc_msub -E "--wait" job_compile_irene.sh
+
+build_dir=${xios_test_suite_repository}/BUILD
+mkdir -p $build_dir ; CHMOD $build_dir
+mkdir -p ${build_dir}/build_${xios_machine_name}
+
+cp build_*.txt ${build_dir}/build_${xios_machine_name}
+CHMOD -R ${build_dir}/build_${xios_machine_name}
+
+bash -c "python ./generate_compile.py"
+
+copy_to_thredds compile_${xios_machine_name}_info.js
Index: /XIOS/dev/dev_trunk_omp/xios_test_suite/COMPILE/compile_irene_local
===================================================================
--- /XIOS/dev/dev_trunk_omp/xios_test_suite/COMPILE/compile_irene_local	(revision 1844)
+++ /XIOS/dev/dev_trunk_omp/xios_test_suite/COMPILE/compile_irene_local	(revision 1844)
@@ -0,0 +1,19 @@
+#!/bin/bash
+
+set -x 
+
+export revision=$(svn info --show-item revision .. 2>&1)
+
+python config_compile.py
+
+ccc_msub -E "--wait" job_compile_irene.sh
+
+build_dir=${xios_test_suite_repository}/BUILD
+mkdir -p $build_dir ; CHMOD $build_dir
+mkdir -p ${build_dir}/build_${xios_machine_name}
+
+cp build_*.txt ${build_dir}/build_${xios_machine_name}
+CHMOD -R ${build_dir}/build_${xios_machine_name}
+
+bash -c "python ./generate_compile.py"
+
Index: /XIOS/dev/dev_trunk_omp/xios_test_suite/COMPILE/compile_jeanzay
===================================================================
--- /XIOS/dev/dev_trunk_omp/xios_test_suite/COMPILE/compile_jeanzay	(revision 1844)
+++ /XIOS/dev/dev_trunk_omp/xios_test_suite/COMPILE/compile_jeanzay	(revision 1844)
@@ -0,0 +1,17 @@
+#!/bin/bash
+set -x 
+export revision=$(svn info --show-item revision .. 2>&1)
+python config_compile.py
+
+sbatch --wait job_compile_jeanzay.sh
+
+build_dir=${xios_test_suite_repository}/BUILD
+mkdir -p $build_dir ; CHMOD $build_dir
+mkdir -p ${build_dir}/build_${xios_machine_name}
+
+cp build_*.txt ${build_dir}/build_${xios_machine_name}
+CHMOD -R ${build_dir}/build_${xios_machine_name}
+
+bash -c "python ./generate_compile.py"
+copy_to_forge compile_${xios_machine_name}_info.js
+
Index: /XIOS/dev/dev_trunk_omp/xios_test_suite/COMPILE/compile_jeanzay_local
===================================================================
--- /XIOS/dev/dev_trunk_omp/xios_test_suite/COMPILE/compile_jeanzay_local	(revision 1844)
+++ /XIOS/dev/dev_trunk_omp/xios_test_suite/COMPILE/compile_jeanzay_local	(revision 1844)
@@ -0,0 +1,18 @@
+#!/bin/bash
+set -x 
+echo ${xios_root}
+export revision=$(svn info --show-item revision ${xios_root} 2>&1)
+python config_compile.py
+
+sbatch --wait job_compile_jeanzay.sh
+
+build_dir=${xios_test_suite_repository}/BUILD
+mkdir -p $build_dir ; CHMOD $build_dir
+mkdir -p ${build_dir}/build_${xios_machine_name}
+
+cp build_*.txt ${build_dir}/build_${xios_machine_name}
+CHMOD -R ${build_dir}/build_${xios_machine_name}
+
+bash -c "python ./generate_compile.py"
+# copy_to_forge compile_${xios_machine_name}_info.js
+
Index: /XIOS/dev/dev_trunk_omp/xios_test_suite/COMPILE/compile_param_irene.def
===================================================================
--- /XIOS/dev/dev_trunk_omp/xios_test_suite/COMPILE/compile_param_irene.def	(revision 1844)
+++ /XIOS/dev/dev_trunk_omp/xios_test_suite/COMPILE/compile_param_irene.def	(revision 1844)
@@ -0,0 +1,2 @@
+arch = X64_IRENE
+mode = prod, debug
Index: /XIOS/dev/dev_trunk_omp/xios_test_suite/COMPILE/compile_param_jeanzay.def
===================================================================
--- /XIOS/dev/dev_trunk_omp/xios_test_suite/COMPILE/compile_param_jeanzay.def	(revision 1844)
+++ /XIOS/dev/dev_trunk_omp/xios_test_suite/COMPILE/compile_param_jeanzay.def	(revision 1844)
@@ -0,0 +1,9 @@
+arch = X64_JEANZAY
+mode = prod, debug
+
+#arch = X64_JEANZAY_Intel, X64_JEANZAY_gcc,  X64_JEANZAY_pgi
+#    mode = prod, debug
+#    run_test=false
+#arch = X64_Jeanzai_intel
+#     mode = prod
+#     run_test=yes
Index: /XIOS/dev/dev_trunk_omp/xios_test_suite/COMPILE/config_compile.py
===================================================================
--- /XIOS/dev/dev_trunk_omp/xios_test_suite/COMPILE/config_compile.py	(revision 1844)
+++ /XIOS/dev/dev_trunk_omp/xios_test_suite/COMPILE/config_compile.py	(revision 1844)
@@ -0,0 +1,78 @@
+import glob
+import sys
+import subprocess
+import os
+
+def OSinfo(runthis):
+	red = lambda text: '\033[0;31m' + text + '\033[0m'
+	osstdout = subprocess.Popen(runthis, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, close_fds=True)
+	theInfo = osstdout.communicate()[0].strip()
+	if osstdout.returncode!=0:
+		print(red(runthis+" FAILED"))
+		print >> sys.stderr, osstdout.returncode
+		sys.exit()
+	# else:
+	# 	print(runthis+" OK")
+
+
+def main():
+    machine=os.getenv('xios_machine_name')
+    revision=os.getenv('revision')
+
+
+    default_nb_config = 2
+    nb_config = 1
+    configs = [0]*default_nb_config 
+    configs_arg = [[], []] 
+
+    f=open("compile_param_"+machine+".def", "r")
+    for line in f:
+        line = line.strip()
+        if len(line) != 0:
+            if not line.startswith("#"):
+                nb_config = nb_config * (line.count(",")+1)
+                line = line.replace(",", "")
+                line = line.replace("=", "")
+                if line.startswith("arch"):
+                    line = line.replace("arch", "")
+                    for word in line.split():
+                        configs[0] += 1
+                        configs_arg[0].append(word)
+                elif line.startswith("mode"):
+                    line = line.replace("mode", "")
+                    for word in line.split():
+                        configs[1] += 1
+                        configs_arg[1].append(word)
+				
+
+    f=open("CMakeLists.txt", "w")
+    f.write("#######################################\n")
+    f.write("# file generated by config_compile.py #\n")
+    f.write("#           DO NOT modify             #\n")
+    f.write("#######################################\n\n")
+    f.write("cmake_minimum_required(VERSION 2.8.12.2)\n\n")
+    f.write("project(generic_testcase)\n\n")
+    f.write("find_package(PythonInterp REQUIRED)\n\n")
+    f.write("enable_testing()\n\n")
+       
+    for i in range(len(configs_arg[0])):
+        for j in range(len(configs_arg[1])):
+            build_dir_name = configs_arg[0][i]+"_"+configs_arg[1][j]
+            g=open("build_"+revision+"_"+machine+"_"+build_dir_name+".txt", "w")
+            g.write("arch "+configs_arg[0][i]+"\n")
+            g.write("mode "+configs_arg[1][j]+"\n")
+            g.write("machine "+machine+"\n")
+            g.write("revision "+revision+"\n")
+            g.close()
+            
+            f.write("add_test( NAME "+build_dir_name+'\n')
+            f.write("          COMMAND bash -c \"source ../ARCH/arch-"+configs_arg[0][i]+".env  && cd ../.. && ./make_xios --arch_path `pwd`/xios_test_suite/ARCH --arch "+configs_arg[0][i]+" --"+configs_arg[1][j]+" --omp --job 16 --build_dir xios_test_suite/BUILD/build_"+build_dir_name+" && echo $? >> xios_test_suite/COMPILE/build_"+revision+"_"+machine+"_"+build_dir_name+".txt\")\n\n")
+            f.write("set_tests_properties( "+build_dir_name+" PROPERTIES\n")
+            f.write("                      FAIL_REGULAR_EXPRESSION \"failed\")\n\n")
+    
+    
+    f.close()
+    
+    
+if __name__== "__main__":
+  main()
Index: /XIOS/dev/dev_trunk_omp/xios_test_suite/COMPILE/generate_compile.py
===================================================================
--- /XIOS/dev/dev_trunk_omp/xios_test_suite/COMPILE/generate_compile.py	(revision 1844)
+++ /XIOS/dev/dev_trunk_omp/xios_test_suite/COMPILE/generate_compile.py	(revision 1844)
@@ -0,0 +1,116 @@
+import glob
+import sys
+import subprocess
+import os
+import copy
+
+def OSinfo(runthis):
+	red = lambda text: '\033[0;31m' + text + '\033[0m'
+	osstdout = subprocess.Popen(runthis, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, close_fds=True)
+	theInfo = osstdout.communicate()[0].strip()
+	if osstdout.returncode!=0:
+		print(red(runthis+" FAILED"))
+		print >> sys.stderr, osstdout.returncode
+		sys.exit()
+	# else:
+	# 	print(runthis+" OK")
+
+def Sort(sub_li): 
+    l = len(sub_li) 
+    for i in range(0, l): 
+        for j in range(0, l-i-1): 
+            if (sub_li[j][0] < sub_li[j+1][0]): 
+                tempo = sub_li[j] 
+                sub_li[j]= sub_li[j+1] 
+                sub_li[j+1]= tempo
+            if (sub_li[j][0] == sub_li[j+1][0]):
+                if (sub_li[j][3] < sub_li[j+1][3]): 
+                    tempo = sub_li[j] 
+                    sub_li[j]= sub_li[j+1] 
+                    sub_li[j+1]= tempo 
+                if (sub_li[j][3] == sub_li[j+1][3]): 
+                    if (sub_li[j][2] < sub_li[j+1][2]): 
+                        tempo = sub_li[j] 
+                        sub_li[j]= sub_li[j+1] 
+                        sub_li[j+1]= tempo 
+    return sub_li 
+
+def subgenerate(maindir, machine_name):
+
+    compile_list = glob.glob(maindir+"/build_"+machine_name+"/build_*.txt")
+    print(maindir)
+    print(compile_list)
+    if len(compile_list) == 0 :
+        return
+    machine = machine_name
+    revision_list=[]
+    machine_list=[]
+    arch_list=[]
+    mode_list=[]
+
+    bg_color = ["#84c5ff", "#96cdff", "#a1d3ff", "#b3dafd", "#c2e1fd"]
+
+
+    myBuild=["", "", "", "", ""] #revision, machine, arch, mode, status
+    myBuildList=[]
+    
+    for compile_log in compile_list:
+        revision = compile_log[6:10]
+        myBuild[4] = "&#10060;"  
+        f=open(compile_log, "r")
+        for line in f:
+            if line.startswith("revision"):
+                myText = line.replace("revision ", "").replace("\n", "")
+                if not myText in revision_list:
+                    revision_list.append(myText)
+                myBuild[0] = myText
+                
+
+            elif line.startswith("machine"):
+                myText = line.replace("machine ", "").replace("\n", "")
+                if not myText in machine_list:
+                    machine_list.append(myText)
+                myBuild[1] = myText
+
+            elif line.startswith("arch"):
+                myText = line.replace("arch ", "").replace("\n", "")
+                if not myText in arch_list:
+                    arch_list.append(myText)
+                myBuild[2] = myText
+
+            elif line.startswith("mode"):
+                myText = line.replace("mode ", "").replace("\n", "")
+                if not myText in mode_list:
+                    mode_list.append(myText)
+                myBuild[3] = myText
+
+            elif line[0].isdigit():
+                myTexts = line.replace("\n", "")
+                if myTexts == "0" :
+                    myBuild[4] = "&#9989;" 
+        myBuildList.append([myBuild[0], myBuild[1], myBuild[2], myBuild[3], myBuild[4]])
+        f.close()
+
+    print(Sort(myBuildList)) # first by revision number, then by mode, then by arch. all in descendant order
+    print(len(myBuildList))
+    
+    revision_list = sorted(revision_list, reverse = True)
+    print(arch_list) # row
+    print(mode_list) # col
+    print(machine_list) # col
+    print(revision_list) # col
+
+
+    f=open("compile_"+machine+"_info.js", "w")
+    f.write("var "+machine+"_compile_info_list = "+repr(myBuildList)+"\n\n")
+    f.write("var "+machine+"_revision_list = "+repr(revision_list)+"\n\n")
+    f.close()
+
+
+def main() :
+    repository_name=os.getenv('xios_test_suite_repository')
+    machine_name=os.getenv('xios_machine_name')
+    subgenerate(repository_name+'/BUILD',machine_name)
+
+if __name__== "__main__":
+  main()
Index: /XIOS/dev/dev_trunk_omp/xios_test_suite/COMPILE/job_compile_irene.sh
===================================================================
--- /XIOS/dev/dev_trunk_omp/xios_test_suite/COMPILE/job_compile_irene.sh	(revision 1844)
+++ /XIOS/dev/dev_trunk_omp/xios_test_suite/COMPILE/job_compile_irene.sh	(revision 1844)
@@ -0,0 +1,26 @@
+#!/bin/bash
+######################
+## CURIE   TGCC/CEA ##
+######################
+#MSUB -r XIOS
+#MSUB -o client_output.out    # standard output
+#MSUB -e client_error.err    #error output
+#MSUB -eo
+#MSUB -c 48
+#MSUB -n 1  # Number of MPI tasks (SPMD case) or cores (MPMD case)
+#MSUB -X 
+#MSUB -x 
+#MSUB -T 1800      # Wall clock limit (seconds)
+#MSUB -q skylake           # thin nodes
+#MSUB -A gen0826
+#MSUB -Q test
+#MSUB -m work,scratch
+
+# ------------- Compile job for Irene------------
+
+cd $BRIDGE_MSUB_PWD
+
+cmake .
+ctest -V
+
+exit
Index: /XIOS/dev/dev_trunk_omp/xios_test_suite/COMPILE/job_compile_jeanzay.sh
===================================================================
--- /XIOS/dev/dev_trunk_omp/xios_test_suite/COMPILE/job_compile_jeanzay.sh	(revision 1844)
+++ /XIOS/dev/dev_trunk_omp/xios_test_suite/COMPILE/job_compile_jeanzay.sh	(revision 1844)
@@ -0,0 +1,18 @@
+#!/bin/bash
+#SBATCH --ntasks=1              # Nombre total de processus MPI
+#SBATCH --cpus-per-task=40
+#SBATCH --hint=nomultithread
+#SBATCH -t 00:30:00              # Temps elapsed maximum d'exÃ©cution
+#SBATCH -o output.out     # Nom du fichier de sortie
+#SBATCH -e error.err     # Nom du fichier d'erreur
+#SBATCH -A psl@cpu
+
+#----------------- Compile job for Jean-Zay --------------
+
+
+cd ${SLURM_SUBMIT_DIR}
+
+cmake .
+ctest -V
+
+exit
Index: /XIOS/dev/dev_trunk_omp/xios_test_suite/ENV/irene.env
===================================================================
--- /XIOS/dev/dev_trunk_omp/xios_test_suite/ENV/irene.env	(revision 1844)
+++ /XIOS/dev/dev_trunk_omp/xios_test_suite/ENV/irene.env	(revision 1844)
@@ -0,0 +1,13 @@
+module load subversion
+module load cmake
+
+CHMOD() { chmod --quiet ug+rwX,o+rX "$@" ;}
+export -f CHMOD
+
+export xios_full_machine_name="Irene"
+export xios_test_suite_repository=/ccc/work/cont003/gen0826/gen0826/XIOS_TEST_SUITE_REPOSITORY
+export xios_thredds_dir=/ccc/work/cont003/thredds/p86yann/XIOS_TEST_SUITE
+export xios_reference_dir=/ccc/work/cont003/gen0826/gen0826/XIOS_TEST_SUITE_REPOSITORY
+
+mkdir -p $xios_test_suite_repository ; CHMOD $xios_test_suite_repository
+mkdir -p $xios_thredds_dir ; CHMOD $xios_thredds_dir
Index: /XIOS/dev/dev_trunk_omp/xios_test_suite/ENV/jeanzay.env
===================================================================
--- /XIOS/dev/dev_trunk_omp/xios_test_suite/ENV/jeanzay.env	(revision 1844)
+++ /XIOS/dev/dev_trunk_omp/xios_test_suite/ENV/jeanzay.env	(revision 1844)
@@ -0,0 +1,12 @@
+module load subversion
+module load cmake
+
+CHMOD() { setfacl -m u::rwX,u:rpsl565:rwX,u:rpsl954:rwX,u:rgzi016:rwX,g::r-X,o::r-X,m::rwX "$@" ;}
+export -f CHMOD
+
+export xios_full_machine_name="Jean-Zay"
+export xios_test_suite_repository=/gpfswork/rech/psl/commun/XIOS_TEST_SUITE_REPOSITORY
+#export xios_thredds_dir=/ccc/work/cont003/thredds/p86yann/XIOS_TEST_SUITE
+export xios_reference_dir=/gpfswork/rech/psl/commun/XIOS_TEST_SUITE_REPOSITORY
+mkdir -p $xios_test_suite_repository ; CHMOD $xios_test_suite_repository
+#mkdir -p $xios_thredds_dir ; CHMOD $xios_thredds_dir
Index: /XIOS/dev/dev_trunk_omp/xios_test_suite/ENV_local/irene.env
===================================================================
--- /XIOS/dev/dev_trunk_omp/xios_test_suite/ENV_local/irene.env	(revision 1844)
+++ /XIOS/dev/dev_trunk_omp/xios_test_suite/ENV_local/irene.env	(revision 1844)
@@ -0,0 +1,12 @@
+module load subversion
+module load cmake
+
+CHMOD() { chmod --quiet ug+rwx,o+rx "$@" ;}
+export -f CHMOD
+
+export xios_full_machine_name="Irene"
+export xios_test_suite_repository=${CCCWORKDIR}/XIOS_TEST_SUITE_REPOSITORY
+export xios_reference_dir=${CCCWORKDIR}
+
+mkdir -p ${xios_test_suite_repository} ; CHMOD ${xios_test_suite_repository}
+mkdir -p ${xios_thredds_dir} ; CHMOD ${xios_thredds_dir}
Index: /XIOS/dev/dev_trunk_omp/xios_test_suite/ENV_local/jeanzay.env
===================================================================
--- /XIOS/dev/dev_trunk_omp/xios_test_suite/ENV_local/jeanzay.env	(revision 1844)
+++ /XIOS/dev/dev_trunk_omp/xios_test_suite/ENV_local/jeanzay.env	(revision 1844)
@@ -0,0 +1,12 @@
+module load subversion
+module load cmake
+
+CHMOD() { setfacl -R -m u::rwx,u:rpsl565:rwx,u:rpsl954:rwx,u:rgzi016:rwx,g::r-x,o::r-x,m::rwx "$@" ;}
+export -f CHMOD
+
+export xios_full_machine_name="Jean-Zay"
+export xios_root=$(bash -c "cd .. && pwd" 2>&1)
+#export xios_test_suite_repository=${WORK}/XIOS_TEST_SUITE_REPOSITORY
+export xios_test_suite_repository=${WORK}/XIOS_TEST_SUITE_REPOSITORY_OMP
+export xios_reference_dir=${WORK}
+mkdir -p $xios_test_suite_repository ; CHMOD $xios_test_suite_repository
Index: /XIOS/dev/dev_trunk_omp/xios_test_suite/HTML/copy_html_irene
===================================================================
--- /XIOS/dev/dev_trunk_omp/xios_test_suite/HTML/copy_html_irene	(revision 1844)
+++ /XIOS/dev/dev_trunk_omp/xios_test_suite/HTML/copy_html_irene	(revision 1844)
@@ -0,0 +1,3 @@
+#!/bin/bash
+
+copy_to_thredds generate_compile_table.js  generate_test_table.js  graph.html  xios_report.html  xios-style.css
Index: /XIOS/dev/dev_trunk_omp/xios_test_suite/HTML/copy_html_jeanzay
===================================================================
--- /XIOS/dev/dev_trunk_omp/xios_test_suite/HTML/copy_html_jeanzay	(revision 1844)
+++ /XIOS/dev/dev_trunk_omp/xios_test_suite/HTML/copy_html_jeanzay	(revision 1844)
@@ -0,0 +1,3 @@
+#!/bin/bash
+
+#nothing to do
Index: /XIOS/dev/dev_trunk_omp/xios_test_suite/HTML/generate_compile_table.js
===================================================================
--- /XIOS/dev/dev_trunk_omp/xios_test_suite/HTML/generate_compile_table.js	(revision 1844)
+++ /XIOS/dev/dev_trunk_omp/xios_test_suite/HTML/generate_compile_table.js	(revision 1844)
@@ -0,0 +1,236 @@
+function generateCompileTable()
+{
+  var machine_list=[];
+  var machine_revision_list=[];
+  var machine_full_name_list=[];
+  var machine_info_list=[];
+
+  if(typeof jeanzay_revision_list != 'undefined') 
+  {
+    machine_list.push("jeanzay");
+    machine_revision_list.push("jeanzay_revision_list")
+    machine_full_name_list.push("Jean-Zay")
+    machine_info_list.push("jeanzay_compile_info_list")
+  }
+  
+  if (typeof irene_revision_list != 'undefined') 
+  {
+    machine_list.push("irene");
+    machine_revision_list.push("irene_revision_list")
+    machine_full_name_list.push("Irene")
+    machine_info_list.push("irene_compile_info_list")
+  }
+  
+  if (typeof other_revision_list != 'undefined') 
+  {
+    machine_list.push("other");
+    machine_revision_list.push("other_revision_list")
+    machine_full_name_list.push("Other")
+    machine_info_list.push("other_compile_info_list")
+  }
+
+  var revision_list=[]
+
+  for (var i=0; i<machine_list.length; i++)
+  {
+    tmp_list = eval(machine_revision_list[i])
+
+    for (var j=0; j<tmp_list.length; j++)
+    {
+      if (revision_list.includes(tmp_list[j]) == false)
+      {
+        revision_list.push(tmp_list[j])
+      }
+    }
+  }
+
+  revision_list.sort(function(a, b){return b-a});
+  
+  
+  // Generate select list for compile table
+
+  var sel = document.getElementById("revision");
+
+  var sel_options = sel.children
+  
+  var new_options=[]
+  for(var i=0; i<sel_options.length-1; i++)
+  {
+    new_options[i] = sel_options[i+1].value
+  }
+  
+  for(var i=0; i<revision_list.length; i++)
+  {
+    if (!new_options.includes(revision_list[i]))
+    {
+      new_options.push(revision_list[i])
+    }
+  }
+  
+  new_options.sort(function(a, b){return b-a})
+  
+  while (sel.lastChild && sel.children.length>1) {
+    sel.removeChild(sel.lastChild);
+  }
+
+  for(var i=0; i<new_options.length; i++)
+  {
+    var opt = document.createElement('option');
+    opt.appendChild( document.createTextNode(new_options[i]));
+    opt.value = new_options[i]; 
+    sel.appendChild(opt);
+  }
+  
+  // Generate content of compile table
+  
+  
+  var table = document.getElementById("compile_table")
+  table.style.backgroundColor = "#84c5ff";
+  table.setAttribute("class", "compile_table")
+  table.setAttribute("id", "compile_table")
+
+  var titelRow = document.getElementById("compile_table_row0")
+  var myCell = document.createElement("TD");
+  myCell.style.maxWidth="100px"
+  myCell.innerHTML = ("Revision");
+  titelRow.appendChild(myCell)
+
+  for (var machine_index=0; machine_index<machine_list.length; machine_index++)
+  {
+    var myCell = document.createElement("TD");
+    myCell.style.minWidth="500px"
+    myCell.innerHTML = (machine_full_name_list[machine_index]);
+    titelRow.appendChild(myCell)
+  }
+
+  var emptyRow = document.createElement("tr")
+  emptyRow.setAttribute("id", "empty_compile_row")
+  emptyRow.style.display="none"
+  table.appendChild(emptyRow)
+  
+  var myCell = document.createElement("TD");
+  myCell.setAttribute("id", "empty_compile_row_revision")
+  myCell.style.fontWeight="bold"
+  emptyRow.appendChild(myCell)
+
+  for (var machine_index=0; machine_index<machine_list.length; machine_index++)
+  {
+    var myCell = document.createElement("TD");
+    myCell.innerHTML="No Compile Information"
+    myCell.style.color="white"
+    emptyRow.appendChild(myCell)
+  }
+
+  for (var i=0; i<revision_list.length; i++)
+  {
+    var revision = revision_list[i]
+
+    var myRow = document.createElement("TR");
+    myRow.setAttribute("id", "compile_table_"+revision);
+    myRow.setAttribute("class", "compile_table_row");
+    table.appendChild(myRow)
+    
+    var myCell = document.createElement("TD");
+    myCell.innerHTML = (revision);
+    myCell.style.fontWeight = "bold";
+    myRow.appendChild(myCell)
+    
+    for( var j=0; j<machine_list.length; j++)
+    {
+      var machine = machine_list[j]
+      var myCell = document.createElement("TD");
+      myCell.setAttribute("id", "compile_table_"+revision+"_"+machine);
+      myRow.appendChild(myCell)
+    }        
+
+  }
+
+  for (var i=0; i<revision_list.length; i++)
+  {
+    var revision = revision_list[i]
+    for ( var j=0; j<machine_list.length; j++)
+    {
+      var machine = machine_list[j]
+      fillSubCompileTable(revision, machine, machine_info_list[j], machine_revision_list[j])
+    }
+  }
+
+}
+
+
+
+function fillSubCompileTable(revision, machine, machine_compile_info, machine_revision)
+{
+  var compile_info = eval(machine_compile_info)
+  var revision_list = eval(machine_revision)
+
+  var myTD = document.getElementById("compile_table_"+revision+"_"+machine);
+  if (!revision_list.includes(revision))
+  {
+    myTD.innerHTML="No Compile Information"
+    myTD.style.color="white"
+  }
+  else
+  {
+    var part_compile_info = []
+    var tmp_mode_list = []
+    var tmp_arch_list = []
+    for(var i=0; i<compile_info.length; i++)
+    {
+      if (revision == compile_info[i][0])
+      {
+        part_compile_info.push(compile_info[i])
+        if (!tmp_mode_list.includes(compile_info[i][3]))
+        {
+          tmp_mode_list.push(compile_info[i][3])
+        }
+        if (!tmp_arch_list.includes(compile_info[i][2]))
+        {
+          tmp_arch_list.push(compile_info[i][2])
+        }
+      }
+    }
+
+    mySubTable = document.createElement("table")
+    mySubTable.setAttribute("class", "compile_sub_table")
+    myTD.appendChild(mySubTable)
+
+    myRow = document.createElement("tr")
+    mySubTable.appendChild(myRow)
+    myCell = document.createElement("td")
+    myRow.appendChild(myCell)
+    for (var j=0; j<tmp_mode_list.length; j++)
+    {
+      myCell = document.createElement("td")
+      myCell.innerHTML=(tmp_mode_list[j])
+      myRow.appendChild(myCell)
+    }
+
+    for (var j=0; j<tmp_arch_list.length; j++)
+    {
+      myRow = document.createElement("tr")
+      mySubTable.appendChild(myRow)
+
+      myCell = document.createElement("td")
+      myCell.innerHTML = (tmp_arch_list[j])
+      myRow.appendChild(myCell)
+
+      
+      for(var i=0; i<tmp_mode_list.length; i++)
+      {
+        myCell = document.createElement("td")
+        for (var k=0; k<part_compile_info.length; k++)
+        {
+          if(part_compile_info[k][2] == tmp_arch_list[j] && part_compile_info[k][3] == tmp_mode_list[i])
+          {
+            myCell.innerHTML = (part_compile_info[k][4])
+            break
+          }
+        }        
+        myRow.appendChild(myCell)
+      }
+    }
+  }
+
+  
+}
Index: /XIOS/dev/dev_trunk_omp/xios_test_suite/HTML/generate_test_table.js
===================================================================
--- /XIOS/dev/dev_trunk_omp/xios_test_suite/HTML/generate_test_table.js	(revision 1844)
+++ /XIOS/dev/dev_trunk_omp/xios_test_suite/HTML/generate_test_table.js	(revision 1844)
@@ -0,0 +1,485 @@
+var dict = {"-1": "&#10060;", "0": "&#10062;", "1": "&#9989;"}
+
+function generateTestTable()
+{
+  var machine_list=[];
+  var machine_revision_list=[];
+  var machine_full_name_list=[];
+  var machine_info_list=[];
+
+  if(typeof test_jeanzay_revision_list != 'undefined') 
+  {
+    machine_list.push("jeanzay");
+    machine_revision_list.push("test_jeanzay_revision_list")
+    machine_full_name_list.push("Jean-Zay")
+    machine_info_list.push("test_jeanzay_info_list")
+  }
+  
+  if (typeof test_irene_revision_list != 'undefined') 
+  {
+    machine_list.push("irene");
+    machine_revision_list.push("test_irene_revision_list")
+    machine_full_name_list.push("Irene")
+    machine_info_list.push("test_irene_info_list")
+  }
+  
+  if (typeof test_other_revision_list != 'undefined') 
+  {
+    machine_list.push("other");
+    machine_revision_list.push("test_other_revision_list")
+    machine_full_name_list.push("Other")
+    machine_info_list.push("test_other_info_list")
+  }
+
+  var revision_list=[]
+
+  for (var i=0; i<machine_list.length; i++)
+  {
+    tmp_list = eval(machine_revision_list[i])
+
+    for (var j=0; j<tmp_list.length; j++)
+    {
+      if (revision_list.includes(tmp_list[j]) == false)
+      {
+        revision_list.push(tmp_list[j])
+      }
+    }
+  }
+
+  revision_list.sort(function(a, b){return b-a});
+
+  // Generate select list for test table
+
+  var sel = document.getElementById("revision");
+
+  var sel_options = sel.children
+  
+  var new_options=[]
+  for(var i=0; i<sel_options.length-1; i++)
+  {
+    new_options[i] = sel_options[i+1].value
+  }
+  
+  for(var i=0; i<revision_list.length; i++)
+  {
+    if (!new_options.includes(revision_list[i]))
+    {
+      new_options.push(revision_list[i])
+    }
+  }
+  
+  new_options.sort(function(a, b){return b-a})
+  
+  while (sel.lastChild && sel.children.length>1) {
+    sel.removeChild(sel.lastChild);
+  }
+
+  for(var i=0; i<new_options.length; i++)
+  {
+    var opt = document.createElement('option');
+    opt.appendChild( document.createTextNode(new_options[i]));
+    opt.value = new_options[i]; 
+    sel.appendChild(opt);
+  }
+  
+
+
+  
+  // Generate content of test table
+  
+  var table = document.getElementById("test_table")
+  table.style.backgroundColor = "#84c5ff";
+  table.setAttribute("class", "test_table")
+  table.setAttribute("id", "test_table")
+
+  var titelRow = document.getElementById("test_table_row0")
+  var myCell = document.createElement("TD");
+  myCell.style.minWidth="150px"
+  myCell.style.maxWidth="150px"
+  myCell.innerHTML = ("Revision");
+  titelRow.appendChild(myCell)
+
+  for (var machine_index=0; machine_index<machine_list.length; machine_index++)
+  {
+    var myCell = document.createElement("TD");
+    myCell.style.minWidth="50px"
+    myCell.innerHTML = (machine_full_name_list[machine_index]);
+    titelRow.appendChild(myCell)
+  }
+
+  var emptyRow = document.createElement("tr")
+  emptyRow.setAttribute("id", "empty_test_row")
+  emptyRow.style.display="none"
+  table.appendChild(emptyRow)
+  
+  var myCell = document.createElement("TD");
+  myCell.setAttribute("id", "empty_test_row_revision")
+  myCell.style.fontWeight="bold"
+  emptyRow.appendChild(myCell)
+
+  for (var machine_index=0; machine_index<machine_list.length; machine_index++)
+  {
+    var myCell = document.createElement("TD");
+    myCell.innerHTML="No Test Information"
+    myCell.style.color="white"
+    emptyRow.appendChild(myCell)
+  }
+
+
+  for (var i=0; i<revision_list.length; i++)
+  {
+    var revision = revision_list[i]
+
+    var myRow = document.createElement("TR");
+    myRow.setAttribute("id", "test_table_"+revision);
+    myRow.setAttribute("class", "test_table_row");
+    table.appendChild(myRow)
+    
+    var myCell = document.createElement("TD");
+    myCell.innerHTML = (revision);
+    myCell.style.fontWeight = "bold";
+    myRow.appendChild(myCell)
+    
+    for( var j=0; j<machine_list.length; j++)
+    {
+      var machine = machine_list[j]
+      var myCell = document.createElement("TD");
+      myCell.setAttribute("id", "test_table_"+revision+"_"+machine);
+      myRow.appendChild(myCell)
+      myRow.appendChild(myCell)
+    }        
+  }
+
+  for (var i=0; i<revision_list.length; i++)
+  {
+    var revision = revision_list[i]
+    for (var j=0; j<machine_list.length; j++)
+    {
+      var machine = machine_list[j]
+      var has_test_info=false
+      tmp_info = eval(machine_info_list[j])
+      for (var k=0; k<eval(machine_info_list[j]).length; k++)
+      {
+        target_info = tmp_info[k]
+        if (target_info[0] == revision && target_info[1] == machine)
+        {
+          fillSubTestTable(revision, machine, target_info[2], target_info[3], target_info[4], target_info[5], target_info[6], target_info[7])
+          has_test_info = true
+        }
+      }
+      if (!has_test_info)
+      {
+        var myTD = document.getElementById("test_table_"+revision+"_"+machine);
+        myTD.innerHTML = "No Test Information"
+        myTD.style.color = "white"
+      }
+    }
+  }
+  update_status()
+}
+
+function fillSubTestTable(revision, machine, build_dir, branch_name, machine_name, arch_name, mode_name, full_dir)
+{
+  var info_list = eval("test_"+machine+"_"+revision+"_"+build_dir.replace("build_",""))
+
+  var myTD = document.getElementById("test_table_"+revision+"_"+machine);
+  var mySubTable = document.createElement("table")
+  myTD.appendChild(mySubTable)
+  mySubTable.style.minWidth="200px"
+  mySubTable.setAttribute("class", "test_sub_table")
+  mySubTable.setAttribute("id", "test_sub_table_"+revision+"_"+machine+"_"+build_dir)
+
+  if(info_list.length == 0)
+  {
+    myRow = document.createElement("tr")
+    myRow.setAttribute("id","test_sub_table_row_"+revision+"_"+machine+"_"+build_dir)
+    myRow.setAttribute("class","test_sub_table_row_"+revision+"_"+machine)
+    myRow.classList.add("build_level")
+    myCell = document.createElement("td")
+    myCell.innerHTML = build_dir.replace("build_","")+" Build Failed"
+    myCell.style.color = "white"
+    myCell.style.fontWeight = "bold"
+    myRow.appendChild(myCell)
+    mySubTable.append(myRow)
+    return;
+  }
+
+  myRow = document.createElement("tr")
+  myRow.setAttribute("id","test_sub_table_row_"+revision+"_"+machine+"_"+build_dir)
+  myRow.setAttribute("class","test_sub_table_row_"+revision+"_"+machine)
+  myRow.classList.add("build_level")
+  myCell = document.createElement("td")
+  myCell.innerHTML = build_dir.replace("build_","")
+  myCell.onclick=function() {mytoggle("test_sub_table_"+revision+"_"+machine+"_"+build_dir)}
+  myRow.appendChild(myCell)
+  mySubTable.append(myRow)
+
+  myCell = document.createElement("td")
+  myCell_1 = document.createElement("div")
+  myCell_1.setAttribute("class", "dropdown")
+  myCell_2 = document.createElement("button")
+  myCell_2.onclick = function() {show_dropdown("test_sub_table_"+revision+"_"+machine+"_"+build_dir+"_dropdown")}
+  myCell_2.onmouseleave = function() {hide_dropdown("test_sub_table_"+revision+"_"+machine+"_"+build_dir+"_dropdown")}
+  myCell_2.innerHTML=("&#128270;")
+  myCell_3 = document.createElement("div")
+  myCell_3.setAttribute("class", "dropdown-content")
+  myCell_3.setAttribute("id", "test_sub_table_"+revision+"_"+machine+"_"+build_dir+"_dropdown")
+  myCell_4 = document.createElement("a")
+  myCell_4.innerHTML = ("show plain report")
+  myCell_4.onclick = function() {show_plain_report(machine, revision, build_dir)}
+  myCell_5 = document.createElement("a")
+  myCell_5.innerHTML = ("show xios info")
+  myCell_5.onclick = function() {show_text("<table><tr><td>Branch</td><td><em>"+branch_name+"</em></td></tr><tr><td>Revision</td><td><em>"+revision+"</em></td></tr><tr><td>Machine</td><td><em>"+machine_name+"</em></td></tr><tr><td>Architecture</td><td><em>"+arch_name+"</em></td></tr><tr><td>Compile mode</td><td><em>"+mode_name+"</em></td></tr><tr><td>Full build directory</td><td><em>"+full_dir+"</em></td></tr><tr><td>Short build directory</td><td><em>"+build_dir+"</em></td></tr></table>")}
+  myCell_2.appendChild(myCell_3)
+  myCell_3.appendChild(myCell_4)
+  myCell_3.appendChild(myCell_5)
+  myCell_1.appendChild(myCell_2)
+  myCell.appendChild(myCell_1)
+  myRow.appendChild(myCell)
+
+  for (var i=0; i<2; i++)
+  {
+    myCell = document.createElement("td")
+    myRow.appendChild(myCell)
+  }
+
+  myCell = document.createElement("td")
+  myCell.setAttribute("class", "cell_to_update")
+  myCell.setAttribute("id","test_sub_table_"+revision+"_"+machine+"_"+build_dir+"_status")
+  myCell.innerHTML = 1
+  myRow.appendChild(myCell)
+
+  for (var i=0; i<3; i++)
+  {
+    myCell = document.createElement("td")
+    myRow.appendChild(myCell)
+  }
+
+  var previous_status=["","","",""]
+  var current_status=info_list[0]
+  for(var i=0; i<info_list.length; i++)
+  {
+    current_status = info_list[i]
+    if (current_status[0] != previous_status[0])
+    {
+      create_rows(3, revision, machine, build_dir, current_status, full_dir)
+    }
+    else if (current_status[1] != previous_status[1])
+    {
+      create_rows(2, revision, machine, build_dir, current_status, full_dir)
+    }
+    else if (current_status[2] != previous_status[2])
+    {
+      create_rows(1, revision, machine, build_dir, current_status, full_dir)
+    }
+    previous_status = current_status
+  }
+
+
+}
+
+
+function create_rows(nb, revision, machine, build_dir, status, full_dir)
+{
+  tt = document.getElementById("test_sub_table_"+revision+"_"+machine+"_"+build_dir)
+  if(nb==3)
+  {
+    // algo level
+
+    myRow = document.createElement("tr")
+    myRow.setAttribute("class", "test_sub_table_"+revision+"_"+machine+"_"+build_dir)
+    myRow.classList.add('algo_level');
+    myRow.setAttribute("id", "test_sub_table_"+revision+"_"+machine+"_"+build_dir+"_"+status[0])
+    myRow.style.display = "none";
+    tt.appendChild(myRow)
+    
+    
+    myCell = document.createElement("td")
+    myRow.appendChild(myCell)
+
+
+    myCell = document.createElement("td")
+    myCell.innerHTML = status[0]
+    myCell.onclick=function() {mytoggle("test_sub_table_"+revision+"_"+machine+"_"+build_dir+"_"+status[0])}
+    myRow.appendChild(myCell)
+
+    myCell = document.createElement("td")
+    myCell_1 = document.createElement("div")
+    myCell_1.setAttribute("class", "dropdown")
+    myCell_2 = document.createElement("button")
+    myCell_2.onclick = function() {show_dropdown("test_sub_table_"+revision+"_"+machine+"_"+build_dir+"_"+status[0]+"_dropdown")}
+    myCell_2.onmouseleave = function() {hide_dropdown("test_sub_table_"+revision+"_"+machine+"_"+build_dir+"_"+status[0]+"_dropdown")}
+    myCell_2.innerHTML=("&#128270;")
+    myCell_3 = document.createElement("div")
+    myCell_3.setAttribute("class", "dropdown-content")
+    myCell_3.setAttribute("id", "test_sub_table_"+revision+"_"+machine+"_"+build_dir+"_"+status[0]+"_dropdown")
+    myCell_4 = document.createElement("a")
+    myCell_4.innerHTML = ("show user_params.def")
+    myCell_4.onclick = function() {show_user_params(machine, revision, build_dir, status[0])}
+    myCell_5 = document.createElement("a")
+    myCell_5.innerHTML = ("show location")
+    myCell_5.onclick = function() {show_text(full_dir.replace(build_dir, "GENERIC_TESTCASE/")+status[0])}
+    myCell_2.appendChild(myCell_3)
+    myCell_3.appendChild(myCell_4)
+    myCell_3.appendChild(myCell_5)
+    myCell_1.appendChild(myCell_2)
+    myCell.appendChild(myCell_1)
+    myRow.appendChild(myCell)
+
+    for (var i=0; i<2; i++)
+    {
+      myCell = document.createElement("td")
+      myRow.appendChild(myCell)
+    }
+
+    myCell = document.createElement("td")
+    myCell.innerHTML = 1
+    myCell.setAttribute("id", "test_sub_table_"+revision+"_"+machine+"_"+build_dir+"_"+status[0]+"_status")
+    myCell.setAttribute("class", "cell_to_update")
+    myRow.appendChild(myCell)
+    
+    for (var i=0; i<2; i++)
+    {
+      myCell = document.createElement("td")
+      myRow.appendChild(myCell)
+    }
+  }
+
+  if(nb>=2)
+  {
+    // config level
+
+    myRow = document.createElement("tr")
+    myRow.setAttribute("class", "test_sub_table_"+revision+"_"+machine+"_"+build_dir+"_"+status[0])
+    myRow.classList.add("config_level")
+    myRow.setAttribute("id", "test_sub_table_"+revision+"_"+machine+"_"+build_dir+"_"+status[0]+"_"+status[1])
+    myRow.style.display = "none";
+    tt.appendChild(myRow)
+    
+    for (var i=0; i<2; i++)
+    {
+      myCell = document.createElement("td")
+      myRow.appendChild(myCell)
+    }
+
+    myCell = document.createElement("td")
+    myCell.innerHTML = status[1]
+    myCell.onclick=function() {mytoggle("test_sub_table_"+revision+"_"+machine+"_"+build_dir+"_"+status[0]+"_"+status[1])}
+    myRow.appendChild(myCell)
+
+    myCell = document.createElement("td")
+    myCell_1 = document.createElement("div")
+    myCell_1.setAttribute("class", "dropdown")
+    myCell_2 = document.createElement("button")
+    myCell_2.onclick = function() {show_dropdown("test_sub_table_"+revision+"_"+machine+"_"+build_dir+"_"+status[0]+"_"+status[1]+"_dropdown")}
+    myCell_2.onmouseleave = function() {hide_dropdown("test_sub_table_"+revision+"_"+machine+"_"+build_dir+"_"+status[0]+"_"+status[1]+"_dropdown")}
+    myCell_2.innerHTML=("&#128270;")
+    myCell_3 = document.createElement("div")
+    myCell_3.setAttribute("class", "dropdown-content")
+    myCell_3.setAttribute("id", "test_sub_table_"+revision+"_"+machine+"_"+build_dir+"_"+status[0]+"_"+status[1]+"_dropdown")
+    myCell_4 = document.createElement("a")
+    myCell_4.innerHTML = ("show all_param.def")
+    myCell_4.onclick = function() {show_all_params(machine, revision, build_dir, status[0], status[1])}
+    myCell_5 = document.createElement("a")
+    myCell_5.innerHTML = ("show location")
+    myCell_5.onclick = function() {show_text(full_dir.replace(build_dir, "GENERIC_TESTCASE/")+status[0]+"/"+status[1])}
+    myCell_2.appendChild(myCell_3)
+    myCell_3.appendChild(myCell_4)
+    myCell_3.appendChild(myCell_5)
+    myCell_1.appendChild(myCell_2)
+    myCell.appendChild(myCell_1)
+    myRow.appendChild(myCell)
+
+
+    for (var i=0; i<2; i++)
+    {
+      myCell = document.createElement("td")
+      myRow.appendChild(myCell)
+    }
+
+    myCell = document.createElement("td")
+    myCell.innerHTML = 1
+    myCell.setAttribute("id", "test_sub_table_"+revision+"_"+machine+"_"+build_dir+"_"+status[0]+"_"+status[1]+"_status")   
+    myCell.setAttribute("class", "cell_to_update")
+    myRow.appendChild(myCell)
+    
+    myCell = document.createElement("td")
+    myRow.appendChild(myCell)
+  }
+
+  // file level
+
+  myRow = document.createElement("tr")
+  myRow.setAttribute("class", "test_sub_table_"+revision+"_"+machine+"_"+build_dir+"_"+status[0]+"_"+status[1])
+  myRow.classList.add("file_level")
+  myRow.setAttribute("id", "test_sub_table_"+revision+"_"+machine+"_"+build_dir+"_"+status[0]+"_"+status[1]+"_"+status[2])
+  myRow.style.display = "none";
+  tt.appendChild(myRow)
+    
+  for (var i=0; i<3; i++)
+  {
+    myCell = document.createElement("td")
+    myRow.appendChild(myCell)
+  }
+
+  myCell = document.createElement("td")
+  myCell.innerHTML = status[2]
+  myRow.appendChild(myCell)
+
+  for (var i=0; i<3; i++)
+  {
+    myCell = document.createElement("td")
+    myRow.appendChild(myCell)
+  }
+
+  myCell = document.createElement("td")
+  myCell.setAttribute("class", "cell_to_update")
+  myCell.innerHTML = status[3]
+  myRow.appendChild(myCell)
+
+  var cell = document.getElementById("test_sub_table_"+revision+"_"+machine+"_"+build_dir+"_"+status[0]+"_"+status[1]+"_status")
+  cell.innerHTML = Math.min(cell.innerHTML, status[3])
+    
+  var cell = document.getElementById("test_sub_table_"+revision+"_"+machine+"_"+build_dir+"_"+status[0]+"_status")
+  cell.innerHTML = Math.min(cell.innerHTML, status[3])
+
+  var cell = document.getElementById("test_sub_table_"+revision+"_"+machine+"_"+build_dir+"_status")
+  cell.innerHTML = Math.min(cell.innerHTML, status[3])
+
+}
+
+function update_status()
+{
+  var cells = document.getElementsByClassName("cell_to_update")
+  for (var i=0; i<cells.length; i++)
+  {
+    cells[i].innerHTML = dict[cells[i].innerHTML]
+  }
+}
+
+function mytoggle(classname)
+{
+  var myCells = document.getElementsByClassName(classname)
+  for (var i=0; i<myCells.length; i++)
+  {
+    var mySubCells = document.getElementsByClassName(myCells[i].id)
+    if (myCells[i].style.display=="table-row")
+    {
+      myCells[i].style.display="none" 
+      for(var j=0; j<mySubCells.length; j++)
+      {
+        mySubCells[j].style.display="none"
+        var mySubSubCells = document.getElementsByClassName(mySubCells[j].id)
+        for(var k=0; k<mySubSubCells.length; k++)
+        {
+          mySubSubCells[k].style.display="none"
+        }
+      }
+    }
+    else
+    {
+      myCells[i].style.display="table-row"
+    }
+  }
+}
+
Index: /XIOS/dev/dev_trunk_omp/xios_test_suite/HTML/graph.html
===================================================================
--- /XIOS/dev/dev_trunk_omp/xios_test_suite/HTML/graph.html	(revision 1844)
+++ /XIOS/dev/dev_trunk_omp/xios_test_suite/HTML/graph.html	(revision 1844)
@@ -0,0 +1,1165 @@
+<html>
+
+<!--
+ ##########################################################################
+ Author: Patrick.Brockmann@cea.fr
+ ##########################################################################
+-->
+
+<head>
+
+    <meta charset="utf-8">
+
+    <style type="text/css">
+        body {
+            font-family: arial;
+            font-size: 12px;
+        }
+
+        .row {
+            margin-top: 10px;
+            margin-bottom: 20px;
+        }
+
+        #mynetwork {
+            width: 1000px;
+            height: 1000px;
+            border: 1px solid lightgray;
+        }
+
+        #mynetwork1 {
+            width: 200px;
+            height: 200px;
+            border: 1px solid lightgray;
+        }
+
+        input {
+            padding: 10px;
+        }
+
+        ul li {
+            display: inline;
+            border: 1px solid gray;
+            padding: 4px;
+            margin: 2px;
+            border-radius: 4px;
+        }
+
+        .btn {
+            margin-top: 5px;
+        }
+
+        /* /!\ Use border-top-color not border-color for firefox compatibility */
+    </style>
+
+</head>
+
+<body>
+    <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
+
+    <script type="text/javascript" src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
+
+    <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/js/bootstrap.js"></script>
+    <link href="http://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.css" rel="stylesheet" type="text/css" />
+
+    <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/vis/4.21.0/vis.min.js"></script>
+    <link href="https://cdnjs.cloudflare.com/ajax/libs/vis/4.21.0/vis.min.css" rel="stylesheet" type="text/css" />
+
+    <link href="https://gitcdn.github.io/bootstrap-toggle/2.2.2/css/bootstrap-toggle.min.css" rel="stylesheet">
+    <script src="https://gitcdn.github.io/bootstrap-toggle/2.2.2/js/bootstrap-toggle.min.js"></script>
+
+    <script type="text/javascript">
+
+        //######################################################################################################
+        $(document).ready(function() {
+
+            var container = $('#mynetwork')[0];
+            var container1 = $('#mynetwork1')[0];
+
+            //===========================================================
+            $('#file').on('change', function() {
+                var file = $("#file").prop('files')[0];
+                handleFileSelect(file);
+            });
+
+            //===========================================================
+            $('#lastTemporal').on('click', function() {
+                var node = nodes.get(nodeSelected);
+
+                if (node.class == 5) //temporal filter
+                {
+                    // disable all parents
+                    node.hidden = true;
+                    console.log("node.id = ", node.id, "hidden = ", node.hidden);
+                    nodes.update(node);
+
+                    var connectedEdgeArray = edges.get(network.getConnectedEdges(node.id));
+                    for (j = 0; j < connectedEdgeArray.length; j++) {
+                        var edge = connectedEdgeArray[j];
+                        if (edge.to == node.id) {
+                            edge.hidden = true;
+                        }
+
+                    }
+                    edges.update(connectedEdgeArray);
+
+                    var allNode = nodes.get(allParentsNode);
+                    for (i = 0; i < allNode.length; i++) {
+                        var node = allNode[i];
+                        node.hidden = true;
+                    }
+                    nodes.update(allNode);
+
+                    for (i = 0; i < allNode.length; i++) {
+                        var node = allNode[i];
+
+                        var cNodes = nodes.get(network.getConnectedNodes(node.id, 'to'));
+                        for (j = 0; j < cNodes.length; j++) {
+                            var cnode = cNodes[j];
+
+                            if (cnode.hidden != true) {
+                                node.hidden = false;
+                                nodes.update(node);
+                                break;
+                            }
+                        }
+                    }
+                    nodes.update(allNode);
+
+                    node = nodes.get(nodeSelected);
+                    node.hidden = false;
+                    console.log("node.id = ", node.id, "hidden = ", node.hidden);
+                    nodes.update(node);
+
+                    allNode = nodes.get();
+                    nodes.update(allNode);
+
+
+
+                    // enable last input
+                    var inputnodes = network.getConnectedNodes(node.id, 'from');
+                    var repere = 0;
+                    for (i = 0; i < inputnodes.length; i++) {
+                        repere = Math.max(repere, nodes.get(inputnodes[i]).id);
+                    }
+                    var inputnode = nodes.get(repere);
+                    console.log("last inputnode id = ", inputnode.id);
+
+                    inputnode.hidden = false;
+                    nodes.update(inputnode);
+
+                    var edges_ofinputnode = edges.get(network.getConnectedEdges(inputnode.id));
+                    for (i = 0; i < edges_ofinputnode.length; i++) {
+                        var edge = edges_ofinputnode[i];
+                        if (edge.from == inputnode.id) {
+                            edge.hidden = false;
+                        }
+                    }
+                    edges.update(edges_ofinputnode);
+
+                    var allNode = nodes.get();
+                    nodes.update(allNode);
+
+                }
+
+
+            });
+
+
+            //===========================================================
+            $('#showGraph').on('click', function() {
+                //===== hide all except selected
+                var allNode = nodes.get();
+
+                for (i = 0; i < allNode.length; i++) {
+                    var node = allNode[i];
+
+                    if (node.hidden != true) {
+                        node.hidden = true;
+                    }
+                }
+
+                nodes.update(allNode);
+
+                var node = nodes.get(nodeSelected);
+                node.hidden = false;
+                nodes.update(node);
+
+                //===== enable all parents
+                console.log("showAllParents: allParentsNode = ", allParentsNode);
+                allNode = nodes.get(allParentsNode);
+
+                for (i = 0; i < allNode.length; i++) {
+                    node = allNode[i];
+                    node.font = {
+                        color: 'black'
+                    }
+                    node.hidden = false;
+                    if (node.filled == 1) {
+                        node.color = {
+                            background: redNode.background,
+                            border: redNode.border,
+                            hover: redNode.background,
+                            highlight: {
+                                background: redNode.background,
+                                border: 'blue'
+                            }
+                        }
+                    } else {
+                        node.color = {
+                            background: styleArr[node.class].background,
+                            border: styleArr[node.class].border,
+                            highlight: {
+                                background: styleArr[node.class].background,
+                                border: 'blue'
+                            }
+                        }
+                    }
+                }
+
+                nodes.update(allNode);
+
+                node = nodes.get(nodeSelected);
+                var connectedEdgeArray = edges.get(network.getConnectedEdges(node.id));
+                for (j = 0; j < connectedEdgeArray.length; j++) {
+                    var edge = connectedEdgeArray[j];
+                    if (edge.to == node.id) {
+                        edge.hidden = false;
+                    }
+
+                }
+                edges.update(connectedEdgeArray);
+
+                allNode = nodes.get();
+                nodes.update(allNode);
+
+                //===== enable all children
+                allNode = nodes.get(allChildNode);
+
+                for (i = 0; i < allNode.length; i++) {
+                    node = allNode[i];
+                    node.font = {
+                        color: 'black'
+                    }
+                    node.hidden = false;
+                    if (node.filled == 1) {
+                        node.color = {
+                            background: redNode.background,
+                            border: redNode.border,
+                            hover: redNode.background,
+                            highlight: {
+                                background: redNode.background,
+                                border: 'blue'
+                            }
+                        }
+                    } else {
+                        node.color = {
+                            background: styleArr[node.class].background,
+                            border: styleArr[node.class].border,
+                            highlight: {
+                                background: styleArr[node.class].background,
+                                border: 'blue'
+                            }
+                        }
+                    }
+                }
+
+                nodes.update(allNode);
+
+                node = nodes.get(nodeSelected);
+                connectedEdgeArray = edges.get(network.getConnectedEdges(node.id));
+                for (j = 0; j < connectedEdgeArray.length; j++) {
+                    var edge = connectedEdgeArray[j];
+                    if (edge.from == node.id) {
+                        edge.hidden = false;
+                    }
+
+                }
+                edges.update(connectedEdgeArray);
+
+                allNode = nodes.get();
+                nodes.update(allNode);
+
+
+                network1 = new vis.Network(container1, data);
+
+
+            });
+
+
+
+            //===========================================================
+            $('#disableAll').on('click', function() {
+                var allNode = nodes.get();
+
+                for (i = 0; i < allNode.length; i++) {
+                    var node = allNode[i];
+
+                    if (node.hidden != true) {
+                        node.hidden = true;
+                    }
+                }
+                nodes.update(allNode);
+            });
+
+
+            //===========================================================
+            $('#enableAll').on('click', function() {
+                var allNode = nodes.get();
+
+                for (i = 0; i < allNode.length; i++) {
+                    var node = allNode[i];
+
+                    if (node.hidden != false) {
+                        node.hidden = false;
+                    }
+                }
+                nodes.update(allNode);
+
+                var allEdge = edges.get();
+                for (i = 0; i < allEdge.length; i++) {
+                    var edge = allEdge[i];
+
+                    if (edge.hidden != false) {
+                        edge.hidden = false;
+                    }
+                }
+                edges.update(allEdge);
+
+            });
+
+
+
+            //===========================================================
+            $('#enableInput').on('click', function() {
+                var allNode = nodes.get();
+
+                for (i = 0; i < allNode.length; i++) {
+                    var node = allNode[i];
+
+                    if (node.class == 1) {
+                        node.hidden = false;
+                    }
+                }
+                nodes.update(allNode);
+            });
+
+
+
+            //===========================================================
+            $('#enableOutput').on('click', function() {
+                var allNode = nodes.get();
+
+                for (i = 0; i < allNode.length; i++) {
+                    var node = allNode[i];
+
+                    if (node.class >= 6 || node.filled == 1) {
+                        node.hidden = false;
+                    }
+                }
+                nodes.update(allNode);
+            });
+
+
+            //===========================================================
+            $('#hideNode').on('click', function() {
+                var node = nodes.get(nodeSelected);
+
+                node.color = {
+                    background: transparentNode.background,
+                    border: transparentNode.border,
+                    highlight: {
+                        background: transparentNode.border,
+                        border: 'blue'
+                    }
+                }
+                node.font = {
+                    color: transparentNode.background
+                }
+                nodes.update(node);
+
+                var connectedEdgeArray = edges.get(network.getConnectedEdges(node.id));
+                for (i = 0; i < connectedEdgeArray.length; i++) {
+                    var edge = connectedEdgeArray[i];
+
+                    edge.color = {
+                        color: transparentEdge.color,
+                        highlight: transparentEdge.color,
+                        hover: transparentEdge.color,
+                    }
+                    edge.font = {
+                        size: 0
+                    }
+
+                }
+                edges.update(connectedEdgeArray);
+
+            });
+
+
+            //===========================================================
+            $('#showNode').on('click', function() {
+                var node = nodes.get(nodeSelected);
+
+                node.font = {
+                    color: 'black'
+                }
+                if (node.filled == 1) {
+                    node.color = {
+                        background: redNode.background,
+                        border: redNode.border,
+                        hover: redNode.background,
+                        highlight: {
+                            background: redNode.background,
+                            border: 'blue'
+                        }
+                    }
+                } else {
+                    node.color = {
+                        background: styleArr[node.class].background,
+                        border: styleArr[node.class].border,
+                        highlight: {
+                            background: styleArr[node.class].background,
+                            border: 'blue'
+                        }
+                    }
+                }
+                nodes.update(node);
+
+                var connectedEdgeArray = edges.get(network.getConnectedEdges(node.id));
+                for (i = 0; i < connectedEdgeArray.length; i++) {
+
+                    var edge = connectedEdgeArray[i];
+
+                    edge.color = {
+                        color: 'black',
+                        highlight: 'black',
+                        hover: 'black',
+                    }
+                    edge.font = {
+                        size: 14,
+                    }
+                }
+                edges.update(connectedEdgeArray);
+            });
+
+
+            //===========================================================
+            $('#enableParents').on('click', function() {
+                console.log("enableParents: ", allParentsNode);
+
+                var node = nodes.get(nodeSelected);
+
+                var connectedParents = nodes.get(network.getConnectedNodes(node.id, "from"));
+                console.log("connectedParents = ", connectedParents);
+
+                for (i = 0; i < connectedParents.length; i++) {
+                    var node = connectedParents[i];
+                    node.font = {
+                        color: 'black'
+                    }
+                    node.hidden = false;
+                    if (node.filled == 1) {
+                        node.color = {
+                            background: redNode.background,
+                            border: redNode.border,
+                            hover: redNode.background,
+                            highlight: {
+                                background: redNode.background,
+                                border: 'blue'
+                            }
+                        }
+                    } else {
+                        node.color = {
+                            background: styleArr[node.class].background,
+                            border: styleArr[node.class].border,
+                            highlight: {
+                                background: styleArr[node.class].background,
+                                border: 'blue'
+                            }
+                        }
+                    }
+                }
+                nodes.update(connectedParents);
+            });
+
+
+
+            //===========================================================
+            $('#enableAllParents').on('click', function() {
+                console.log("showAllParents: allParentsNode = ", allParentsNode);
+                var allNode = nodes.get(allParentsNode);
+
+                for (i = 0; i < allNode.length; i++) {
+                    var node = allNode[i];
+                    node.font = {
+                        color: 'black'
+                    }
+                    node.hidden = false;
+                    if (node.filled == 1) {
+                        node.color = {
+                            background: redNode.background,
+                            border: redNode.border,
+                            hover: redNode.background,
+                            highlight: {
+                                background: redNode.background,
+                                border: 'blue'
+                            }
+                        }
+                    } else {
+                        node.color = {
+                            background: styleArr[node.class].background,
+                            border: styleArr[node.class].border,
+                            highlight: {
+                                background: styleArr[node.class].background,
+                                border: 'blue'
+                            }
+                        }
+                    }
+                }
+
+                nodes.update(allNode);
+
+                var node = nodes.get(nodeSelected);
+                var connectedEdgeArray = edges.get(network.getConnectedEdges(node.id));
+                for (j = 0; j < connectedEdgeArray.length; j++) {
+                    var edge = connectedEdgeArray[j];
+                    if (edge.to == node.id) {
+                        edge.hidden = false;
+                    }
+
+                }
+                edges.update(connectedEdgeArray);
+
+                allNode = nodes.get();
+                nodes.update(allNode);
+
+            });
+
+
+
+
+            //===========================================================
+            $('#disableAllParents').on('click', function() {
+                console.log("disableAllParents: ", allParentsNode);
+
+                var node = nodes.get(nodeSelected);
+                node.hidden = true;
+                console.log("node.id = ", node.id, "hidden = ", node.hidden);
+                nodes.update(node);
+
+                var connectedEdgeArray = edges.get(network.getConnectedEdges(node.id));
+                for (j = 0; j < connectedEdgeArray.length; j++) {
+                    var edge = connectedEdgeArray[j];
+                    if (edge.to == node.id) {
+                        edge.hidden = true;
+                    }
+
+                }
+                edges.update(connectedEdgeArray);
+
+                var allNode = nodes.get(allParentsNode);
+                for (i = 0; i < allNode.length; i++) {
+                    var node = allNode[i];
+                    node.hidden = true;
+                }
+                nodes.update(allNode);
+
+                for (i = 0; i < allNode.length; i++) {
+                    var node = allNode[i];
+
+                    var cNodes = nodes.get(network.getConnectedNodes(node.id, 'to'));
+                    for (j = 0; j < cNodes.length; j++) {
+                        var cnode = cNodes[j];
+
+                        if (cnode.hidden != true) {
+                            node.hidden = false;
+                            nodes.update(node);
+                            break;
+                        }
+                    }
+                }
+                nodes.update(allNode);
+
+                node = nodes.get(nodeSelected);
+                node.hidden = false;
+                console.log("node.id = ", node.id, "hidden = ", node.hidden);
+                nodes.update(node);
+
+                allNode = nodes.get();
+                nodes.update(allNode);
+            });
+
+
+            //===========================================================
+            $('#enableChild').on('click', function() {
+                console.log("enableChild: ", allChildNode);
+                var node = nodes.get(nodeSelected);
+
+                var connectedChild = nodes.get(network.getConnectedNodes(node.id, "to"));
+                console.log("connectedChild = ", connectedChild);
+
+                for (i = 0; i < connectedChild.length; i++) {
+                    var node = connectedChild[i];
+                    node.font = {
+                        color: 'black'
+                    }
+                    node.hidden = false;
+                    if (node.filled == 1) {
+                        node.color = {
+                            background: redNode.background,
+                            border: redNode.border,
+                            hover: redNode.background,
+                            highlight: {
+                                background: redNode.background,
+                                border: 'blue'
+                            }
+                        }
+                    } else {
+                        node.color = {
+                            background: styleArr[node.class].background,
+                            border: styleArr[node.class].border,
+                            highlight: {
+                                background: styleArr[node.class].background,
+                                border: 'blue'
+                            }
+                        }
+                    }
+                }
+                nodes.update(connectedChild);
+                var connectedEdgeArray = edges.get(network.getConnectedEdges(node.id));
+                for (j = 0; j < connectedEdgeArray.length; j++) {
+                    var edge = connectedEdgeArray[j];
+                    if (edge.from == node.id) {
+                        edge.hidden = false;
+                    }
+
+                }
+                edges.update(connectedEdgeArray);
+
+            });
+
+
+
+            //===========================================================
+            $('#enableAllChild').on('click', function() {
+                console.log("enableAllChild: ", allChildNode);
+
+                var node = nodes.get(nodeSelected);
+                node.hidden = false;
+                console.log("node.id = ", node.id, "hidden = ", node.hidden);
+                nodes.update(node);
+
+                var connectedEdgeArray = edges.get(network.getConnectedEdges(node.id));
+                for (j = 0; j < connectedEdgeArray.length; j++) {
+                    var edge = connectedEdgeArray[j];
+                    if (edge.from == node.id) {
+                        edge.hidden = false;
+                    }
+
+                }
+                edges.update(connectedEdgeArray);
+
+                var edgesforupdate = [];
+                var count=0;
+
+
+                var allNode = nodes.get(allChildNode);
+
+                for (i = 0; i < allNode.length; i++) {
+                    node = allNode[i];
+                    node.font = {
+                        color: 'black'
+                    }
+                    node.hidden = false;
+                    if (node.filled == 1) {
+                        node.color = {
+                            background: redNode.background,
+                            border: redNode.border,
+                            hover: redNode.background,
+                            highlight: {
+                                background: redNode.background,
+                                border: 'blue'
+                            }
+                        }
+                    } else {
+                        node.color = {
+                            background: styleArr[node.class].background,
+                            border: styleArr[node.class].border,
+                            highlight: {
+                                background: styleArr[node.class].background,
+                                border: 'blue'
+                            }
+                        }
+                    }
+                    var decendentEdges = edges.get(network.getConnectedEdges(node.id)); 
+                    for (j = 0; j < decendentEdges.length; j++) {
+                        if (decendentEdges[j].from == node.id) {
+                            edgesforupdate[count] = decendentEdges[j];
+
+                            edgesforupdate[count].hidden = false;
+                            count++;
+                        }
+                    }
+                }
+
+                nodes.update(allNode);
+                edges.update(edgesforupdate);
+
+                allNode = nodes.get();
+                nodes.update(allNode);
+
+                
+
+            });
+
+            //===========================================================
+            $('#disableAllChild').on('click', function() {
+                console.log("disableAllChind: ", allChildNode);
+                var node = nodes.get(nodeSelected);
+                node.hidden = true;
+                console.log("node.id = ", node.id, "hidden = ", node.hidden);
+                nodes.update(node);
+
+                var connectedEdgeArray = edges.get(network.getConnectedEdges(node.id));
+                for (j = 0; j < connectedEdgeArray.length; j++) {
+                    var edge = connectedEdgeArray[j];
+                    if (edge.from == node.id) {
+                        edge.hidden = true;
+                    }
+
+                }
+                edges.update(connectedEdgeArray);
+
+                var edgesforupdate = [];
+                var count=0;
+
+                var allNode = nodes.get(allChildNode);
+                for (i = 0; i < allNode.length; i++) {
+                    var node = allNode[i];
+                    node.hidden = true;
+                }
+                nodes.update(allNode);
+
+                for (i = 0; i < allNode.length; i++) {
+                    var node = allNode[i];
+
+                    var pNodes = nodes.get(network.getConnectedNodes(node.id, 'from'));
+                    for (j = 0; j < pNodes.length; j++) {
+                        var pnode = pNodes[j];
+
+                        if (pnode.hidden != true) {
+                            node.hidden = false;
+                            nodes.update(node);
+                            break;
+                        }
+                    }
+                    var decendentEdges = edges.get(network.getConnectedEdges(node.id)); 
+                    for (j = 0; j < decendentEdges.length; j++) {
+                        if (decendentEdges[j].from == node.id) {
+                            edgesforupdate[count] = decendentEdges[j];
+
+                            edgesforupdate[count].hidden = true;
+                            count++;
+                        }
+                    }
+                }
+                nodes.update(allNode);
+                edges.update(edgesforupdate);
+
+                node = nodes.get(nodeSelected);
+                node.hidden = false;
+                console.log("node.id = ", node.id, "hidden = ", node.hidden);
+                nodes.update(node);
+
+                allNode = nodes.get();
+                nodes.update(allNode);
+            });
+
+            //===========================================================
+            var shapeArr = [
+                'box',
+                'ellipse',
+                'ellipse',
+                'ellipse',
+                'box',
+                'ellipse'
+            ];
+
+            var styleArr = {
+                1: {
+                    background: 'LightSlateGray',
+                    border: 'SlateGray',
+                    shape: 'box'
+                },
+                2: {
+                    background: 'Khaki',
+                    border: 'DarkKhaki',
+                    shape: 'ellipse'
+                },
+                3: {
+                    background: 'Orchid',
+                    border: 'DarkOrchid',
+                    shape: 'ellipse'
+                },
+                4: {
+                    background: 'Orange',
+                    border: 'DarkOrange',
+                    shape: 'ellipse'
+                },
+                5: {
+                    background: 'YellowGreen',
+                    border: 'OliveDrab',
+                    shape: 'box'
+                },
+                6: {
+                    background: 'LightGray',
+                    border: 'Gray',
+                    shape: 'ellipse'
+                },
+                7: {
+                    background: 'LightBlue',
+                    border: 'Gray',
+                    shape: 'ellipse'
+                }
+            }
+
+            var transparentNode = {
+                background: 'white',
+                border: 'LightGray'
+            }
+
+            var redNode = {
+                background: 'Red',
+                border: 'DarkRed'
+            }
+
+            var transparentEdge = {
+                color: '#00000000',
+                font: 0
+            }
+
+            var nbClass = shapeArr.length;
+
+            //===========================================================
+            var node;
+            var nodes;
+            var edges;
+            var network;
+
+
+            //==================================================
+            var allParentsNode = [];
+            var allChildNode = [];
+
+            var allParentsEdge = [];
+            var allChildEdge = [];
+
+            //===========================================================
+            function handleFileSelect(file) {
+
+                if (!window.File || !window.FileReader || !window.FileList || !window.Blob) {
+                    alert('The File APIs are not fully supported in this browser.');
+                    return;
+                }
+
+
+                var reader = new FileReader();
+                var json;
+
+                reader.onload = (function(file) {
+                    return function(e) {
+                        //console.log('e readAsText = ', e);
+                        //console.log('e readAsText target = ', e.target);
+                        try {
+                            //==================================================
+                            json = JSON.parse(e.target.result);
+                            //alert('json global var has been set to parsed json of this file here it is unevaled = \n' + JSON.stringify(json));
+
+                            //==================================================
+                            json.nodes.forEach(function(node, index) {
+                                var classVal = node.class;
+                                var typeVal = node.type;
+                                var entryVal = node.entry;
+                                var attrVal = node.attributes;
+                                var inputsVal = node.inputs;
+                                var labelVal = node.label;
+                                var cidVal = node.cid;
+                                var distVal = node.distance;
+                                var nbinVal = node.nbin;
+                                var nboutVal = node.nbout;
+
+                                node.color = {
+                                    background: styleArr[classVal].background,
+                                    border: styleArr[classVal].border,
+                                    hover: styleArr[classVal].background,
+                                    highlight: {
+                                        background: styleArr[classVal].background,
+                                        border: 'blue'
+                                    }
+                                }
+
+                                node.shape = styleArr[classVal].shape;
+
+                                if (node.class == 1 || node.class >= 6)
+                                    node.title = "node id = " + node.id + "</br>" + labelVal + "</br>field attributes : </br>" + attrVal + "</br>filter entry nb = " + entryVal + "</br>cid = " + cidVal + "</br>distance = " + distVal;
+                                else if (node.class == 5)
+                                    node.title = "node id = " + node.id + "</br>" + labelVal + "</br>filter type = " + typeVal + "</br> entry nb = " + entryVal + "</br> inputs_complete = " + inputsVal + "</br>cid = " + cidVal + "</br>distance = " + distVal;
+                                else
+                                    node.title = "node id = " + node.id + "</br>" + labelVal + "</br>filter entry nb = " + entryVal + "</br>cid = " + cidVal + "</br>distance = " + distVal;
+
+                                if (node.filled == 1) {
+                                    node.title += "</br></br> filter has no child!!!</br>" + "</br>field attributes : </br>" + attrVal + "</br> entry nb = " + entryVal;
+                                    node.color = {
+                                        background: 'Red',
+                                        border: 'DarkRed',
+                                        hover: 'Red',
+                                        highlight: {
+                                            background: 'Red',
+                                            border: 'blue'
+                                        }
+                                    }
+                                }
+
+                                node.level = distVal;
+
+                                if (node.class >= 6 || node.filled == 1) node.hidden = true;
+                                else node.hidden = true;
+
+                            });
+
+                            //==================================================
+                            json.edges.forEach(function(node, index) {
+                                var dateVal = node.date;
+                                var fidVal = node.fid;
+                                var fnameVal = node.fname;
+                                var gidVal = node.gid;
+                                var attVal = node.attributes;
+                                var idVal = node.id
+
+                                node.title = "id = " + idVal + "</br>field attributes : </br>" + attVal + "</br> date = " + dateVal;
+
+                            });
+
+                            //==================================================
+                            nodes = new vis.DataSet();
+                            nodes.add(json.nodes);
+
+                            edges = new vis.DataSet();
+                            edges.add(json.edges);
+
+                            //==================================================
+                            var data = {
+                                nodes: nodes,
+                                edges: edges
+                            };
+
+                            //==================================================
+                            var options = {
+                                edges: {
+                                    smooth: false,
+                                    arrows: 'to',
+                                    font: {
+                                        align: 'middle',
+                                        size: 14,
+                                    },
+                                    color: {
+                                        color: 'black',
+                                        highlight: 'black',
+                                        hover: 'black',
+                                    }
+                                },
+                                physics: {
+                                    enabled: false
+                                },
+                                nodes: {
+                                    borderWidth: 2
+                                },
+                                interaction: {
+                                    hover: true
+                                },
+                                layout: {
+                                    hierarchical: {
+                                        enabled: true,
+                                        direction: "LR",
+                                        sortMethod: "directed",
+                                        levelSeparation: 300,
+                                        nodeSpacing: 80,
+                                        treeSpacing: 100,
+                                        blockShifting: true,
+                                        edgeMinimization: true
+                                    }
+                                },
+
+
+                            };
+
+                            //==================================================
+                            network = new vis.Network(container, data, options);
+                            //network1 = new vis.Network(container1, data, options);
+                            
+
+
+
+                            //==================================================
+                            Array.prototype.unique = function() {
+                                var a = this.concat();
+                                for (var i = 0; i < a.length; ++i) {
+                                    for (var j = i + 1; j < a.length; ++j) {
+                                        if (a[i] === a[j])
+                                            a.splice(j--, 1);
+                                    }
+                                }
+                                return a;
+                            };
+
+                            //==================================================
+                            function findAllParents(nodesArray) {
+                                if (nodesArray.length == 0) {
+                                    return 1;
+                                }
+                                var parentsArray = network.getConnectedNodes(nodesArray[0], 'from');
+                                //console.log('node ', nodesArray[0], 'has ', parentsArray);
+                                nodesArray = nodesArray.concat(parentsArray).unique();
+                                //console.log('---> ', nodesArray);
+                                allParentsNode = allParentsNode.concat(nodesArray[0]).unique();
+
+
+                                nodesArray.splice(0, 1);
+                                return findAllParents(nodesArray);
+                            }
+
+                            //==================================================
+                            function findAllChild(nodesArray) {
+                                if (nodesArray.length == 0) {
+                                    return 1;
+                                }
+                                var childArray = network.getConnectedNodes(nodesArray[0], 'to');
+                                //console.log('node ', nodesArray[0], 'has ', childArray);
+                                nodesArray = nodesArray.concat(childArray).unique();
+                                //console.log('---> ', nodesArray);
+                                allChildNode = allChildNode.concat(nodesArray[0]).unique();
+                                nodesArray.splice(0, 1);
+                                return findAllChild(nodesArray);
+                            }
+
+                            //==================================================
+                            function getEdgeConnections(node) {
+                                var connectedEdgeArray = network.getConnectedEdges(node);
+                            }
+
+                            //==================================================
+                            network.on("click", function(params) {
+                                params.event = "[original event]";
+                                console.log('__________________________');
+                                nodeSelected = this.getNodeAt(params.pointer.DOM);
+                                if (nodeSelected === undefined) return 0;
+
+                                var node = nodes.get(nodeSelected);
+
+                                var connectedChild = nodes.get(network.getConnectedNodes(node.id, "to"));
+                                console.log('------->', connectedChild.length);
+                                if (connectedChild.length == 0) {
+                                    $('#enableAllChild').attr("disabled", true);
+                                } else {
+                                    $('#enableAllChild').attr("disabled", false);
+                                }
+
+                                var connectedEdgeArray = getEdgeConnections(nodeSelected);
+
+                                //--------------------------
+                                var parentsArray = network.getConnectedNodes(nodeSelected, 'from');
+
+
+                                allParentsNode = [nodeSelected];
+                                findAllParents(parentsArray);
+                                // remove selected node
+                                var index = allParentsNode.indexOf(nodeSelected);
+                                if (index !== -1) allParentsNode.splice(index, 1);
+                                console.log('Final parents: ', allParentsNode);
+
+
+                                //--------------------------
+                                var node = this.getNodeAt(params.pointer.DOM);
+                                var childArray = network.getConnectedNodes(nodeSelected, 'to');
+
+
+                                allChildNode = [nodeSelected];
+                                findAllChild(childArray);
+                                // remove selected node
+                                var index = allChildNode.indexOf(nodeSelected);
+                                if (index !== -1) allChildNode.splice(index, 1);
+                                console.log('Final child: ', allChildNode);
+
+
+                                //--------------------------
+                            });
+
+                        } catch (ex) {
+                            alert('ex when trying to parse json = ' + ex);
+                        }
+                    }
+                })(file);
+
+                reader.readAsText(file);
+
+            }
+
+            //######################################################################################################
+        });
+    </script>
+
+    <div class="container">
+
+        <div class="row">
+            <label class="btn btn-primary" for="file">
+                <input type="file" id="file" style="display:none" onchange="$('#upload-file-info').html(this.files[0].name)">
+                Load a JSON XIOS file
+            </label>
+            <button type="button" class="btn btn-default disabled" id="upload-file-info">...</button>
+        </div>
+
+        <div class="row">
+
+            <div class="btn-group">
+                <button type="button" class="btn btn-success" id="showNode">Show node</button>
+                <button type="button" class="btn btn-success" id="hideNode">Hide node</button>
+            </div>
+
+            <div class="btn-group">
+                <button type="button" class="btn btn-success" id="enableAll">Enable all</button>
+                <button type="button" class="btn btn-success" id="disableAll">Disable all</button>
+            </div>
+
+            <div class="btn-group">
+                <button type="button" class="btn btn-success" id="enableParents">Enable parents</button>
+                <button type="button" class="btn btn-success" id="enableChild">Enable children</button>
+            </div>
+
+            <div class="btn-group">
+                <button type="button" class="btn btn-success" id="enableAllParents">Enable all parents</button>
+                <button type="button" class="btn btn-success" id="disableAllParents">Disable all parents</button>
+            </div>
+
+            <div class="btn-group">
+                <button type="button" class="btn btn-success" id="enableAllChild">Enable all children</button>
+                <button type="button" class="btn btn-success" id="disableAllChild">Disable all children</button>
+            </div>
+
+            <button type="button" class="btn btn-success" id="enableInput">Enable input</button>
+            <button type="button" class="btn btn-success" id="enableOutput">Enable output</button>
+
+            <button type="button" class="btn btn-success" id="lastTemporal">Enable last temporal input</button>
+            <button type="button" class="btn btn-success" id="showGraph">Show subgraph (and hide other)</button>            
+
+
+        </div>
+
+        <div class="row">
+            <div id="mynetwork"></div>
+            <div id="mynetwork1"></div>
+        </div>
+
+</body>
+
+</html>
Index: /XIOS/dev/dev_trunk_omp/xios_test_suite/HTML/xios-style.css
===================================================================
--- /XIOS/dev/dev_trunk_omp/xios_test_suite/HTML/xios-style.css	(revision 1844)
+++ /XIOS/dev/dev_trunk_omp/xios_test_suite/HTML/xios-style.css	(revision 1844)
@@ -0,0 +1,199 @@
+body
+{
+    font-family: Helvetica, sans-serif;
+}
+
+nav
+{
+    width:300px;
+    vertical-align: top;
+}
+
+section
+{
+    clear: both;
+    margin-top:50px;
+    vertical-align: top;
+}
+
+a
+{
+    display:block;
+}
+
+caption
+{
+    font-size: 1.4em;
+    font-weight: bold;
+    caption-side: top;
+    margin-bottom: 20px;
+    text-align: left;
+}
+
+
+footer
+{
+    background-color: rgb(189, 184, 184);
+    border-width: medium;
+    border-style: dashed;
+    border-radius: 10px;
+    position: fixed;
+    bottom: 10px;
+    right: 10px;
+}
+
+
+h1, h2
+{
+    text-align: left;
+}
+
+.dropbtn {
+    background-color:transparent;
+    border: none; 
+}
+
+.dropdown {
+    position: relative;
+    display: inline-block;
+}
+  
+.dropdown-content {
+    display: none;
+    position: absolute;
+    background-color: white;
+    min-width: 320px;
+    box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
+    z-index: 1;
+    font-size: 1em;
+}
+  
+.dropdown-content a {
+    color: black;
+    padding: 5px 5px;
+    text-decoration: none;
+    display: block;
+}
+  
+.dropdown-content a:hover 
+{
+    background-color: #2e86c1;
+}
+    
+.dropdown:hover .dropbtn 
+{
+    background-color:#2e86c1;
+}
+
+.showit 
+{
+    display: block;
+}
+
+.compile_table
+{
+    margin-left: 60px;
+    margin-bottom: 30px;
+    margin-top: 30px;
+    /* border-collapse: collapse; */
+    /* border: solid 1px black; */
+}
+
+.compile_table td
+{
+    margin-left: 20px;
+    margin-bottom: 10px;
+    border: solid 2px white;
+    min-width: 150px;
+    text-align: center;
+}
+
+.compile_sub_table td
+{
+    border: solid 1px white;
+}
+
+.compile_sub_table
+{
+    border-collapse: collapse;
+    margin-top: 10px;
+    margin-bottom: 10px;
+    margin-left: 10px;
+    margin-right: 10px;
+
+}
+
+.test_table
+{
+    margin-left: 60px;
+    margin-bottom: 30px;
+    margin-top: 30px;
+    /* border-collapse: collapse; */
+}
+
+.test_table td
+{
+    margin-left: 20px;
+    margin-bottom: 10px;
+    border: solid 2px white;
+    text-align: center;
+}
+
+
+.test_sub_table
+{
+    border-collapse: collapse;
+    margin-bottom: 10px;
+    margin-top: 10px;
+    margin-left: 10px;
+    margin-right: 10px;
+}
+
+.test_sub_table td
+{
+    border: solid 1px white;
+    text-align: left;
+}
+
+.test_sub_table .build_level
+{
+    background-color: #96cdff;
+}
+
+
+.test_sub_table .algo_level
+{
+    background-color: #a1d3ff;
+}
+
+.test_sub_table .config_level
+{
+    background-color: #b3dafd;
+}
+
+.test_sub_table .file_level
+{
+    background-color: #c2e1fd;
+}
+
+
+  
+.compile_table_row.hide
+{
+    display: none;
+}
+
+.compile_table_row.show
+{
+    display: "table-row";
+}
+
+.test_table_row.hide
+{
+    display: none;
+}
+
+.test_table_row.show
+{
+    display: "table-row";
+}
Index: /XIOS/dev/dev_trunk_omp/xios_test_suite/HTML/xios_report.html
===================================================================
--- /XIOS/dev/dev_trunk_omp/xios_test_suite/HTML/xios_report.html	(revision 1844)
+++ /XIOS/dev/dev_trunk_omp/xios_test_suite/HTML/xios_report.html	(revision 1844)
@@ -0,0 +1,358 @@
+<!DOCTYPE html>
+<html>
+    <head>
+        <metacharset="utf-8"/>
+        <link rel="stylesheet" href="xios-style.css"/>
+        <title>XIOS Unit Tests Report - Le Site Web</title>
+        
+        <script src="generate_compile_table.js" type="text/javascript"></script>
+        <script src="generate_test_table.js" type="text/javascript"></script>
+
+        <script src="compile_irene_info.js" type="text/javascript"></script>
+        <script src="test_irene_info.js" type="text/javascript"></script>
+
+        <script src="https://forge.ipsl.jussieu.fr/ioserver/chrome/site/XIOS_TEST_SUITE/compile_jeanzay_info.js" type="text/javascript"></script>
+        <script src="https://forge.ipsl.jussieu.fr/ioserver/chrome/site/XIOS_TEST_SUITE/test_jeanzay_info.js" type="text/javascript"></script>
+
+    </head>
+
+    <body onload="generateCompileTable(); generateTestTable(); ">
+        
+        <header>
+            <h1>XIOS Unit Tests Report Web Page</h1>
+            <!-- <h2>(still under construction ... ...)</h2> -->
+        </header>
+
+        <nav>
+            <div>
+                <!-- <p id="xiosinfo">Some useful links:</p> -->
+                <ul>
+                    <li><a href="https://forge.ipsl.jussieu.fr/ioserver/wiki" target="_blank">XIOS wiki page</a></li>
+                    <li><a href="graph.html" target="_blank">Workflow Graph Visualizer</a></li>
+                </ul> 
+            </div>        
+        </nav> 
+
+    
+
+        <section>
+
+            <!-- <h2>Results of unit tests</h2> -->
+
+            <form method="post" style="margin-left: 25px;">
+
+                <p><label for="Build revision">Choose a revision number to show compile and test results : </label>
+                    <select name="revision" id="revision">
+                        <option value="0" selected>All available revisions ...</option>
+                    </select>
+                </p>
+
+            </form>
+
+
+            <ul><li>&#10060; : compile failed / test failed</li><li>&#10062; : test result initialized</li><li>&#9989; : compile passed / test passed</li></ul>
+
+        </section>
+
+        <section>
+
+
+            <div>
+                <table id="compile_table" style="margin: 50px;">
+                    <caption>Table of XIOS Compile status</caption>
+                    <tr style="font-weight: bold;" id="compile_table_row0"></tr>
+                </table>
+            </div>    
+
+
+            <div style="margin-top: 100px;">
+                <table id="test_table" style="margin: 50px;">
+                    <caption>Table of XIOS unit tests results</caption>
+                    <tr style="font-weight: bold;" id="test_table_row0"></tr>
+                </table>
+            </div>
+
+
+        </section>
+
+
+        <footer>
+            <p>Copyright XIOS - Tous droits rÃ©servÃ©s
+                <a href="mailto:xios-dev@forge.ipsl.jussieu.fr">Nous contacter !</a>
+            </p>
+        </footer>
+    </body>
+</html>
+ 
+<script>
+
+    var params = "scrollbars=yes,resizable=no,status=no,location=no,toolbar=no,menubar=no,width=600,height=300,left=100,top=100";
+
+    function show_text(the_text) 
+    {
+        window.open("about:blank", "", params).document.write(the_text);  
+    }
+
+    function show_user_params(machine, revision, build_dir, algo)
+    {
+        var user_params = eval("test_"+machine+"_"+revision+"_"+algo+"_user_params")
+        var myText = "<p style=\"color:blue;font-weight:bold;\">user_params.def for "+algo+"</p><p>"
+        for (var i=0; i<user_params.length; i++)
+        {
+            myText += user_params[i]+"</br>"
+        }
+        myText+="</p>"
+        window.open("about:blank", "", params).document.write(myText);
+    }
+
+    function show_all_params(machine, revision, build_dir, algo, config)
+    {
+        var config_name = config.replace(/=/g,"_")
+        var all_params = eval("test_"+machine+"_"+revision+"_"+algo+"_"+config_name+"_all_params")
+        var myText = "<p style=\"color:blue;font-weight:bold;\">all_param.def for "+algo+"/"+config+"</p><p>"
+        for (var i=0; i<all_params.length; i++)
+        {
+            myText += all_params[i]+"</br>"
+        }
+        myText+="</p>"
+        window.open("about:blank", "", params).document.write(myText); 
+    }
+
+
+    function show_plain_report(machine, revision, build_dir)
+    {
+        var info_list = eval("test_"+machine+"_"+revision+"_"+build_dir.replace("build_",""))
+        var myText = "<p style=\"color:blue;\">Revision = "+revision+"</br>Machine = "+machine+"<br>Build_dir ="+build_dir+"</p>"
+        for (var i=0; i<info_list.length; i++)
+        {
+            myText+="<P>"
+            for (var j=0; j<4; j++)
+            {
+                myText+=info_list[i][j]+" "
+            }
+            myText+="</p>"
+        }
+        window.open("about:blank", "", params).document.write(myText);
+    }
+    
+    function show_dropdown(dropdown_id)
+    {
+        var cell = document.getElementById(dropdown_id);
+        if (cell)
+        {
+            cell.classList.add("showit")
+        }
+    }
+
+    function hide_dropdown(dropdown_id)
+    {
+        var cell = document.getElementById(dropdown_id);
+        if (cell)
+        {
+            cell.classList.remove("showit")
+        }
+    }
+    
+    
+</script>
+
+
+<script>
+
+    document.getElementById("revision").addEventListener("change", myFunction);
+    
+    function myFunction() 
+    {
+        if(this.value == 0)
+        {
+            // compile part ...
+
+            var ans = document.getElementsByClassName('compile_table_row')
+            for (var i = 0; i < ans.length; i++)
+            {
+                cell = ans[i]
+                cell.classList.remove('hide')
+                cell.classList.add('show')
+            }
+            document.getElementById("empty_compile_row").style.display="none"
+
+            // test part ...
+
+            var ans = document.getElementsByClassName('test_table_row')
+            for (var i = 0; i < ans.length; i++)
+            {
+                cell = ans[i]
+                cell.classList.remove('hide')
+                cell.classList.add('show')
+            }
+            document.getElementById("empty_test_row").style.display="none"
+        }
+        
+        else
+        {
+            // compile part ...
+
+            var ans = document.getElementsByClassName('compile_table_row')
+            for (var i = 0; i < ans.length; i++)
+            {
+                cell = ans[i]
+                cell.classList.remove('show')
+                cell.classList.add('hide')
+            }
+            document.getElementById("empty_compile_row").style.display="none"
+
+            var ans = document.getElementById('compile_table_'+this.value)
+            if(ans)
+            {
+                ans.classList.remove('hide')
+                ans.classList.add('show')
+            } 
+            else
+            {
+                document.getElementById("empty_compile_row_revision").innerHTML=this.value
+                document.getElementById("empty_compile_row").style.display="table-row"
+            } 
+
+            
+            // test part ...
+            
+            var ans = document.getElementsByClassName('test_table_row')
+            for (var i = 0; i < ans.length; i++)
+            {
+                cell = ans[i]
+                cell.classList.remove('show')
+                cell.classList.add('hide')
+            }
+            document.getElementById("empty_test_row").style.display="none"
+            
+            var ans = document.getElementById('test_table_'+this.value)
+            if(ans)
+            {
+                ans.classList.remove('hide')
+                ans.classList.add('show')
+            } 
+            else
+            {
+                document.getElementById("empty_test_row_revision").innerHTML=this.value
+                document.getElementById("empty_test_row").style.display="table-row"
+            } 
+        }
+    }
+</script>
+
+
+<script>
+
+    function level0_toggle(machine, my_revision) {
+        var level1_ans = document.getElementsByClassName('table_'+machine+'_'+my_revision+"_build_level")
+        for (var i = 0; i < level1_ans.length; i++) 
+        {
+            var cell = level1_ans[i]
+            if (cell.style.display != 'table-row')
+            {
+                cell.style.display = 'table-row'
+            }
+            else
+            {
+                cell.style.display = 'none'
+            }
+
+            buildType = cell.getAttribute("data-build-type");
+            var level2_ans = document.getElementsByClassName(buildType+"_algo_level")
+            for (var j = 0; j < level2_ans.length; j++)
+            {
+                var cell = level2_ans[j]
+                cell.style.display = 'none'
+                algoType = cell.getAttribute("data-algo-type");
+                var level3_ans =  document.getElementsByClassName(algoType+"_config_level")
+                for (var k = 0; k < level3_ans.length; k++)
+                {
+                    var cell = level3_ans[k]
+                    cell.style.display = 'none'
+                    configType = cell.getAttribute("data-config-type")
+                    var level4_ans = document.getElementsByClassName(configType+"_file_level")
+                    for (var h = 0; h<level4_ans.length; h++) 
+                    {
+                        level4_ans[h].style.display = "none"
+                    }
+                }
+            }    
+        }
+    }
+
+
+
+    function level1_toggle(machine, my_revision, build_dir) {
+        var level2_ans = document.getElementsByClassName('table_'+machine+'_'+my_revision+"_"+build_dir+"_algo_level")
+        for (var i = 0; i < level2_ans.length; i++) 
+        {
+            var cell = level2_ans[i]
+            if (cell.style.display != 'table-row')
+            {
+                cell.style.display = 'table-row'
+            }
+            else
+            {
+                cell.style.display = 'none'
+            }
+            algoType = cell.getAttribute("data-algo-type")
+            var level3_ans = document.getElementsByClassName(algoType+"_config_level")
+            for (var j = 0; j < level3_ans.length; j++)
+            {
+                var cell = level3_ans[j]
+                cell.style.display = 'none'
+                configType = cell.getAttribute("data-config-type")
+                var level4_ans = document.getElementsByClassName(configType+"_file_level")
+                for (var k = 0; k<level4_ans.length; k++) 
+                {
+                    level4_ans[k].style.display = "none"
+                }
+            }
+        }
+    }
+
+
+
+    function level2_toggle(machine, my_revision, build_dir, algo_name) {
+        var level3_ans = document.getElementsByClassName('table_'+machine+'_'+my_revision+"_"+build_dir+"_"+algo_name+"_config_level")
+        for (var i = 0; i < level3_ans.length; i++) 
+        {
+            var cell = level3_ans[i]
+            if (cell.style.display != 'table-row')
+            {
+                cell.style.display = 'table-row'   
+            }
+            else
+            {
+                cell.style.display = 'none'
+            }
+            configType = cell.getAttribute("data-config-type")
+            var level4_ans = document.getElementsByClassName(configType+"_file_level")
+            for (var j = 0; j<level4_ans.length; j++) 
+            {
+                level4_ans[j].style.display = "none"
+            }
+        }
+    }
+
+
+    function level3_toggle(machine, my_revision, build_dir, algo_name, config_name) {
+        var level4_ans = document.getElementsByClassName('table_'+machine+'_'+my_revision+"_"+build_dir+"_"+algo_name+"_"+config_name+"_file_level")
+        for (var i = 0; i < level4_ans.length; i++) 
+        {
+            var cell = level4_ans[i]
+            if (cell.style.display != 'table-row')
+            {
+                cell.style.display = 'table-row'
+            }
+            else
+            {
+                cell.style.display = 'none'
+            }
+        }
+    }
+
+    
+
+</script>
+
Index: /XIOS/dev/dev_trunk_omp/xios_test_suite/HTML/xios_report_local.html
===================================================================
--- /XIOS/dev/dev_trunk_omp/xios_test_suite/HTML/xios_report_local.html	(revision 1844)
+++ /XIOS/dev/dev_trunk_omp/xios_test_suite/HTML/xios_report_local.html	(revision 1844)
@@ -0,0 +1,358 @@
+<!DOCTYPE html>
+<html>
+    <head>
+        <metacharset="utf-8"/>
+        <link rel="stylesheet" href="xios-style.css"/>
+        <title>XIOS Unit Tests Report - Le Site Web</title>
+        
+        <script src="generate_compile_table.js" type="text/javascript"></script>
+        <script src="generate_test_table.js" type="text/javascript"></script>
+
+        <script src="../COMPILE/compile_irene_info.js" type="text/javascript"></script>
+        <script src="../RUN_TEST_SUITE/_test_irene_info.js" type="text/javascript"></script>
+
+        <script src="../COMPILE/compile_jeanzay_info.js" type="text/javascript"></script>
+        <script src="../RUN_TEST_SUITE/_test_jeanzay_info.js" type="text/javascript"></script>
+
+    </head>
+
+    <body onload="generateCompileTable(); generateTestTable(); ">
+        
+        <header>
+            <h1>XIOS Unit Tests Report Web Page (local data)</h1>
+            <!-- <h2>(still under construction ... ...)</h2> -->
+        </header>
+
+        <nav>
+            <div>
+                <!-- <p id="xiosinfo">Some useful links:</p> -->
+                <ul>
+                    <li><a href="https://forge.ipsl.jussieu.fr/ioserver/wiki" target="_blank">XIOS wiki page</a></li>
+                    <li><a href="graph.html" target="_blank">Workflow Graph Visualizer</a></li>
+                </ul> 
+            </div>        
+        </nav> 
+
+    
+
+        <section>
+
+            <!-- <h2>Results of unit tests</h2> -->
+
+            <form method="post" style="margin-left: 25px;">
+
+                <p><label for="Build revision">Choose a revision number to show compile and test results : </label>
+                    <select name="revision" id="revision">
+                        <option value="0" selected>All available revisions ...</option>
+                    </select>
+                </p>
+
+            </form>
+
+
+            <ul><li>&#10060; : compile failed / test failed</li><li>&#10062; : test result initialized</li><li>&#9989; : compile passed / test passed</li></ul>
+
+        </section>
+
+        <section>
+
+
+            <div>
+                <table id="compile_table" style="margin: 50px;">
+                    <caption>Table of XIOS Compile status</caption>
+                    <tr style="font-weight: bold;" id="compile_table_row0"></tr>
+                </table>
+            </div>    
+
+
+            <div style="margin-top: 100px;">
+                <table id="test_table" style="margin: 50px;">
+                    <caption>Table of XIOS unit tests results</caption>
+                    <tr style="font-weight: bold;" id="test_table_row0"></tr>
+                </table>
+            </div>
+
+
+        </section>
+
+
+        <footer>
+            <p>Copyright XIOS - Tous droits rÃ©servÃ©s
+                <a href="mailto:xios-dev@forge.ipsl.jussieu.fr">Nous contacter !</a>
+            </p>
+        </footer>
+    </body>
+</html>
+ 
+<script>
+
+    var params = "scrollbars=yes,resizable=no,status=no,location=no,toolbar=no,menubar=no,width=600,height=300,left=100,top=100";
+
+    function show_text(the_text) 
+    {
+        window.open("about:blank", "", params).document.write(the_text);  
+    }
+
+    function show_user_params(machine, revision, build_dir, algo)
+    {
+        var user_params = eval("test_"+machine+"_"+revision+"_"+algo+"_user_params")
+        var myText = "<p style=\"color:blue;font-weight:bold;\">user_params.def for "+algo+"</p><p>"
+        for (var i=0; i<user_params.length; i++)
+        {
+            myText += user_params[i]+"</br>"
+        }
+        myText+="</p>"
+        window.open("about:blank", "", params).document.write(myText);
+    }
+
+    function show_all_params(machine, revision, build_dir, algo, config)
+    {
+        var config_name = config.replace(/=/g,"_")
+        var all_params = eval("test_"+machine+"_"+revision+"_"+algo+"_"+config_name+"_all_params")
+        var myText = "<p style=\"color:blue;font-weight:bold;\">all_param.def for "+algo+"/"+config+"</p><p>"
+        for (var i=0; i<all_params.length; i++)
+        {
+            myText += all_params[i]+"</br>"
+        }
+        myText+="</p>"
+        window.open("about:blank", "", params).document.write(myText); 
+    }
+
+
+    function show_plain_report(machine, revision, build_dir)
+    {
+        var info_list = eval("test_"+machine+"_"+revision+"_"+build_dir.replace("build_",""))
+        var myText = "<p style=\"color:blue;\">Revision = "+revision+"</br>Machine = "+machine+"<br>Build_dir ="+build_dir+"</p>"
+        for (var i=0; i<info_list.length; i++)
+        {
+            myText+="<P>"
+            for (var j=0; j<4; j++)
+            {
+                myText+=info_list[i][j]+" "
+            }
+            myText+="</p>"
+        }
+        window.open("about:blank", "", params).document.write(myText);
+    }
+    
+    function show_dropdown(dropdown_id)
+    {
+        var cell = document.getElementById(dropdown_id);
+        if (cell)
+        {
+            cell.classList.add("showit")
+        }
+    }
+
+    function hide_dropdown(dropdown_id)
+    {
+        var cell = document.getElementById(dropdown_id);
+        if (cell)
+        {
+            cell.classList.remove("showit")
+        }
+    }
+    
+    
+</script>
+
+
+<script>
+
+    document.getElementById("revision").addEventListener("change", myFunction);
+    
+    function myFunction() 
+    {
+        if(this.value == 0)
+        {
+            // compile part ...
+
+            var ans = document.getElementsByClassName('compile_table_row')
+            for (var i = 0; i < ans.length; i++)
+            {
+                cell = ans[i]
+                cell.classList.remove('hide')
+                cell.classList.add('show')
+            }
+            document.getElementById("empty_compile_row").style.display="none"
+
+            // test part ...
+
+            var ans = document.getElementsByClassName('test_table_row')
+            for (var i = 0; i < ans.length; i++)
+            {
+                cell = ans[i]
+                cell.classList.remove('hide')
+                cell.classList.add('show')
+            }
+            document.getElementById("empty_test_row").style.display="none"
+        }
+        
+        else
+        {
+            // compile part ...
+
+            var ans = document.getElementsByClassName('compile_table_row')
+            for (var i = 0; i < ans.length; i++)
+            {
+                cell = ans[i]
+                cell.classList.remove('show')
+                cell.classList.add('hide')
+            }
+            document.getElementById("empty_compile_row").style.display="none"
+
+            var ans = document.getElementById('compile_table_'+this.value)
+            if(ans)
+            {
+                ans.classList.remove('hide')
+                ans.classList.add('show')
+            } 
+            else
+            {
+                document.getElementById("empty_compile_row_revision").innerHTML=this.value
+                document.getElementById("empty_compile_row").style.display="table-row"
+            } 
+
+            
+            // test part ...
+            
+            var ans = document.getElementsByClassName('test_table_row')
+            for (var i = 0; i < ans.length; i++)
+            {
+                cell = ans[i]
+                cell.classList.remove('show')
+                cell.classList.add('hide')
+            }
+            document.getElementById("empty_test_row").style.display="none"
+            
+            var ans = document.getElementById('test_table_'+this.value)
+            if(ans)
+            {
+                ans.classList.remove('hide')
+                ans.classList.add('show')
+            } 
+            else
+            {
+                document.getElementById("empty_test_row_revision").innerHTML=this.value
+                document.getElementById("empty_test_row").style.display="table-row"
+            } 
+        }
+    }
+</script>
+
+
+<script>
+
+    function level0_toggle(machine, my_revision) {
+        var level1_ans = document.getElementsByClassName('table_'+machine+'_'+my_revision+"_build_level")
+        for (var i = 0; i < level1_ans.length; i++) 
+        {
+            var cell = level1_ans[i]
+            if (cell.style.display != 'table-row')
+            {
+                cell.style.display = 'table-row'
+            }
+            else
+            {
+                cell.style.display = 'none'
+            }
+
+            buildType = cell.getAttribute("data-build-type");
+            var level2_ans = document.getElementsByClassName(buildType+"_algo_level")
+            for (var j = 0; j < level2_ans.length; j++)
+            {
+                var cell = level2_ans[j]
+                cell.style.display = 'none'
+                algoType = cell.getAttribute("data-algo-type");
+                var level3_ans =  document.getElementsByClassName(algoType+"_config_level")
+                for (var k = 0; k < level3_ans.length; k++)
+                {
+                    var cell = level3_ans[k]
+                    cell.style.display = 'none'
+                    configType = cell.getAttribute("data-config-type")
+                    var level4_ans = document.getElementsByClassName(configType+"_file_level")
+                    for (var h = 0; h<level4_ans.length; h++) 
+                    {
+                        level4_ans[h].style.display = "none"
+                    }
+                }
+            }    
+        }
+    }
+
+
+
+    function level1_toggle(machine, my_revision, build_dir) {
+        var level2_ans = document.getElementsByClassName('table_'+machine+'_'+my_revision+"_"+build_dir+"_algo_level")
+        for (var i = 0; i < level2_ans.length; i++) 
+        {
+            var cell = level2_ans[i]
+            if (cell.style.display != 'table-row')
+            {
+                cell.style.display = 'table-row'
+            }
+            else
+            {
+                cell.style.display = 'none'
+            }
+            algoType = cell.getAttribute("data-algo-type")
+            var level3_ans = document.getElementsByClassName(algoType+"_config_level")
+            for (var j = 0; j < level3_ans.length; j++)
+            {
+                var cell = level3_ans[j]
+                cell.style.display = 'none'
+                configType = cell.getAttribute("data-config-type")
+                var level4_ans = document.getElementsByClassName(configType+"_file_level")
+                for (var k = 0; k<level4_ans.length; k++) 
+                {
+                    level4_ans[k].style.display = "none"
+                }
+            }
+        }
+    }
+
+
+
+    function level2_toggle(machine, my_revision, build_dir, algo_name) {
+        var level3_ans = document.getElementsByClassName('table_'+machine+'_'+my_revision+"_"+build_dir+"_"+algo_name+"_config_level")
+        for (var i = 0; i < level3_ans.length; i++) 
+        {
+            var cell = level3_ans[i]
+            if (cell.style.display != 'table-row')
+            {
+                cell.style.display = 'table-row'   
+            }
+            else
+            {
+                cell.style.display = 'none'
+            }
+            configType = cell.getAttribute("data-config-type")
+            var level4_ans = document.getElementsByClassName(configType+"_file_level")
+            for (var j = 0; j<level4_ans.length; j++) 
+            {
+                level4_ans[j].style.display = "none"
+            }
+        }
+    }
+
+
+    function level3_toggle(machine, my_revision, build_dir, algo_name, config_name) {
+        var level4_ans = document.getElementsByClassName('table_'+machine+'_'+my_revision+"_"+build_dir+"_"+algo_name+"_"+config_name+"_file_level")
+        for (var i = 0; i < level4_ans.length; i++) 
+        {
+            var cell = level4_ans[i]
+            if (cell.style.display != 'table-row')
+            {
+                cell.style.display = 'table-row'
+            }
+            else
+            {
+                cell.style.display = 'none'
+            }
+        }
+    }
+
+    
+
+</script>
+
Index: /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/check.py
===================================================================
--- /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/check.py	(revision 1844)
+++ /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/check.py	(revision 1844)
@@ -0,0 +1,164 @@
+import os
+import sys
+import subprocess
+import socket
+import os.path
+from os import path
+
+
+# from default_param import *
+# from user_param import *     
+from param_list import *
+
+# load default_param first, variables defines in user_param will overwrite the default value 
+
+
+
+def OSinfo(runthis):
+	red = lambda text: '\033[0;31m' + text + '\033[0m'
+	osstdout = subprocess.Popen(runthis, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, close_fds=True)
+	theInfo = osstdout.communicate()[0].strip()
+	if osstdout.returncode!=0:
+		print(red(runthis+" FAILED"))
+		print >> sys.stderr, osstdout.returncode
+		sys.exit()
+	# else:
+		# print(runthis+" OK")
+
+
+
+blue = lambda text: '\033[0;34m' + text + '\033[0m'
+yellow = lambda text: '\033[0;33m' + text + '\033[0m'
+green = lambda text: '\033[0;32m' + text + '\033[0m'
+# blue = lambda text: text
+# yellow = lambda text: text
+# green = lambda text: text
+
+def main():
+
+	defaultConfig = True
+	configNamePattern=[]
+	for i in range(len(param_list)):
+		f=open("user_param.py", "r")
+		for line in f:
+			line = line.strip().replace(" ","")
+			if line.startswith(param_list[i]):
+				configNamePattern.append('_'+param_short_list[i]+"="+line.split("=")[1].replace("'",""))
+				defaultConfig = False
+	
+	f.close()
+    
+	configName = "config"
+	
+	for i in range(len(configNamePattern)):
+		configName = configName+configNamePattern[i]
+
+	checkfile = "checkfile.def"
+
+	f=open(checkfile, "r")
+	for line in f:
+		line = line.strip()
+		line = line.rstrip()
+		if line.startswith("all"):
+			allfiles = os.listdir(os.getcwd())
+			g=open("checkfile_new.def", "w")
+			for thisfile in allfiles:
+				if thisfile.endswith(".nc") and thisfile != "dynamico_grid.nc":
+					g.write(thisfile+"\n")
+					checkfile = "checkfile_new.def"
+			g.close()
+			break
+	f.close()
+
+	if not os.path.exists(configName):
+		OSinfo("mkdir -p "+configName)
+
+		print(blue("\n    ****************************************************************"))
+		print(blue("    * Directory " + repr(configName) + " Created "))
+		print(blue("    * Copy results to \'not_validated_reference\' folder"))
+		print(blue("    ****************************************************************\n"))
+
+		OSinfo("mkdir -p "+configName+"/setup")
+		OSinfo("mkdir -p "+configName+"/tmp_reference")
+
+		OSinfo("cp user_param.py user_param.def")
+		OSinfo("cp user_param.py "+configName+"/setup")
+		OSinfo("mv user_param.def "+configName+"/setup")
+
+		OSinfo("cp default_param.json "+configName+"/setup")
+		
+		OSinfo("mv all_param.def "+configName+"/setup")
+		OSinfo("mv iodef.xml "+configName+"/setup/")
+		OSinfo("cp context_atm.xml "+configName+"/setup/")
+		OSinfo("cp context_grid_dynamico.xml "+configName+"/setup/")
+
+
+		f=open(checkfile, "r")
+		reportfile = open("../plain_report.txt", "a+")
+		for line in f:
+			line = line.strip()
+			line = line.rstrip()
+			if not line.startswith("#") and len(line) != 0:
+				OSinfo("cp "+line+" "+configName+"/tmp_reference")
+				reportfile.write(os.path.basename(os.getcwd())+" "+os.path.basename(os.getcwd())[5:]+"@"+configName+" "+os.path.basename(os.getcwd())[5:]+"@"+configName[7:]+"@"+line+" "+repr(0)+" \n")
+				print(yellow("\n        ****************************************"))
+				print(yellow("        ** "+line+" is stored as temporal reference !!! **"))
+				print(yellow("\n        ****************************************"))
+		f.close()
+		reportfile.close()
+
+	else:
+		print(blue("\n    ****************************************************************"))
+		print(blue("    * Directory " + repr(configName) + " already exists "))
+
+		tmp_ref = os.path.isdir(configName+'/tmp_reference')
+		ref = os.path.isdir(configName+'/reference') and not tmp_ref
+		
+		if tmp_ref : 
+			print(blue("    * Start comparing results with NON-validated references"))
+			path = configName+"/tmp_reference"
+		if ref : 
+			print(blue("    * Start comparing results with validated references"))
+			path = configName+"reference"
+		
+		OSinfo('cp '+configName+'/setup/user_param.py '+configName+'/setup/user_param.def ')
+		print(blue("    ****************************************************************\n"))
+
+		f=open(checkfile, "r")
+		reportfile = open("../plain_report.txt", "a+")
+		for line in f:
+			line = line.strip()
+			line = line.rstrip()
+			if not line.startswith("#") and len(line) != 0:
+				OSinfo("cdo -W diffn "+line+" "+path+line+" | > diff.txt")
+				# this command should change according to cdo version
+
+				if os.stat("diff.txt").st_size==0:
+					reportfile.write(os.path.basename(os.getcwd())+" "+os.path.basename(os.getcwd())[5:]+"@"+configName+" "+os.path.basename(os.getcwd())[5:]+"@"+configName[7:]+"@"+line+" "+repr(1)+" \n")
+					print(green("\n        ****************************************"))
+					print(green("        ** "+line+" is valid !!! **"))
+					print(green("\n        ****************************************"))
+				else:
+					g=open("diff.txt", "r")
+					for gline in g:
+						if gline.strip().startswith("0") or ":" in gline:
+							reportfile.write(os.path.basename(os.getcwd())+" "+os.path.basename(os.getcwd())[5:]+"@"+configName+" "+os.path.basename(os.getcwd())[5:]+"@"+configName[7:]+"@"+line+" "+repr(1)+" \n")
+							print(green("\n        ****************************************"))
+							print(green("        ** "+line+" is valid !!! **"))
+							print(green("\n        ****************************************"))
+						else:
+							reportfile.write(os.path.basename(os.getcwd())+" "+os.path.basename(os.getcwd())[5:]+"@"+configName+" "+os.path.basename(os.getcwd())[5:]+"@"+configName[7:]+"@"+line+" "+repr(-1)+" \n")
+							print(green("\n        ****************************************"))
+							print(green("        ** "+line+" is NOT valid. Please debugging.. **"))
+							print(green("\n        ****************************************"))
+					g.close()
+		f.close()
+		reportfile.close()
+
+	if os.path.exists("checkfile_new.def"):
+		OSinfo("rm -f checkfile_new.def")
+
+
+
+if __name__== "__main__":
+  main()
Index: /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/config.py
===================================================================
--- /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/config.py	(revision 1844)
+++ /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/config.py	(revision 1844)
@@ -0,0 +1,51 @@
+import os
+import sys
+
+from default_param import *
+from user_param import *
+from param_list import *
+
+def main():
+	
+	f=open("param.def", "w")
+
+	f.write("&params_run\n")
+	f.write('nb_proc_atm = ' + repr(NumberClients) + '\n')
+	f.write('duration = ' + repr(Duration) + '\n')
+	f.write('/\n\n')
+
+	f.close()
+
+
+	f=open("all_param.def", "w")
+
+	f.write("&params_run\n")
+	for i in range(len(param_list)):
+		f.write(param_list[i]+" = "+repr(eval(param_list[i]))+ "\n")
+	f.write('/\n\n')
+
+	f.close()
+
+
+	nb_proc = NumberClients+NumberServers
+
+	filein = open("../iodef.xml.template", "r")
+	fileout = open("iodef.xml", "w") #this iodef.xml has defined variables, it is not the template
+	for line in filein:
+		if 'xios::nbplSrv2' in line:	line = line.replace("xios::nbplSrv2", repr(NumberPoolsServer2))
+		if 'xios::usingSrv2' in line:	line = line.replace("xios::usingSrv2", UsingServer2)
+		if 'xios::ratioSrv2' in line:	line=line.replace("xios::ratioSrv2", repr(RatioServer2))
+		if 'atm::domain' in line:	line=line.replace("atm::domain", ATMdomain)
+		fileout.write(line)
+		
+
+	filein.close()
+	fileout.close()
+
+
+	print >>sys.stderr, nb_proc
+
+
+
+if __name__== "__main__":
+  main()
Index: /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/context_atm.xml
===================================================================
--- /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/context_atm.xml	(revision 1844)
+++ /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/context_atm.xml	(revision 1844)
@@ -0,0 +1,423 @@
+<!-- -->
+<context id="atm">
+  
+  <calendar type="Gregorian" time_origin="1850-01-01 00:00:00" /> 
+  
+  <domain_definition>
+    <domain id="domain" />
+    <domain id="other_domain" />
+  </domain>
+  
+  <axis_definition>
+    <axis id="axis" />
+    <axis id="domain_X" />
+    <axis id="domain_Y" />
+    <axis id="ensemble" />
+
+    <axis id="other_axis" />
+    <axis id="other_domain_X" />
+    <axis id="other_domain_Y" />
+    <axis id="other_ensemble" />
+  </axis_definition>
+
+  <axis_definition>
+    <axis id="axis_zoom" axis_ref="axis">
+        <zoom_axis begin="0" n="5"/>
+    </axis>
+  </axis_definition>
+
+  <scalar_definition>
+    <scalar id="scalar" /> 
+  </scalar_definition>
+  
+  
+  
+  <grid_definition>
+    
+    <grid id="grid3D">
+      <domain domain_ref="domain" />
+      <axis axis_ref="axis" />
+    </grid>
+    
+    <grid id="grid2D">
+      <domain domain_ref="domain" />
+    </grid>
+
+    <grid id="grid1D">
+      <axis axis_ref="axis" />
+    </grid>
+
+    <grid id="grid_X">
+      <axis axis_ref="domain_X" />
+    </grid>
+
+    <grid id="grid_Y">
+      <axis axis_ref="domain_Y" />
+    </grid>
+
+    <grid id="grid_XY">
+      <axis axis_ref="domain_X" />
+      <axis axis_ref="domain_Y" />
+    </grid>
+
+    <grid id="grid_XYZ">
+      <axis axis_ref="domain_X" />
+      <axis axis_ref="domain_Y" />
+      <axis axis_ref="axis" />
+    </grid>
+
+    <grid id="grid_XZ">
+      <axis axis_ref="domain_X" />
+      <axis axis_ref="axis" />
+    </grid>
+
+    <grid id="grid_YZ">
+      <axis axis_ref="domain_Y" />
+      <axis axis_ref="axis" />
+    </grid>
+
+
+    <grid id="grid3D_W">
+      <domain domain_ref="domain" />
+      <axis axis_ref="axis" />
+      <axis axis_ref="ensemble" />
+    </grid>
+    
+    <grid id="grid2D_W">
+      <domain domain_ref="domain" />
+      <axis axis_ref="ensemble" />
+    </grid>
+
+    <grid id="grid1D_W">
+      <axis axis_ref="axis" />
+      <axis axis_ref="ensemble" />
+    </grid>
+
+    <grid id="grid_XW">
+      <axis axis_ref="domain_X" />
+      <axis axis_ref="ensemble" />
+    </grid>
+
+    <grid id="grid_YW">
+      <axis axis_ref="domain_Y" />
+      <axis axis_ref="ensemble" />
+    </grid>
+
+    <grid id="grid_XYW">
+      <axis axis_ref="domain_X" />
+      <axis axis_ref="domain_Y" />
+      <axis axis_ref="ensemble" />
+    </grid>
+
+    <grid id="grid_XYZW">
+      <axis axis_ref="domain_X" />
+      <axis axis_ref="domain_Y" />
+      <axis axis_ref="axis" />
+      <axis axis_ref="ensemble" />
+    </grid>
+
+    <grid id="grid_XZW">
+      <axis axis_ref="domain_X" />
+      <axis axis_ref="axis" />
+      <axis axis_ref="ensemble" />
+    </grid>
+
+    <grid id="grid_YZW">
+      <axis axis_ref="domain_Y" />
+      <axis axis_ref="axis" />
+      <axis axis_ref="ensemble" />
+    </grid>
+
+ 
+ 
+ 
+ 
+ 
+    <grid id="other_grid3D">
+      <domain domain_ref="other_domain" />
+      <axis axis_ref="other_axis" />
+    </grid>
+    
+    <grid id="other_grid2D">
+      <domain domain_ref="other_domain" />
+    </grid>
+
+    <grid id="other_grid1D">
+      <axis axis_ref="other_axis" />
+    </grid>
+
+    <grid id="other_grid_X">
+      <axis axis_ref="other_domain_X" />
+    </grid>
+
+    <grid id="other_grid_Y">
+      <axis axis_ref="other_domain_Y" />
+    </grid>
+
+    <grid id="other_grid_XY">
+      <axis axis_ref="other_domain_X" />
+      <axis axis_ref="other_domain_Y" />
+    </grid>
+
+    <grid id="other_grid_XYZ">
+      <axis axis_ref="other_domain_X" />
+      <axis axis_ref="other_domain_Y" />
+      <axis axis_ref="other_axis" />
+    </grid>
+
+    <grid id="other_grid_XZ">
+      <axis axis_ref="other_domain_X" />
+      <axis axis_ref="other_axis" />
+    </grid>
+
+    <grid id="other_grid_YZ">
+      <axis axis_ref="other_domain_Y" />
+      <axis axis_ref="other_axis" />
+    </grid>
+
+
+    <grid id="other_grid3D_W">
+      <domain domain_ref="other_domain" />
+      <axis axis_ref="other_axis" />
+      <axis axis_ref="other_ensemble" />
+    </grid>
+    
+    <grid id="other_grid2D_W">
+      <domain domain_ref="other_domain" />
+      <axis axis_ref="other_ensemble" />
+    </grid>
+
+    <grid id="other_grid1D_W">
+      <axis axis_ref="other_axis" />
+      <axis axis_ref="other_ensemble" />
+    </grid>
+
+    <grid id="other_grid_XW">
+      <axis axis_ref="other_domain_X" />
+      <axis axis_ref="other_ensemble" />
+    </grid>
+
+    <grid id="other_grid_YW">
+      <axis axis_ref="other_domain_Y" />
+      <axis axis_ref="other_ensemble" />
+    </grid>
+
+    <grid id="other_grid_XYW">
+      <axis axis_ref="other_domain_X" />
+      <axis axis_ref="other_domain_Y" />
+      <axis axis_ref="other_ensemble" />
+    </grid>
+
+    <grid id="other_grid_XYZW">
+      <axis axis_ref="other_domain_X" />
+      <axis axis_ref="other_domain_Y" />
+      <axis axis_ref="other_axis" />
+      <axis axis_ref="other_ensemble" />
+    </grid>
+
+    <grid id="other_grid_XZW">
+      <axis axis_ref="other_domain_X" />
+      <axis axis_ref="other_axis" />
+      <axis axis_ref="other_ensemble" />
+    </grid>
+
+    <grid id="other_grid_YZW">
+      <axis axis_ref="other_domain_Y" />
+      <axis axis_ref="other_axis" />
+      <axis axis_ref="other_ensemble" />
+    </grid>
+
+
+
+
+
+
+
+
+
+
+    <grid id="grid_vert_reduce">
+      <domain domain_ref="domain" />
+      <scalar >
+        <reduce_axis operation="sum" />
+      </scalar>
+    </grid>
+
+    <grid id="grid_horiz_reduce">
+      <scalar >
+        <reduce_domain operation="sum" />
+      </scalar>
+      <axis axis_ref="axis" />
+    </grid>
+      
+    <grid id="grid_zoom_vert">
+      <domain domain_ref="domain" />
+      <axis axis_ref="axis_zoom" />
+    </grid>
+
+    <grid id="grid_zoom_vert_sum">
+      <scalar >
+        <reduce_domain operation="sum" />
+      </scalar>
+      <axis axis_ref="axis_zoom" />
+    </grid>
+
+   <grid id="grid_lat">
+       <axis axis_ref="domain_Y">
+         <reduce_domain direction="iDir" operation="sum"/> 
+       </axis>
+       <axis axis_ref="axis" />
+    </grid>
+    
+
+    <grid id="grid3D_invert">
+      <domain domain_ref="domain">
+        <reorder_domain invert_lat="true" />
+      </domain>
+      <axis axis_ref="axis" />
+    </grid>
+    
+    <grid id="grid2D_invert">
+      <domain domain_ref="domain">
+        <reorder_domain invert_lat="true" shift_lon_fraction="0.5" min_lon="0" max_lon="360"/>
+      </domain>
+    </grid>
+
+    
+  </grid_definition>
+  
+  
+  <field_definition level="1" prec="8" operation="instant" freq_op="1ts" enabled=".true." default_value="1.e+20" detect_missing_value="true">
+    <field id="field2D" grid_ref="grid2D" />
+    <field id="field3D" grid_ref="grid3D" build_workflow_graph="true"  />
+    <field id="pressure" grid_ref="grid3D"  />
+    <field id="field3D_recv" read_access="true" grid_ref="grid3D"  field_ref="field3D" />
+    <field id="field3D_resend" grid_ref="grid3D" />
+
+    <field id="field_X" grid_ref="grid_X" />
+    <field id="field_Y" grid_ref="grid_Y" />
+    <field id="field_Z" grid_ref="grid1D" />
+    <field id="field_XY" grid_ref="grid_XY" />
+    <field id="field_XYZ" grid_ref="grid_XYZ" />
+    <field id="field_XZ" grid_ref="grid_XZ" />
+    <field id="field_YZ" grid_ref="grid_YZ" />
+
+    <field id="field_zoom_vert" field_ref="field3D" grid_ref="grid_zoom_vert"  />
+    <field id="field_zoom_vert_sum" field_ref="field_zoom_vert" grid_ref="grid_zoom_vert_sum"  />
+
+
+
+    <field id="field2D_W" grid_ref="grid2D_W"/>
+    <field id="field3D_W" grid_ref="grid3D_W"  />
+    <field id="pressure_W" grid_ref="grid3D_W"  />
+    <field id="field3D_recv_W" read_access="true" grid_ref="grid3D_W"  field_ref="field3D_W"/>
+    <field id="field3D_resend_W" grid_ref="grid3D_W" />
+
+    <field id="field_XW" grid_ref="grid_XW" />
+    <field id="field_YW" grid_ref="grid_YW" />
+    <field id="field_ZW" grid_ref="grid1D_W" />
+    <field id="field_XYW" grid_ref="grid_XYW" />
+    <field id="field_XYZW" grid_ref="grid_XYZW" />
+    <field id="field_XZW" grid_ref="grid_XZW" />
+    <field id="field_YZW" grid_ref="grid_YZW" />
+
+
+
+
+    <field id="other_field2D" grid_ref="other_grid2D"/>
+    <field id="other_field3D" grid_ref="other_grid3D"  />
+    <field id="other_pressure" grid_ref="other_grid3D"  />
+    <field id="other_field3D_recv" read_access="true" grid_ref="other_grid3D"  field_ref="other_field3D"/>
+    <field id="other_field3D_resend" grid_ref="other_grid3D" />
+
+    <field id="other_field_X" grid_ref="other_grid_X" />
+    <field id="other_field_Y" grid_ref="other_grid_Y" />
+    <field id="other_field_Z" grid_ref="other_grid1D" />
+    <field id="other_field_XY" grid_ref="other_grid_XY" />
+    <field id="other_field_XYZ" grid_ref="other_grid_XYZ" />
+    <field id="other_field_XZ" grid_ref="other_grid_XZ" />
+    <field id="other_field_YZ" grid_ref="other_grid_YZ" />
+
+    <field id="other_field2D_W" grid_ref="other_grid2D_W"/>
+    <field id="other_field3D_W" grid_ref="other_grid3D_W"  />
+    <field id="other_pressure_W" grid_ref="other_grid3D_W"  />
+    <field id="other_field3D_recv_W" read_access="true" grid_ref="other_grid3D_W"  field_ref="other_field3D_W"/>
+    <field id="other_field3D_resend_W" grid_ref="other_grid3D_W" />
+
+    <field id="other_field_XW" grid_ref="other_grid_XW" />
+    <field id="other_field_YW" grid_ref="other_grid_YW" />
+    <field id="other_field_ZW" grid_ref="other_grid1D_W" />
+    <field id="other_field_XYW" grid_ref="other_grid_XYW" />
+    <field id="other_field_XYZW" grid_ref="other_grid_XYZW" />
+    <field id="other_field_XZW" grid_ref="other_grid_XZW" />
+    <field id="other_field_YZW" grid_ref="other_grid_YZW" />
+
+
+
+
+    
+    
+  </field_definition>
+  
+
+  <file_definition  type="one_file" >
+    
+    <file id="atm_output" output_freq="4ts" type="one_file" enabled="true">
+<!--      <field field_ref="field3D" />
+      <field field_ref="field2D" /> 
+      <field field_ref="field3D" grid_ref="grid_vert_reduce" name="field_vert_reduced" /> 
+      <field field_ref="field3D" grid_ref="grid_horiz_reduce" name="field_horiz_reduced" />
+      <field field_ref="field_zoom_vert"  /> 
+      <field field_ref="field_zoom_vert_sum"  /> 
+      <field field_ref="pressure"  /> 
+      <field field_ref="field3D_resend" /> -->
+       
+       <field field_ref="field3D" enabled="true"/>
+       <field field_ref="field2D" enabled="true"/> 
+       <field field_ref="field_X" enabled="true"/>
+       <field field_ref="field_Y" enabled="true"/>
+       <field field_ref="field_XY" enabled="true"/>
+       <field field_ref="field_Z" enabled="true"/>
+       <field field_ref="field_XYZ" enabled="true"/>
+       <field field_ref="field_XZ" enabled="true"/>
+       <field field_ref="field_YZ" enabled="true"/>
+    </file>
+
+    <file id="atm_output_other" output_freq="1ts" type="one_file" enabled="true">
+       <field field_ref="other_field3D" enabled="true"/>
+       <field field_ref="other_field2D" enabled="true"/> 
+       <field field_ref="other_field_X" enabled="true"/>
+       <field field_ref="other_field_Y" enabled="true"/>
+       <field field_ref="other_field_XY" enabled="true"/>
+       <field field_ref="other_field_Z" enabled="true"/>
+       <field field_ref="other_field_XYZ" enabled="true"/>
+       <field field_ref="other_field_XZ" enabled="true"/>
+       <field field_ref="other_field_YZ" enabled="true"/>
+    </file>
+
+    <file id="atm_output_W" output_freq="1ts" enabled="false">
+       <field field_ref="field3D_W" enabled="true"/>
+       <field field_ref="field2D_W" enabled="true"/> 
+       <field field_ref="field_XW" enabled="true"/>
+       <field field_ref="field_YW" enabled="true"/>
+       <field field_ref="field_XYW" enabled="true"/>
+       <field field_ref="field_ZW" enabled="true"/>
+       <field field_ref="field_XYZW" enabled="true"/>
+       <field field_ref="field_XZW" enabled="true"/>
+       <field field_ref="field_YZW" enabled="true"/>
+    </file>
+    
+
+    <file id="atm_output_reorder" output_freq="1ts" enabled="false" >
+       <field field_ref="field2D" grid_ref="grid2D_invert" enabled="true"/>
+    </file>
+    
+    <file id="test_grid_lat" output_freq="1ts" enabled="false">
+      <field field_ref="field3D" operation="instant" />
+      <field id="field_reduce_lat" field_ref="field3D" grid_ref="grid_lat" operation="instant" />
+    </file>
+    
+  </file_definition>
+  
+  
+</context>
Index: /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/context_grid_dynamico.xml
===================================================================
--- /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/context_grid_dynamico.xml	(revision 1844)
+++ /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/context_grid_dynamico.xml	(revision 1844)
@@ -0,0 +1,19 @@
+<context id="grid_dynamico">
+  
+  <calendar type="Gregorian" time_origin="1850-01-01 00:00:00" timestep="1s"/> 
+   
+   
+  <file_definition>   
+     <file id="dynamico_grid" name="Ai" mode="read" output_freq="1ts" type="one_file">
+       <field id="Ai" domain_ref="domain_dynamico" operation="instant"/>
+     </file>
+  </file_definition>
+  
+  <domain_definition>
+    <domain id="domain_dynamico" type="unstructured">
+      <generate_rectilinear_domain/>
+    </domain>
+  </domain_definition>
+
+
+</context>
Index: /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/default_param.json
===================================================================
--- /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/default_param.json	(revision 1844)
+++ /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/default_param.json	(revision 1844)
@@ -0,0 +1,11 @@
+[
+	{
+	"ATMdomain": "'lmdz'",
+        "UsingServer2": "'true'",
+        "RatioServer2": "50",
+        "NumberPoolsServer2": "1",
+        "Duration": "'1d'",
+        "NumberClients": "4",
+	"NumberServers": "4"
+	}
+]
Index: /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/generate_new_reference.sh
===================================================================
--- /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/generate_new_reference.sh	(revision 1844)
+++ /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/generate_new_reference.sh	(revision 1844)
@@ -0,0 +1,36 @@
+#!/bin/bash
+revision=$(svn info --show-item revision ../ 2>&1)
+mkdir -p xios_reference
+for i in $(ls -d test_*)
+do
+  echo ${i%%}
+  mkdir -p xios_reference/${i%%}
+  for j in $(ls -d ${i%%}/config_*)
+  do
+    echo ${j%%}
+    mkdir -p xios_reference/${j%%}
+    DIR=${j%%}/tmp_reference
+    if [ -d "$DIR" ]; then
+      mv ${j%%}/tmp_reference ${j%%}/reference  
+    fi
+
+    cp -r ${j%%}/reference xios_reference/${j%%}
+    cp -r ${j%%}/setup xios_reference/${j%%}
+  done
+
+done
+
+cp -r ../ENV ./
+cp ../load_env ./
+source ./load_env
+#echo "xios_reference_dir" ${xios_reference_dir}
+
+mkdir -p ${xios_reference_dir}/xios_reference_archive
+mkdir -p ${xios_reference_dir}/xios_reference_archive/$(( ${revision}-1 ))
+mv ${xios_reference_dir}/xios_reference.tar.gz ${xios_reference_dir}/xios_reference_archive/$(( ${revision}-1 ))/
+
+tar -zcvf ${xios_reference_dir}/xios_reference.tar.gz xios_reference/
+rm -rf xios_reference
+
+rm -rf ENV
+rm -f load_env
Index: /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/generate_new_reference_irene_local.sh
===================================================================
--- /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/generate_new_reference_irene_local.sh	(revision 1844)
+++ /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/generate_new_reference_irene_local.sh	(revision 1844)
@@ -0,0 +1,29 @@
+#!/bin/bash
+revision=$(svn info --show-item revision ../ 2>&1)
+mkdir -p xios_reference
+for i in $(ls -d test_*)
+do
+  echo ${i%%}
+  mkdir -p xios_reference/${i%%}
+  for j in $(ls -d ${i%%}/config_*)
+  do
+    echo ${j%%}
+    mkdir -p xios_reference/${j%%}
+    DIR=${j%%}/tmp_reference
+    if [ -d "$DIR" ]; then
+      mv ${j%%}/tmp_reference ${j%%}/reference  
+    fi
+
+    cp -r ${j%%}/reference xios_reference/${j%%}
+    cp -r ${j%%}/setup xios_reference/${j%%}
+  done
+
+done
+
+
+mkdir -p ${CCCWORKDIR}/xios_reference_archive
+mkdir -p ${CCCWORKDIR}/xios_reference_archive/$(( ${revision}-1 ))
+mv ${CCCWORKDIR}/xios_reference.tar.gz ${CCCWORKDIR}/xios_reference_archive/$(( ${revision}-1 ))/
+
+tar -zcvf ${CCCWORKDIR}/xios_reference.tar.gz xios_reference/
+rm -rf xios_reference
Index: /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/generate_new_reference_jeanzay_local.sh
===================================================================
--- /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/generate_new_reference_jeanzay_local.sh	(revision 1844)
+++ /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/generate_new_reference_jeanzay_local.sh	(revision 1844)
@@ -0,0 +1,29 @@
+#!/bin/bash
+revision=$(svn info --show-item revision ../ 2>&1)
+mkdir -p xios_reference
+for i in $(ls -d test_*)
+do
+  echo ${i%%}
+  mkdir -p xios_reference/${i%%}
+  for j in $(ls -d ${i%%}/config_*)
+  do
+    echo ${j%%}
+    mkdir -p xios_reference/${j%%}
+    DIR=${j%%}/tmp_reference
+    if [ -d "$DIR" ]; then
+      mv ${j%%}/tmp_reference ${j%%}/reference  
+    fi
+
+    cp -r ${j%%}/reference xios_reference/${j%%}
+    cp -r ${j%%}/setup xios_reference/${j%%}
+  done
+
+done
+
+
+mkdir -p ${WORK}/xios_reference_archive
+mkdir -p ${WORK}/xios_reference_archive/$(( ${revision}-1 ))
+mv ${WORK}/xios_reference.tar.gz ${WORK}/xios_reference_archive/$(( ${revision}-1 ))/
+
+tar -zcvf ${WORK}/xios_reference.tar.gz xios_reference/
+rm -rf xios_reference
Index: /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/generate_test.py
===================================================================
--- /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/generate_test.py	(revision 1844)
+++ /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/generate_test.py	(revision 1844)
@@ -0,0 +1,178 @@
+import glob
+import sys
+import subprocess
+import os
+
+def OSinfo(runthis):
+	red = lambda text: '\033[0;31m' + text + '\033[0m'
+	osstdout = subprocess.Popen(runthis, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, close_fds=True)
+	theInfo = osstdout.communicate()[0].strip()
+	if osstdout.returncode!=0:
+		print(red(runthis+" FAILED"))
+		print >> sys.stderr, osstdout.returncode
+		sys.exit()
+	# else:
+	# 	print(runthis+" OK")
+
+def Sort(sub_li): 
+    l = len(sub_li) 
+    for i in range(0, l): 
+        for j in range(0, l-i-1): 
+            if (sub_li[j][0] < sub_li[j+1][0]): 
+                tempo = sub_li[j] 
+                sub_li[j]= sub_li[j+1] 
+                sub_li[j+1]= tempo
+            if (sub_li[j][0] == sub_li[j+1][0]):
+                if (sub_li[j][2] < sub_li[j+1][2]): 
+                    tempo = sub_li[j] 
+                    sub_li[j]= sub_li[j+1] 
+                    sub_li[j+1]= tempo 
+                if (sub_li[j][1] == sub_li[j+1][1]): 
+                    if (sub_li[j][2] < sub_li[j+1][2]): 
+                        tempo = sub_li[j] 
+                        sub_li[j]= sub_li[j+1] 
+                        sub_li[j+1]= tempo 
+    return sub_li 
+
+def subgenerate(directory, machine, machine_name):
+   
+    test_list = glob.glob(directory+"/test_"+machine+"/test_*.txt")
+    if len(test_list) == 0 :
+        return
+    
+    revision_list=[]
+    relurl_list=[]
+    machine_list=[]
+    build_dir_list=[]
+    arch_list=[]
+    mode_list=[]
+    
+    myTestList=[]    
+        
+    for test_log in test_list :
+        f=open(test_log, "r")
+        for line in f :
+            if line.startswith("#revision") :
+                revision = line.replace("\n","").split(" ")[1]
+                if not revision in revision_list :
+                    revision_list.append(revision)
+            elif line.startswith("#relurl") :
+                relurl = line.replace("\n","").split(" ")[1]
+                tmp_url = relurl.split("/")
+                branch = tmp_url[len(tmp_url)-1]
+                if not relurl in relurl_list :
+                    relurl_list.append(relurl)
+            elif line.startswith("#build_dir") :
+                build_dir = line.replace("\n","").split(" ")[1]
+                tmp_list = build_dir.split("/")
+                short_dir = tmp_list[len(tmp_list)-1]
+                if not build_dir in build_dir_list :
+                    build_dir_list.append(short_dir)
+            elif line.startswith("#arch") :
+                arch = line.replace("\n","").split(" ")[1]
+                if not arch in arch_list :
+                    arch_list.append(arch)
+            elif line.startswith("#mode") :
+                mode = line.replace("\n","").split(" ")[1]
+                if not mode in mode_list :
+                    mode_list.append(mode)
+        
+        myTestList.append([revision, machine, short_dir, branch, machine_name, arch, mode, build_dir])
+        f.close()
+        
+    revision_list = sorted(revision_list, reverse=True)
+    print(revision_list)
+    
+    Sort(myTestList)
+    print(myTestList)
+  
+    f=open("_test_"+machine+"_info.js", "w")
+    f.write("var test_"+machine+"_revision_list = "+repr(revision_list)+"\n\n")
+    f.write("var test_"+machine+"_info_list = [\n")
+    for i in range(len(myTestList)) :
+        if i<len(myTestList)-1 :
+            f.write("        "+repr(myTestList[i])+",\n")
+        else :
+            f.write("        "+repr(myTestList[i])+"]\n\n")
+            
+    myReportDict=dict()
+    for i in range(len(myTestList)) :
+        myReportList=[] # algo, config, file, status
+        print(myTestList[i])
+        file_to_open = directory+"/test_"+machine+"/test_"+myTestList[i][0]+"_"+myTestList[i][1]+"_"+myTestList[i][2].replace("build_","")+".txt"
+        g=open(file_to_open, "r")
+        for line in g :
+            if not line.startswith("#") :
+                line = line.replace("\n","").split(" ")
+                algo = line[0]
+                config = line[1].split("@")[1]
+                file = line[2].split("@")[2]
+                status = line[3]
+                myReportList.append([algo, config, file, status])
+        g.close()
+        print(len(myReportList))
+        myReportDict.update({myTestList[i][0]+"_"+myTestList[i][2].replace("build_","") : myReportList})
+    
+    for i in range(len(myReportDict)) :
+        key = list(myReportDict.keys())[i]
+        f.write("var test_"+machine+"_"+key+" = [\n")
+        for j in range(len(myReportDict[key])) :
+            if j<len(myReportDict[key])-1 : 
+                f.write("        [\'"+myReportDict[key][j][0]+"\', \'"+myReportDict[key][j][1]+"\', \'"+myReportDict[key][j][2]+"\', "+myReportDict[key][j][3]+"],\n")
+            else :
+                f.write("        [\'"+myReportDict[key][j][0]+"\', \'"+myReportDict[key][j][1]+"\', \'"+myReportDict[key][j][2]+"\', "+myReportDict[key][j][3]+"]")
+        f.write("]\n\n\n")
+
+    for revision in revision_list :
+        algo_list = glob.glob(directory+"/def_files/"+revision+"/test_*")
+    
+        for l in algo_list :
+            tmp_algo = l.split("/")
+            f.write("var test_"+machine+"_"+revision+"_"+tmp_algo[len(tmp_algo)-1]+"_user_params = [\n")
+            if os.path.exists(l+"/user_param.json"):
+                g=open(l+"/user_param.json","r")
+                for line in g:
+                    if not line=="\n" and not line.startswith("#"):
+                        f.write("        \'"+line.replace("\n","").replace("'","\\\'")+"\',\n")
+                g.close()
+            else :
+                g=open(l+"/user_params.def","r")
+                for line in g:
+                    if not line=="\n" and not line.startswith("#"):
+                        f.write("        \'"+line.replace("\n","").replace("'","\\\'")+"\',\n")
+                g.close()
+            f.write("        ]\n\n")
+
+    for revision in revision_list :
+        algo_list = glob.glob(directory+"/def_files/"+revision+"/test_*")
+    
+        for algo in algo_list :
+            config_list = glob.glob(algo+"/config_*")
+            tmp_algo = algo.split("/") 
+            algo_name = tmp_algo[len(tmp_algo)-1]
+            for config in config_list :
+                tmp_config = config.split("/")
+                config_name = tmp_config[len(tmp_config)-1]
+                config_name_bis = config_name.replace("=","_")
+                f.write("var test_"+machine+"_"+revision+"_"+algo_name+"_"+config_name_bis+"_all_params = [\n")
+                g=open(config+"/all_param.def","r")
+                for line in g:
+                    line = line.replace("&", "& ")
+                    if not line=="\n" :
+                        f.write("        \'"+line.replace("\n","").replace("'","\\\'")+"\',\n")
+                g.close()
+                f.write("        ]\n\n")
+
+    f.close()
+
+    
+def main():
+    repository_name=os.getenv('xios_test_suite_repository')
+    machine=os.getenv('xios_machine_name')
+    machine_name=os.getenv('xios_full_machine_name')
+    
+    subgenerate(repository_name+'/RUN',machine, machine_name)
+
+
+if __name__== "__main__":
+  main()
Index: /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/iodef.xml
===================================================================
--- /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/iodef.xml	(revision 1844)
+++ /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/iodef.xml	(revision 1844)
@@ -0,0 +1,67 @@
+<?xml version="1.0"?>
+
+<simulation>
+
+  <context id="atm">
+    <variable_definition>
+
+      <variable id="timestep"> 1h </variable>
+      <variable id="domain"> atm::domain </variable>
+      <variable id="domain_mask"> true </variable>
+      <variable id="axis_mask"> true </variable>
+      <variable id="init_field2D"> rank </variable>
+      <variable id="ni"> 36 </variable>
+      <variable id="nj"> 18 </variable>
+      <variable id="nlev"> 10 </variable>
+      <variable id="pressure_factor"> 0.10 </variable>
+      <variable id="mask3d"> false </variable>
+<!--      <variable id="domain_proc_frac">3</variable>
+      <variable id="axis_proc_frac">2</variable>
+      <variable id="axis_proc_n">2</variable>
+      <variable id="ensemble_proc_n">2</variable> -->
+      
+      <variable id="other_domain"> lmdz </variable>
+      <variable id="other_domain_mask"> false </variable>
+      <variable id="other_axis_mask"> false </variable>
+      <variable id="other_init_field2D"> academic </variable>
+      <variable id="other_ni"> 36 </variable>
+      <variable id="other_nj"> 18 </variable>
+      <variable id="other_nlev"> 10 </variable>
+      <variable id="other_pressure_factor"> 0.10 </variable>
+      <variable id="other_mask3d"> false </variable>
+<!--      <variable id="other_domain_proc_frac">3</variable>
+      <variable id="other_axis_proc_frac">2</variable>
+      <variable id="other_axis_proc_n">2</variable>
+      <variable id="other_ensemble_proc_n">2</variable> -->
+      
+    </variable_definition>
+  </context>
+
+
+
+  <context id="atm" src="./context_atm.xml"/>
+  <context id="grid_dynamico" src="./context_grid_dynamico.xml"/>
+  
+  <context id="xios">
+    <variable_definition>
+      <variable_group id="buffer">
+  <variable id="min_buffer_size" type="int">10000000</variable>
+  <variable id="optimal_buffer_size" type="string">performance</variable>
+  <variable id="buffer_factor_size" type="double">0.8</variable> 
+      </variable_group>
+
+      <variable_group id="parameters" >
+        <variable id="using_server" type="bool">true</variable>
+        <variable id="info_level" type="int">100</variable>
+        <variable id="print_file" type="bool">true</variable>
+        <variable id="using_server2" type="bool">xios::usingSrv2</variable>
+        <variable id="ratio_server2" type="int">xios::ratioSrv2</variable>
+        <variable id="number_pools_server2" type="int">xios::nbplSrv2</variable>
+        <variable id="pure_one_sided" type="bool">false</variable>
+        <variable id="check_event_sync" type="bool">true</variable>
+      </variable_group>
+      <variable id="activate_non_distributed_transformation" type="bool">true</variable>
+    </variable_definition>
+  </context>
+
+</simulation>
Index: /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/iodef.xml.template
===================================================================
--- /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/iodef.xml.template	(revision 1844)
+++ /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/iodef.xml.template	(revision 1844)
@@ -0,0 +1,67 @@
+<?xml version="1.0"?>
+
+<simulation>
+
+  <context id="atm">
+    <variable_definition>
+
+      <variable id="timestep"> 1h </variable>
+      <variable id="domain"> atm::domain </variable>
+      <variable id="domain_mask"> true </variable>
+      <variable id="axis_mask"> false </variable>
+      <variable id="init_field2D"> rank </variable>
+      <variable id="ni"> 36 </variable>
+      <variable id="nj"> 18 </variable>
+      <variable id="nlev"> 10 </variable>
+      <variable id="pressure_factor"> 0.10 </variable>
+      <variable id="mask3d"> false </variable>
+<!--      <variable id="domain_proc_frac">3</variable>
+      <variable id="axis_proc_frac">2</variable>
+      <variable id="axis_proc_n">2</variable>
+      <variable id="ensemble_proc_n">2</variable> -->
+      
+      <variable id="other_domain"> lmdz </variable>
+      <variable id="other_domain_mask"> false </variable>
+      <variable id="other_axis_mask"> false </variable>
+      <variable id="other_init_field2D"> academic </variable>
+      <variable id="other_ni"> 36 </variable>
+      <variable id="other_nj"> 18 </variable>
+      <variable id="other_nlev"> 10 </variable>
+      <variable id="other_pressure_factor"> 0.10 </variable>
+      <variable id="other_mask3d"> false </variable>
+<!--      <variable id="other_domain_proc_frac">3</variable>
+      <variable id="other_axis_proc_frac">2</variable>
+      <variable id="other_axis_proc_n">2</variable>
+      <variable id="other_ensemble_proc_n">2</variable> -->
+      
+    </variable_definition>
+  </context>
+
+
+
+  <context id="atm" src="./context_atm.xml"/>
+  <context id="grid_dynamico" src="./context_grid_dynamico.xml"/>
+  
+  <context id="xios">
+    <variable_definition>
+      <variable_group id="buffer">
+  <variable id="min_buffer_size" type="int">10000000</variable>
+  <variable id="optimal_buffer_size" type="string">performance</variable>
+  <variable id="buffer_factor_size" type="double">0.8</variable> 
+      </variable_group>
+
+      <variable_group id="parameters" >
+        <variable id="using_server" type="bool">true</variable>
+        <variable id="info_level" type="int">100</variable>
+        <variable id="print_file" type="bool">true</variable>
+        <variable id="using_server2" type="bool">xios::usingSrv2</variable>
+        <variable id="ratio_server2" type="int">xios::ratioSrv2</variable>
+        <variable id="number_pools_server2" type="int">xios::nbplSrv2</variable>
+        <variable id="pure_one_sided" type="bool">false</variable>
+        <variable id="check_event_sync" type="bool">true</variable>
+      </variable_group>
+      <variable id="activate_non_distributed_transformation" type="bool">true</variable>
+    </variable_definition>
+  </context>
+
+</simulation>
Index: /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/job_irene.sh
===================================================================
--- /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/job_irene.sh	(revision 1844)
+++ /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/job_irene.sh	(revision 1844)
@@ -0,0 +1,43 @@
+#!/bin/bash
+######################
+## CURIE   TGCC/CEA ##
+######################
+#MSUB -r XIOS
+#MSUB -o client_output.out    # standard output
+#MSUB -e client_error.err    #error output
+#MSUB -eo
+#MSUB -c 1
+#MSUB -n 48  # Number of MPI tasks (SPMD case) or cores (MPMD case)
+#MSUB -X 
+#MSUB -x 
+#MSUB -T 1800      # Wall clock limit (seconds)
+#MSUB -q skylake           # thin nodes
+#MSUB -A gen0826
+#MSUB -Q test
+#MSUB -m work,scratch
+
+
+#============================= X64_IRENE_prod =============================
+
+
+cd $BRIDGE_MSUB_PWD
+
+export arch=X64_IRENE
+export mode=prod
+
+./run_test
+
+
+#============================= X64_IRENE_debug =============================
+
+
+cd $BRIDGE_MSUB_PWD
+
+export arch=X64_IRENE
+export mode=debug
+
+./run_test
+
+
+
+
Index: /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/job_irene_local.sh
===================================================================
--- /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/job_irene_local.sh	(revision 1844)
+++ /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/job_irene_local.sh	(revision 1844)
@@ -0,0 +1,43 @@
+#!/bin/bash
+######################
+## CURIE   TGCC/CEA ##
+######################
+#MSUB -r XIOS
+#MSUB -o client_output.out    # standard output
+#MSUB -e client_error.err    #error output
+#MSUB -eo
+#MSUB -c 1
+#MSUB -n 48  # Number of MPI tasks (SPMD case) or cores (MPMD case)
+#MSUB -X 
+#MSUB -x 
+#MSUB -T 1800      # Wall clock limit (seconds)
+#MSUB -q skylake           # thin nodes
+#MSUB -A gen0826
+#MSUB -Q test
+#MSUB -m work,scratch
+
+
+#============================= X64_IRENE_prod =============================
+
+
+cd $BRIDGE_MSUB_PWD
+
+export arch=X64_IRENE
+export mode=prod
+
+./run_test_local
+
+
+#============================= X64_IRENE_debug =============================
+
+
+cd $BRIDGE_MSUB_PWD
+
+export arch=X64_IRENE
+export mode=debug
+
+./run_test_local
+
+
+
+
Index: /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/job_jeanzay.sh
===================================================================
--- /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/job_jeanzay.sh	(revision 1844)
+++ /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/job_jeanzay.sh	(revision 1844)
@@ -0,0 +1,32 @@
+#!/bin/bash
+##SBATCH --nodes=2
+#SBATCH --ntasks=8              # Nombre total de processus MPI
+#SBATCH --ntasks-per-node=16
+##SBATCH --cpus-per-task=1
+#SBATCH --hint=nomultithread
+#SBATCH -t 00:10:00              # Temps elapsed maximum d'exÃ©cution
+#SBATCH -o output.out     # Nom du fichier de sortie
+#SBATCH -e error.err     # Nom du fichier d'erreur
+##SBATCH -p cpu_port             # Nom de la partition d'exÃ©cution
+##SBATCH -A sos@cpu
+##SBATCH --distribution=arbitrary
+#SBATCH --account=psl@cpu
+
+ulimit -c 0
+
+cd ${SLURM_SUBMIT_DIR}
+
+#============================= X64_JEANZAY_prod =============================
+
+export arch=X64_JEANZAY
+export mode=prod
+
+./run_test
+
+
+#============================= X64_JEANZAY_debug =============================
+
+export arch=X64_JEANZAY
+export mode=debug
+
+./run_test
Index: /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/job_jeanzay_local.sh
===================================================================
--- /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/job_jeanzay_local.sh	(revision 1844)
+++ /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/job_jeanzay_local.sh	(revision 1844)
@@ -0,0 +1,32 @@
+#!/bin/bash
+##SBATCH --nodes=2
+#SBATCH --ntasks=8              # Nombre total de processus MPI
+#SBATCH --ntasks-per-node=16
+##SBATCH --cpus-per-task=1
+#SBATCH --hint=nomultithread
+#SBATCH -t 00:10:00              # Temps elapsed maximum d'exÃ©cution
+#SBATCH -o output.out     # Nom du fichier de sortie
+#SBATCH -e error.err     # Nom du fichier d'erreur
+##SBATCH -p cpu_port             # Nom de la partition d'exÃ©cution
+##SBATCH -A sos@cpu
+##SBATCH --distribution=arbitrary
+#SBATCH --account=psl@cpu
+
+ulimit -c 0
+
+cd ${SLURM_SUBMIT_DIR}
+
+#============================= X64_JEANZAY_prod =============================
+
+export arch=X64_JEANZAY
+export mode=prod
+
+./run_test_local
+
+
+#============================= X64_JEANZAY_debug =============================
+
+export arch=X64_JEANZAY
+export mode=debug
+
+./run_test_local
Index: /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/param_list.py
===================================================================
--- /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/param_list.py	(revision 1844)
+++ /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/param_list.py	(revision 1844)
@@ -0,0 +1,2 @@
+param_list = ["ATMdomain", "UsingServer2", "NumberClients", "NumberServers", "RatioServer2", "NumberPoolsServer2", "Duration"]
+param_short_list = ["ATMdom", "UsingSrv2", "NbClients", "NbServers", "RatioSrv2", "NbPlSrv2", "Duration"]
Index: /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/run_sub_test.sh
===================================================================
--- /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/run_sub_test.sh	(revision 1844)
+++ /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/run_sub_test.sh	(revision 1844)
@@ -0,0 +1,56 @@
+#!/bin/bash
+
+cp ../context_grid_dynamico.xml ./
+cp ../dynamico_grid.nc ./
+cp ../config.py sub_config.py
+cp ../check.py sub_check.py
+# cp ../default_param.py default_param.py
+
+
+{ nb_proc=$(python sub_config.py 2>&1 1>&3-) ;} 3>&1
+
+if [[ ($machine_name == irene) ]]
+then
+    echo "Testing on Irene"
+    echo "build_dir="$build_dir
+    ccc_mprun -n $nb_proc $xios_dir/$build_dir/bin/generic_testcase.exe
+elif [[($machine_name == jeanzay)]]
+then
+    echo "Testing on Jean-Zay" 
+    echo "build_dir="$build_dir
+    srun -n $nb_proc --mpi=pmi2 $xios_dir/$build_dir/bin/generic_testcase.exe
+    if [ $? -ne 0 ]
+        then
+            echo "execution failed"
+            rm -f iodef.xml
+            rm -f user_param.py
+            rm -f default_param.py
+            rm -f sub_config.py
+            rm -f sub_check.py
+            exit 1234
+    fi
+else
+    echo "other machine"
+    exit 1234
+fi
+
+
+{ check_stderr=$(python sub_check.py 2>&1 1>&3-) ;} 3>&1  #captures stderr, letting stdout through
+
+if [[ "$check_stderr" -ne 0 ]]
+then
+    echo "check.py failed"
+    rm -f iodef.xml
+    rm -f user_param.py
+    rm -f default_param.py
+    rm -f sub_config.py
+    rm -f sub_check.py
+    exit 1234
+fi
+
+
+rm -f iodef.xml
+rm -f user_param.py
+rm -f default_param.py
+rm -f sub_config.py
+rm -f sub_check.py
Index: /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/run_test
===================================================================
--- /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/run_test	(revision 1844)
+++ /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/run_test	(revision 1844)
@@ -0,0 +1,120 @@
+#!/bin/bash
+
+source ../ARCH/arch-${arch}.env
+cd .. ; source load_env ; cd RUN_TEST_SUITE 
+
+export machine_name=$xios_machine_name
+export machine_full_name=$xios_full_machine_name
+export xios_dir=$(bash -c "cd ../.. && pwd" 2>&1)
+
+export reference_file=xios_reference.tar.gz
+export reference_folder=xios_reference
+
+export build_dir=xios_test_suite/RUN_TEST_SUITE/build_${arch}_${mode}
+export xios_revision=$(svn info --show-item revision ../.. 2>&1)
+export relurl=$(svn info --show-item relative-url ../.. 2>&1)
+
+
+set -x 
+
+echo "Start Building XIOS ... "
+bash -c "cd ../.. && ./make_xios --arch_path `pwd`/../ARCH --arch ${arch} --${mode} --build_dir ${build_dir} --job 16 &> /dev/null"
+export build_status=$?
+if [[ ${build_status} == 0 ]]
+then
+  echo "XIOS Build Finished. Start Unit Tests"
+else
+  echo "XIOS Build Failed. Skip Unit Tests"
+fi
+
+#----------- Fetch reference -----------
+cp ${xios_reference_dir}/${reference_file} ./
+tar -xzvf ${reference_file}
+
+rm -f ${reference_file}
+
+for i in $(ls ${reference_folder}/) 
+do
+  folder=${i%%}
+  bash -c "cd ${folder} && rm -rf config_*"
+  bash -c "cp -r ${reference_folder}/${folder}/config_* ./${folder}"
+done
+
+rm -rf ${reference_folder}
+
+
+rm -f plain_report.txt
+
+echo "#revision" ${xios_revision} >> plain_report.txt
+echo "#relurl" ${relurl} >> plain_report.txt
+echo "#machine" ${machine_name} >> plain_report.txt
+echo "#build_dir" ${xios_dir}/${build_dir} >> plain_report.txt
+echo "#arch" ${arch} >> plain_report.txt
+echo "#mode" ${mode} >> plain_report.txt
+
+if [[ ${build_status} == 0 ]]
+then
+
+rm -f setup.sh
+touch setup.sh
+>setup.sh
+for i in $(ls -d test_*/)
+do
+  cp setup.py ${i%%/}      
+  cp default_param.json ${i%%/}  
+  cp param_list.py ${i%%/}      
+  cp run_sub_test.sh ${i%%/} 
+  echo "bash -c \"cd " ${i%%/} " && python setup.py\" ">> setup.sh
+  echo "echo \"setup.py called from " ${i%%/} "\"">> setup.sh
+done
+
+export output=$(python user_config.py 2>&1 >/dev/null)
+
+if [ "$output" -ne 0 ]
+then
+	echo "user_config.py failed"
+	exit
+else
+	echo "user_config.py OK"
+fi
+
+
+cmake .
+ctest -V 
+#ctest --output-on-failure
+make report
+
+rm -f test_*/setup.py
+rm -f test_*/run_sub_test.sh
+rm -f test_*/run_test_*.py
+rm -f test_*/CMakeLists.txt
+rm -f test_*/context_grid_dynamico.xml
+rm -f test_*/dynamico_grid.nc
+rm -f test_*/default_param.pyc
+rm -f test_*/user_param.pyc
+rm -f test_*/user_param.py.*
+
+rundir=${xios_test_suite_repository}/RUN
+mkdir -p $rundir ; CHMOD  $rundir
+mkdir -p ${rundir}/test_${machine_name} ; CHMOD ${rundir}/test_${machine_name}
+
+cp plain_report.txt ${rundir}/test_${machine_name}/test_${xios_revision}_${machine_name}_${arch}_${mode}.txt
+CHMOD ${rundir}/test_${machine_name}/test_${xios_revision}_${machine_name}_${arch}_${mode}.txt
+
+mkdir -p ${rundir}/def_files ;  CHMOD ${rundir}/RUN/def_files
+mkdir -p ${rundir}/def_files/${xios_revision} ;  CHMOD ${rundir}/def_files/${xios_revision}
+
+for i in $(ls -d test_*/)
+do
+  mkdir -p ${rundir}/def_files/${xios_revision}/${i%%}
+  cp ${i%%}/user_param.json ${rundir}/def_files/${xios_revision}/${i%%}      
+  for j in $(ls -d ${i%%/}/config_*)
+  do
+    mkdir -p ${rundir}/def_files/${xios_revision}/${j%%}
+    cp ${j%%}/setup/all_param.def ${rundir}/def_files/${xios_revision}/${j%%}  
+  done
+  CHMOD ${rundir}/def_files
+done
+
+fi
+
Index: /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/run_test_irene
===================================================================
--- /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/run_test_irene	(revision 1844)
+++ /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/run_test_irene	(revision 1844)
@@ -0,0 +1,8 @@
+#!/bin/bash
+
+ccc_msub -E "--wait" job_irene.sh 
+
+bash -c "python generate_test.py"
+mv _test_${xios_machine_name}_info.js test_${xios_machine_name}_info.js
+copy_to_thredds  test_${xios_machine_name}_info.js
+mv test_${xios_machine_name}_info.js _test_${xios_machine_name}_info.js
Index: /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/run_test_irene_local
===================================================================
--- /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/run_test_irene_local	(revision 1844)
+++ /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/run_test_irene_local	(revision 1844)
@@ -0,0 +1,5 @@
+#!/bin/bash
+
+ccc_msub -E "--wait" job_irene_local.sh 
+
+bash -c "python generate_test.py"
Index: /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/run_test_jeanzay
===================================================================
--- /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/run_test_jeanzay	(revision 1844)
+++ /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/run_test_jeanzay	(revision 1844)
@@ -0,0 +1,8 @@
+#!/bin/bash
+
+sbatch --wait job_jeanzay.sh 
+
+bash -c "python generate_test.py"
+mv _test_${xios_machine_name}_info.js test_${xios_machine_name}_info.js
+copy_to_forge  test_${xios_machine_name}_info.js
+mv test_${xios_machine_name}_info.js _test_${xios_machine_name}_info.js
Index: /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/run_test_jeanzay_local
===================================================================
--- /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/run_test_jeanzay_local	(revision 1844)
+++ /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/run_test_jeanzay_local	(revision 1844)
@@ -0,0 +1,5 @@
+#!/bin/bash
+
+sbatch --wait job_jeanzay_local.sh 
+
+bash -c "python generate_test.py"
Index: /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/run_test_local
===================================================================
--- /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/run_test_local	(revision 1844)
+++ /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/run_test_local	(revision 1844)
@@ -0,0 +1,120 @@
+#!/bin/bash
+
+source ../ARCH/arch-${arch}.env
+cd .. ; source load_env_local ; cd RUN_TEST_SUITE 
+
+export machine_name=$xios_machine_name
+export machine_full_name=$xios_full_machine_name
+export xios_dir=$(bash -c "cd ../.. && pwd" 2>&1)
+
+export reference_file=xios_reference.tar.gz
+export reference_folder=xios_reference
+
+export build_dir=xios_test_suite/RUN_TEST_SUITE/build_${arch}_${mode}
+export xios_revision=$(svn info --show-item revision ../.. 2>&1)
+export relurl=$(svn info --show-item relative-url ../.. 2>&1)
+
+
+set -x 
+
+echo "Start Building XIOS ... "
+bash -c "cd ../.. && ./make_xios --arch_path `pwd`/../ARCH --arch ${arch} --${mode} --build_dir ${build_dir} --job 16 &> /dev/null"
+export build_status=$?
+if [[ ${build_status} == 0 ]]
+then
+  echo "XIOS Build Finished. Start Unit Tests"
+else
+  echo "XIOS Build Failed. Skip Unit Tests"
+fi
+
+#----------- Fetch reference -----------
+cp ${xios_reference_dir}/${reference_file} ./
+tar -xzvf ${reference_file}
+
+rm -f ${reference_file}
+
+for i in $(ls ${reference_folder}/) 
+do
+  folder=${i%%}
+  bash -c "cd ${folder} && rm -rf config_*"
+  bash -c "cp -r ${reference_folder}/${folder}/config_* ./${folder}"
+done
+
+rm -rf ${reference_folder}
+
+
+rm -f plain_report.txt
+
+echo "#revision" ${xios_revision} >> plain_report.txt
+echo "#relurl" ${relurl} >> plain_report.txt
+echo "#machine" ${machine_name} >> plain_report.txt
+echo "#build_dir" ${xios_dir}/${build_dir} >> plain_report.txt
+echo "#arch" ${arch} >> plain_report.txt
+echo "#mode" ${mode} >> plain_report.txt
+
+if [[ ${build_status} == 0 ]]
+then
+
+rm -f setup.sh
+touch setup.sh
+>setup.sh
+for i in $(ls -d test_*/)
+do
+  cp setup.py ${i%%/}  
+  cp default_param.json ${i%%/}  
+  cp param_list.py ${i%%/}     
+  cp run_sub_test.sh ${i%%/}    
+  echo "bash -c \"cd " ${i%%/} " && python setup.py\" ">> setup.sh
+  echo "echo \"setup.py called from " ${i%%/} "\"">> setup.sh
+done
+
+export output=$(python user_config.py 2>&1 >/dev/null)
+
+if [ "$output" -ne 0 ]
+then
+	echo "user_config.py failed"
+	exit
+else
+	echo "user_config.py OK"
+fi
+
+
+cmake .
+ctest -V 
+#ctest --output-on-failure
+make report
+
+rm -f test_*/setup.py
+rm -f test_*/run_sub_test.sh
+rm -f test_*/run_test_*.py
+rm -f test_*/CMakeLists.txt
+rm -f test_*/context_grid_dynamico.xml
+rm -f test_*/dynamico_grid.nc
+rm -f test_*/default_param.pyc
+rm -f test_*/user_param.pyc
+rm -f test_*/user_param.py.*
+
+rundir=${xios_test_suite_repository}/RUN
+mkdir -p $rundir ; CHMOD  $rundir
+mkdir -p ${rundir}/test_${machine_name} ; CHMOD ${rundir}/test_${machine_name}
+
+cp plain_report.txt ${rundir}/test_${machine_name}/test_${xios_revision}_${machine_name}_${arch}_${mode}.txt
+CHMOD ${rundir}/test_${machine_name}/test_${xios_revision}_${machine_name}_${arch}_${mode}.txt
+
+mkdir -p ${rundir}/def_files ;  CHMOD ${rundir}/RUN/def_files
+mkdir -p ${rundir}/def_files/${xios_revision} ;  CHMOD ${rundir}/def_files/${xios_revision}
+
+for i in $(ls -d test_*/)
+do
+  mkdir -p ${rundir}/def_files/${xios_revision}/${i%%}
+  cp ${i%%}/user_param.json ${rundir}/def_files/${xios_revision}/${i%%}  
+  for j in $(ls -d ${i%%/}/config_*)
+  do
+    mkdir -p ${rundir}/def_files/${xios_revision}/${j%%}
+    cp ${j%%}/setup/all_param.def ${rundir}/def_files/${xios_revision}/${j%%}  
+  done
+  CHMOD ${rundir}/def_files
+done
+
+fi
+
Index: /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/setup.py
===================================================================
--- /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/setup.py	(revision 1844)
+++ /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/setup.py	(revision 1844)
@@ -0,0 +1,142 @@
+import os
+import sys
+import json
+import itertools
+
+from param_list import *
+
+def getlabel(sub_list_element, level):
+    label=""
+    for l in range(level):
+        label = label+sub_list_element[l]+"_"
+    return label
+
+def MySort(sub_list, level):
+    l=len(sub_list)
+    for i in range(0,l):
+        for j in range(0, l-i-1):
+            if(getlabel(sub_list[j], level) > getlabel(sub_list[j+1], level)):
+                tempo = sub_list[j]
+                sub_list[j]= sub_list[j+1] 
+                sub_list[j+1]= tempo 
+    return sub_list
+
+def main() :
+      
+    param_length = len(param_list)
+    param = [""]*param_length
+    
+    
+    f=open("user_param.json", 'r')
+    config_dict = json.load(f)
+    f.close()
+    
+    f=open("default_param.json", 'r')
+    def_config = json.load(f)
+    f.close()
+        
+    default_config=[""]*param_length
+    f=open("default_param.py", "w")
+    for i in range(param_length):
+        default_config[i] = str(def_config[0][param_list[i]])
+        f.write(param_list[i]+" = "+str(def_config[0][param_list[i]])+"\n")
+    f.close()
+        
+    config_list=[]
+    
+    for config_set in config_dict:
+        sub_list=[]
+        for l in range(param_length):
+            if param_list[l] in config_set:
+                param[l]=config_set[param_list[l]].split(" ")
+                for i in range(len(param[l])) :
+                    param[l][i] = [str(param[l][i])]
+            else :
+                param[l]=['_']
+        
+        for l in range(len(param_list)):
+            if not sub_list:
+                sub_list = list(param[l])
+            else:
+                tmp_sub_list = list(itertools.product(sub_list,list(param[l])))
+                sub_list=[]
+                for i in range(len(tmp_sub_list)):
+                    sub_list.append(list(tmp_sub_list[i]))
+                for i in range(len(sub_list)):
+                    sub_list[i] = list(itertools.chain(*sub_list[i]))
+                
+        for i in range(len(sub_list)):    
+            config_list.append(sub_list[i])
+            
+            
+        param=[""]*param_length
+        
+    config_list=MySort(config_list, param_length)
+    
+    
+    for i in range(len(config_list)):
+        print(config_list[i])
+        
+        
+    full_config_list=[[]]*len(config_list)
+    
+    for i in range(len(config_list)):
+        full_config_list[i] = list(config_list[i])
+        for j in range(param_length):
+            if full_config_list[i][j]=='_':
+                full_config_list[i][j] = default_config[j]
+        # print(full_config_list[i])
+        
+    for i in range(len(config_list)):
+        f=open("user_param.py."+repr(i), "w")
+        for j in range(param_length):
+            if not config_list[i][j] == "_":
+                f.write(param_list[j]+" = "+config_list[i][j]+"\n")
+        f.close()
+    
+    f=open("CMakeLists.txt", "w")
+    f.write("##############################\n")
+    f.write("# file generated by setup.py #\n")
+    f.write("#      DO NOT modify         #\n")
+    f.write("##############################\n\n")
+    f.write("cmake_minimum_required(VERSION 2.8.12.2)\n\n")
+    f.write("project(generic_testcase)\n\n")
+    f.write("find_package(PythonInterp REQUIRED)\n\n")
+    f.write("enable_testing()\n\n")
+    dirpath = os.getcwd()
+    foldername = os.path.basename(os.getcwd())
+    print(foldername)
+    
+    for x in range(len(config_list)):
+    	f.write("add_test( NAME "+foldername+"_config"+repr(x)+'\n')
+        f.write("          COMMAND ${PYTHON_EXECUTABLE}\n")
+        f.write("          ${CMAKE_CURRENT_BINARY_DIR}/run_test_"+repr(x)+".py\n")
+        f.write("          "+foldername+"_config"+repr(x)+")\n\n")
+        f.write("set_tests_properties("+foldername+"_config"+repr(x)+" PROPERTIES\n")
+        f.write("                      FAIL_REGULAR_EXPRESSION \"check.py failed;execution failed;failed;setup.sh failed; machine unknown\")\n\n")
+
+        g=open("run_test_"+repr(x)+".py", "w")
+        g.write("##############################\n")
+        g.write("# file generated by setup.py #\n")
+        g.write("#      DO NOT modify         #\n")
+        g.write("##############################\n\n")
+        g.write("import os\n")
+        g.write("import sys\n")
+        g.write("import subprocess\n")
+		
+
+        g.write("\ndef main():\n")
+        g.write("	os.system(\'rm -f user_param.py\')\n")
+        g.write("	os.system(\'cp user_param.py."+repr(x)+" user_param.py\')\n")
+        g.write("	os.system(\'./run_sub_test.sh\')\n")
+        g.write("if __name__== \"__main__\":\n")
+        g.write("	main()\n")
+        g.close()
+		 
+    f.close()
+
+if __name__== "__main__":
+  main()
+
+
+
Index: /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/test_axis_algo/checkfile.def
===================================================================
--- /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/test_axis_algo/checkfile.def	(revision 1844)
+++ /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/test_axis_algo/checkfile.def	(revision 1844)
@@ -0,0 +1,3 @@
+all
+atm_output_zoom.nc
+#atm_output_inverse.nc
Index: /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/test_axis_algo/context_atm.xml
===================================================================
--- /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/test_axis_algo/context_atm.xml	(revision 1844)
+++ /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/test_axis_algo/context_atm.xml	(revision 1844)
@@ -0,0 +1,443 @@
+<!-- -->
+<context id="atm">
+  
+  <calendar type="Gregorian" time_origin="1850-01-01 00:00:00" /> 
+  
+  <domain_definition>
+    <domain id="domain" />
+    <domain id="other_domain" />
+  </domain>
+  
+  <axis_definition>
+    <axis id="axis" />
+    <axis id="axis_dup" />
+    <axis id="domain_X" />
+    <axis id="domain_Y" />
+    <axis id="ensemble" />
+
+    <axis id="other_axis" />
+    <axis id="other_domain_X" />
+    <axis id="other_domain_Y" />
+    <axis id="other_ensemble" />
+  </axis_definition>
+
+  <axis_definition>
+    <axis id="axis_zoom" axis_ref="axis">
+        <zoom_axis begin="0" n="5"/>
+    </axis>
+
+    <axis id="domain_X_zoom" axis_ref="domain_X">
+        <zoom_axis begin="0" n="10"/>
+    </axis>
+
+    <axis id="domain_Y_zoom" axis_ref="domain_Y">
+        <zoom_axis begin="3" n="5"/>
+    </axis>
+
+    <axis id="domain_Y_inverse" axis_ref="domain_Y">
+        <inverse_axis />
+    </axis>
+
+  </axis_definition>
+
+  <scalar_definition>
+    <scalar id="scalar" /> 
+  </scalar_definition>
+  
+  
+  
+  <grid_definition>
+    
+    <grid id="grid3D">
+      <domain domain_ref="domain" />
+      <axis axis_ref="axis" />
+    </grid>
+    
+    <grid id="grid2D">
+      <domain domain_ref="domain" />
+    </grid>
+
+    <grid id="grid1D">
+      <axis axis_ref="axis" />
+    </grid>
+
+    <grid id="grid_X">
+      <axis axis_ref="domain_X" />
+    </grid>
+
+     <grid id="grid_X_zoom">
+      <axis axis_ref="domain_X_zoom" />
+    </grid>
+
+    <grid id="grid_Y">
+      <axis axis_ref="domain_Y" />
+    </grid>
+
+    <grid id="grid_Y_inverse">
+      <axis axis_ref="domain_Y_inverse" />
+    </grid>
+
+    <grid id="grid_XY">
+      <axis axis_ref="domain_X" />
+      <axis axis_ref="domain_Y" />
+    </grid>
+
+    <grid id="grid_XYZ">
+      <axis axis_ref="domain_X" />
+      <axis axis_ref="domain_Y" />
+      <axis axis_ref="axis" />
+    </grid>
+
+    <grid id="grid_XZ">
+      <axis axis_ref="domain_X" />
+      <axis axis_ref="axis" />
+    </grid>
+
+    <grid id="grid_YZ">
+      <axis axis_ref="domain_Y" />
+      <axis axis_ref="axis" />
+    </grid>
+
+
+    <grid id="grid3D_W">
+      <domain domain_ref="domain" />
+      <axis axis_ref="axis" />
+      <axis axis_ref="ensemble" />
+    </grid>
+    
+    <grid id="grid2D_W">
+      <domain domain_ref="domain" />
+      <axis axis_ref="ensemble" />
+    </grid>
+
+    <grid id="grid1D_W">
+      <axis axis_ref="axis" />
+      <axis axis_ref="ensemble" />
+    </grid>
+
+    <grid id="grid_XW">
+      <axis axis_ref="domain_X" />
+      <axis axis_ref="ensemble" />
+    </grid>
+
+    <grid id="grid_YW">
+      <axis axis_ref="domain_Y" />
+      <axis axis_ref="ensemble" />
+    </grid>
+
+    <grid id="grid_XYW">
+      <axis axis_ref="domain_X" />
+      <axis axis_ref="domain_Y" />
+      <axis axis_ref="ensemble" />
+    </grid>
+
+    <grid id="grid_XYZW">
+      <axis axis_ref="domain_X" />
+      <axis axis_ref="domain_Y" />
+      <axis axis_ref="axis" />
+      <axis axis_ref="ensemble" />
+    </grid>
+
+    <grid id="grid_XZW">
+      <axis axis_ref="domain_X" />
+      <axis axis_ref="axis" />
+      <axis axis_ref="ensemble" />
+    </grid>
+
+    <grid id="grid_YZW">
+      <axis axis_ref="domain_Y" />
+      <axis axis_ref="axis" />
+      <axis axis_ref="ensemble" />
+    </grid>
+
+
+    <grid id="grid_XY_zoom_Y">
+      <axis axis_ref="domain_X" />
+      <axis axis_ref="domain_Y_zoom" />
+    </grid>
+
+    <grid id="grid_XY_zoom_X">
+      <axis axis_ref="domain_X_zoom" />
+      <axis axis_ref="domain_Y" />
+    </grid>
+
+
+
+ 
+ 
+ 
+    <grid id="other_grid3D">
+      <domain domain_ref="other_domain" />
+      <axis axis_ref="other_axis" />
+    </grid>
+    
+    <grid id="other_grid2D">
+      <domain domain_ref="other_domain" />
+    </grid>
+
+    <grid id="other_grid1D">
+      <axis axis_ref="other_axis" />
+    </grid>
+
+    <grid id="other_grid_X">
+      <axis axis_ref="other_domain_X" />
+    </grid>
+
+    <grid id="other_grid_Y">
+      <axis axis_ref="other_domain_Y" />
+    </grid>
+
+    <grid id="other_grid_XY">
+      <axis axis_ref="other_domain_X" />
+      <axis axis_ref="other_domain_Y" />
+    </grid>
+
+    <grid id="other_grid_XYZ">
+      <axis axis_ref="other_domain_X" />
+      <axis axis_ref="other_domain_Y" />
+      <axis axis_ref="other_axis" />
+    </grid>
+
+    <grid id="other_grid_XZ">
+      <axis axis_ref="other_domain_X" />
+      <axis axis_ref="other_axis" />
+    </grid>
+
+    <grid id="other_grid_YZ">
+      <axis axis_ref="other_domain_Y" />
+      <axis axis_ref="other_axis" />
+    </grid>
+
+
+    <grid id="other_grid3D_W">
+      <domain domain_ref="other_domain" />
+      <axis axis_ref="other_axis" />
+      <axis axis_ref="other_ensemble" />
+    </grid>
+    
+    <grid id="other_grid2D_W">
+      <domain domain_ref="other_domain" />
+      <axis axis_ref="other_ensemble" />
+    </grid>
+
+    <grid id="other_grid1D_W">
+      <axis axis_ref="other_axis" />
+      <axis axis_ref="other_ensemble" />
+    </grid>
+
+    <grid id="other_grid_XW">
+      <axis axis_ref="other_domain_X" />
+      <axis axis_ref="other_ensemble" />
+    </grid>
+
+    <grid id="other_grid_YW">
+      <axis axis_ref="other_domain_Y" />
+      <axis axis_ref="other_ensemble" />
+    </grid>
+
+    <grid id="other_grid_XYW">
+      <axis axis_ref="other_domain_X" />
+      <axis axis_ref="other_domain_Y" />
+      <axis axis_ref="other_ensemble" />
+    </grid>
+
+    <grid id="other_grid_XYZW">
+      <axis axis_ref="other_domain_X" />
+      <axis axis_ref="other_domain_Y" />
+      <axis axis_ref="other_axis" />
+      <axis axis_ref="other_ensemble" />
+    </grid>
+
+    <grid id="other_grid_XZW">
+      <axis axis_ref="other_domain_X" />
+      <axis axis_ref="other_axis" />
+      <axis axis_ref="other_ensemble" />
+    </grid>
+
+    <grid id="other_grid_YZW">
+      <axis axis_ref="other_domain_Y" />
+      <axis axis_ref="other_axis" />
+      <axis axis_ref="other_ensemble" />
+    </grid>
+
+
+
+
+
+
+
+
+
+
+    <grid id="grid_vert_reduce">
+      <domain domain_ref="domain" />
+      <scalar >
+        <reduce_axis operation="sum" />
+      </scalar>
+    </grid>
+
+    <grid id="grid_horiz_reduce">
+      <scalar >
+        <reduce_domain operation="sum" />
+      </scalar>
+      <axis axis_ref="axis" />
+    </grid>
+      
+    <grid id="grid_zoom_vert">
+      <domain domain_ref="domain" />
+      <axis axis_ref="axis_zoom" />
+    </grid>
+
+    <grid id="grid_zoom_vert_sum">
+      <scalar >
+        <reduce_domain operation="sum" />
+      </scalar>
+      <axis axis_ref="axis_zoom" />
+    </grid>
+
+   <grid id="grid_lat">
+       <axis axis_ref="domain_Y">
+         <reduce_domain direction="iDir" operation="sum"/> 
+       </axis>
+       <axis axis_ref="axis" />
+    </grid>
+    
+
+    <grid id="grid3D_invert">
+      <domain domain_ref="domain">
+        <reorder_domain invert_lat="true" />
+      </domain>
+      <axis axis_ref="axis" />
+    </grid>
+    
+    <grid id="grid2D_invert">
+      <domain domain_ref="domain">
+        <reorder_domain invert_lat="true" shift_lon_fraction="0.5" min_lon="0" max_lon="360"/>
+      </domain>
+    </grid>
+
+    
+  </grid_definition>
+  
+  
+  <field_definition level="1" prec="8" operation="instant" freq_op="1ts" enabled=".true." default_value="1.e+20" detect_missing_value="true">
+    <field id="field2D" grid_ref="grid2D" build_workflow_graph="false" />
+    <field id="field3D" grid_ref="grid3D" build_workflow_graph="true"  />
+    <field id="pressure" grid_ref="grid3D"  />
+    <field id="field3D_recv" read_access="true" grid_ref="grid3D"  field_ref="field3D" />
+    <field id="field3D_resend" grid_ref="grid3D" />
+
+    <field id="field_X" grid_ref="grid_X" build_workflow_graph="false" />
+    <field id="field_Y" grid_ref="grid_Y" build_workflow_graph="false" />
+    <field id="field_Z" grid_ref="grid1D" build_workflow_graph="false" />
+    <field id="field_XY" grid_ref="grid_XY" />
+    <field id="field_XYZ" grid_ref="grid_XYZ" />
+    <field id="field_XZ" grid_ref="grid_XZ" />
+    <field id="field_YZ" grid_ref="grid_YZ" />
+
+    <field id="field_zoom_vert" field_ref="field3D" grid_ref="grid_zoom_vert"  />
+    <field id="field_zoom_vert_sum" field_ref="field_zoom_vert" grid_ref="grid_zoom_vert_sum"  />
+
+
+
+    <field id="field2D_W" grid_ref="grid2D_W"/>
+    <field id="field3D_W" grid_ref="grid3D_W"  />
+    <field id="pressure_W" grid_ref="grid3D_W"  />
+    <field id="field3D_recv_W" read_access="true" grid_ref="grid3D_W"  field_ref="field3D_W"/>
+    <field id="field3D_resend_W" grid_ref="grid3D_W" />
+
+    <field id="field_XW" grid_ref="grid_XW" />
+    <field id="field_YW" grid_ref="grid_YW" />
+    <field id="field_ZW" grid_ref="grid1D_W" />
+    <field id="field_XYW" grid_ref="grid_XYW" />
+    <field id="field_XYZW" grid_ref="grid_XYZW" />
+    <field id="field_XZW" grid_ref="grid_XZW" />
+    <field id="field_YZW" grid_ref="grid_YZW" />
+
+
+
+
+    <field id="other_field2D" grid_ref="other_grid2D"/>
+    <field id="other_field3D" grid_ref="other_grid3D"  />
+    <field id="other_pressure" grid_ref="other_grid3D"  />
+    <field id="other_field3D_recv" read_access="true" grid_ref="other_grid3D"  field_ref="other_field3D"/>
+    <field id="other_field3D_resend" grid_ref="other_grid3D" />
+
+    <field id="other_field_X" grid_ref="other_grid_X" />
+    <field id="other_field_Y" grid_ref="other_grid_Y" />
+    <field id="other_field_Z" grid_ref="other_grid1D" />
+    <field id="other_field_XY" grid_ref="other_grid_XY" />
+    <field id="other_field_XYZ" grid_ref="other_grid_XYZ" />
+    <field id="other_field_XZ" grid_ref="other_grid_XZ" />
+    <field id="other_field_YZ" grid_ref="other_grid_YZ" />
+
+    <field id="other_field2D_W" grid_ref="other_grid2D_W"/>
+    <field id="other_field3D_W" grid_ref="other_grid3D_W"  />
+    <field id="other_pressure_W" grid_ref="other_grid3D_W"  />
+    <field id="other_field3D_recv_W" read_access="true" grid_ref="other_grid3D_W"  field_ref="other_field3D_W"/>
+    <field id="other_field3D_resend_W" grid_ref="other_grid3D_W" />
+
+    <field id="other_field_XW" grid_ref="other_grid_XW" />
+    <field id="other_field_YW" grid_ref="other_grid_YW" />
+    <field id="other_field_ZW" grid_ref="other_grid1D_W" />
+    <field id="other_field_XYW" grid_ref="other_grid_XYW" />
+    <field id="other_field_XYZW" grid_ref="other_grid_XYZW" />
+    <field id="other_field_XZW" grid_ref="other_grid_XZW" />
+    <field id="other_field_YZW" grid_ref="other_grid_YZW" />
+
+
+
+
+    
+    
+  </field_definition>
+  
+
+  <file_definition  type="one_file" >
+  
+
+     <file id="atm_output_zoom" output_freq="1ts" enabled="true">
+       <field field_ref="field_XY" grid_ref="grid_XY_zoom_Y" operation="instant" enabled="true"/>
+       <!-- <field field_ref="field_Y" grid_ref="grid_Y_inverse" operation="instant" enabled="true"/> -->
+     </file>
+
+
+
+    <file id="atm_output_other" output_freq="1ts"  enabled="false">
+       <field field_ref="other_field3D" enabled="false"/>
+       <field field_ref="other_field2D" enabled="true"/> 
+       <field field_ref="other_field_X" enabled="false"/>
+       <field field_ref="other_field_Y" enabled="false"/>
+       <field field_ref="other_field_XY" enabled="false"/>
+       <field field_ref="other_field_Z" enabled="false"/>
+       <field field_ref="other_field_XYZ" enabled="false"/>
+       <field field_ref="other_field_XZ" enabled="false"/>
+       <field field_ref="other_field_YZ" enabled="false"/>
+    </file>
+
+    <file id="atm_output_W" output_freq="1ts" enabled="false">
+       <field field_ref="field3D_W" enabled="true"/>
+       <field field_ref="field2D_W" enabled="true"/> 
+       <field field_ref="field_XW" enabled="true"/>
+       <field field_ref="field_YW" enabled="true"/>
+       <field field_ref="field_XYW" enabled="true"/>
+       <field field_ref="field_ZW" enabled="true"/>
+       <field field_ref="field_XYZW" enabled="true"/>
+       <field field_ref="field_XZW" enabled="true"/>
+       <field field_ref="field_YZW" enabled="true"/>
+    </file>
+    
+
+    <file id="atm_output_reorder" output_freq="1ts" enabled="false" >
+       <field field_ref="field2D" grid_ref="grid2D_invert" enabled="true"/>
+    </file>
+    
+    <file id="test_grid_lat" output_freq="1ts" enabled="false">
+      <field field_ref="field3D" operation="instant" />
+      <field id="field_reduce_lat" field_ref="field3D" grid_ref="grid_lat" operation="instant" />
+    </file>
+    
+  </file_definition>
+  
+  
+</context>
Index: /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/test_axis_algo/user_param.json
===================================================================
--- /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/test_axis_algo/user_param.json	(revision 1844)
+++ /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/test_axis_algo/user_param.json	(revision 1844)
@@ -0,0 +1,14 @@
+[
+	{
+		"ATMdomain": "'lmdz'",
+		"UsingServer2": "'true'",
+		"NumberServers": "2 4",
+		"RatioServer2": "50"
+	},
+	{
+		"UsingServer2": "'false'",
+		"NumberServers": "6 8",
+		"ATMdomain": "'lmdz'",
+		"RatioServer2": "50"
+	}
+]
Index: /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/test_domain_algo/checkfile.def
===================================================================
--- /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/test_domain_algo/checkfile.def	(revision 1844)
+++ /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/test_domain_algo/checkfile.def	(revision 1844)
@@ -0,0 +1,12 @@
+#all
+
+atm_output.nc
+
+atm_output_expand.nc
+
+
+atm_output_extract.nc
+
+atm_output_interpolate.nc
+
+atm_output_zoom.nc
Index: /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/test_domain_algo/context_atm.xml
===================================================================
--- /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/test_domain_algo/context_atm.xml	(revision 1844)
+++ /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/test_domain_algo/context_atm.xml	(revision 1844)
@@ -0,0 +1,447 @@
+<!-- -->
+<context id="atm">
+  
+  <calendar type="Gregorian" time_origin="1850-01-01 00:00:00" /> 
+  
+  <domain_definition>
+    <domain id="domain" />
+    <domain id="other_domain" />
+  </domain>
+  
+  <axis_definition>
+    <axis id="axis" />
+    <axis id="axis_dup" />
+    <axis id="domain_X" />
+    <axis id="domain_Y" />
+    <axis id="ensemble" />
+
+    <axis id="other_axis" />
+    <axis id="other_domain_X" />
+    <axis id="other_domain_Y" />
+    <axis id="other_ensemble" />
+  </axis_definition>
+
+  <axis_definition>
+    <axis id="axis_zoom" axis_ref="axis">
+        <zoom_axis begin="0" n="5"/>
+    </axis>
+    <axis id="domain_X_zoom" axis_ref="domain_X">
+        <zoom_axis begin="0" n="1"/>
+    </axis>
+    <axis id="domain_Y_zoom" axis_ref="domain_Y">
+        <zoom_axis begin="3" n="1"/>
+    </axis>
+  </axis_definition>
+
+  <scalar_definition>
+    <scalar id="scalar" /> 
+  </scalar_definition>
+  
+  
+  
+  <grid_definition>
+    
+    <grid id="grid3D">
+      <domain domain_ref="domain" />
+      <axis axis_ref="axis" />
+    </grid>
+    
+    <grid id="grid2D">
+      <domain domain_ref="domain" />
+    </grid>
+
+    <grid id="grid1D">
+      <axis axis_ref="axis" />
+    </grid>
+
+    <grid id="grid_X">
+      <axis axis_ref="domain_X" />
+    </grid>
+
+     <grid id="grid_X_zoom">
+      <axis axis_ref="domain_X_zoom" />
+    </grid>
+
+    <grid id="grid_Y">
+      <axis axis_ref="domain_Y" />
+    </grid>
+
+    <grid id="grid_XY">
+      <axis axis_ref="domain_X" />
+      <axis axis_ref="domain_Y" />
+    </grid>
+
+    <grid id="grid_XYZ">
+      <axis axis_ref="domain_X" />
+      <axis axis_ref="domain_Y" />
+      <axis axis_ref="axis" />
+    </grid>
+
+    <grid id="grid_XZ">
+      <axis axis_ref="domain_X" />
+      <axis axis_ref="axis" />
+    </grid>
+
+    <grid id="grid_YZ">
+      <axis axis_ref="domain_Y" />
+      <axis axis_ref="axis" />
+    </grid>
+
+
+    <grid id="grid3D_W">
+      <domain domain_ref="domain" />
+      <axis axis_ref="axis" />
+      <axis axis_ref="ensemble" />
+    </grid>
+    
+    <grid id="grid2D_W">
+      <domain domain_ref="domain" />
+      <axis axis_ref="ensemble" />
+    </grid>
+
+    <grid id="grid1D_W">
+      <axis axis_ref="axis" />
+      <axis axis_ref="ensemble" />
+    </grid>
+
+    <grid id="grid_XW">
+      <axis axis_ref="domain_X" />
+      <axis axis_ref="ensemble" />
+    </grid>
+
+    <grid id="grid_YW">
+      <axis axis_ref="domain_Y" />
+      <axis axis_ref="ensemble" />
+    </grid>
+
+    <grid id="grid_XYW">
+      <axis axis_ref="domain_X" />
+      <axis axis_ref="domain_Y" />
+      <axis axis_ref="ensemble" />
+    </grid>
+
+    <grid id="grid_XYZW">
+      <axis axis_ref="domain_X" />
+      <axis axis_ref="domain_Y" />
+      <axis axis_ref="axis" />
+      <axis axis_ref="ensemble" />
+    </grid>
+
+    <grid id="grid_XZW">
+      <axis axis_ref="domain_X" />
+      <axis axis_ref="axis" />
+      <axis axis_ref="ensemble" />
+    </grid>
+
+    <grid id="grid_YZW">
+      <axis axis_ref="domain_Y" />
+      <axis axis_ref="axis" />
+      <axis axis_ref="ensemble" />
+    </grid>
+
+
+    <grid id="grid_XY_zoom_Y">
+      <axis axis_ref="domain_X" />
+      <axis axis_ref="domain_Y_zoom" />
+    </grid>
+
+    <grid id="grid_XY_zoom_X">
+      <axis axis_ref="domain_X_zoom" />
+      <axis axis_ref="domain_Y" />
+
+    </grid>
+
+ 
+ 
+ 
+ 
+ 
+    <grid id="other_grid3D">
+      <domain domain_ref="other_domain" />
+      <axis axis_ref="other_axis" />
+    </grid>
+    
+    <grid id="other_grid2D">
+      <domain domain_ref="other_domain" />
+    </grid>
+
+    <grid id="other_grid1D">
+      <axis axis_ref="other_axis" />
+    </grid>
+
+    <grid id="other_grid_X">
+      <axis axis_ref="other_domain_X" />
+    </grid>
+
+    <grid id="other_grid_Y">
+      <axis axis_ref="other_domain_Y" />
+    </grid>
+
+    <grid id="other_grid_XY">
+      <axis axis_ref="other_domain_X" />
+      <axis axis_ref="other_domain_Y" />
+    </grid>
+
+    <grid id="other_grid_XYZ">
+      <axis axis_ref="other_domain_X" />
+      <axis axis_ref="other_domain_Y" />
+      <axis axis_ref="other_axis" />
+    </grid>
+
+    <grid id="other_grid_XZ">
+      <axis axis_ref="other_domain_X" />
+      <axis axis_ref="other_axis" />
+    </grid>
+
+    <grid id="other_grid_YZ">
+      <axis axis_ref="other_domain_Y" />
+      <axis axis_ref="other_axis" />
+    </grid>
+
+
+    <grid id="other_grid3D_W">
+      <domain domain_ref="other_domain" />
+      <axis axis_ref="other_axis" />
+      <axis axis_ref="other_ensemble" />
+    </grid>
+    
+    <grid id="other_grid2D_W">
+      <domain domain_ref="other_domain" />
+      <axis axis_ref="other_ensemble" />
+    </grid>
+
+    <grid id="other_grid1D_W">
+      <axis axis_ref="other_axis" />
+      <axis axis_ref="other_ensemble" />
+    </grid>
+
+    <grid id="other_grid_XW">
+      <axis axis_ref="other_domain_X" />
+      <axis axis_ref="other_ensemble" />
+    </grid>
+
+    <grid id="other_grid_YW">
+      <axis axis_ref="other_domain_Y" />
+      <axis axis_ref="other_ensemble" />
+    </grid>
+
+    <grid id="other_grid_XYW">
+      <axis axis_ref="other_domain_X" />
+      <axis axis_ref="other_domain_Y" />
+      <axis axis_ref="other_ensemble" />
+    </grid>
+
+    <grid id="other_grid_XYZW">
+      <axis axis_ref="other_domain_X" />
+      <axis axis_ref="other_domain_Y" />
+      <axis axis_ref="other_axis" />
+      <axis axis_ref="other_ensemble" />
+    </grid>
+
+    <grid id="other_grid_XZW">
+      <axis axis_ref="other_domain_X" />
+      <axis axis_ref="other_axis" />
+      <axis axis_ref="other_ensemble" />
+    </grid>
+
+    <grid id="other_grid_YZW">
+      <axis axis_ref="other_domain_Y" />
+      <axis axis_ref="other_axis" />
+      <axis axis_ref="other_ensemble" />
+    </grid>
+
+
+
+
+
+
+
+
+
+
+    <grid id="grid_vert_reduce">
+      <domain domain_ref="domain" />
+      <scalar >
+        <reduce_axis operation="sum" />
+      </scalar>
+    </grid>
+
+    <grid id="grid_horiz_reduce">
+      <scalar >
+        <reduce_domain operation="sum" />
+      </scalar>
+      <axis axis_ref="axis" />
+    </grid>
+      
+    <grid id="grid_zoom_vert">
+      <domain domain_ref="domain" />
+      <axis axis_ref="axis_zoom" />
+    </grid>
+
+    <grid id="grid_zoom_vert_sum">
+      <scalar >
+        <reduce_domain operation="sum" />
+      </scalar>
+      <axis axis_ref="axis_zoom" />
+    </grid>
+
+   <grid id="grid_lat">
+       <axis axis_ref="domain_Y">
+         <reduce_domain direction="iDir" operation="sum"/> 
+       </axis>
+       <axis axis_ref="axis" />
+    </grid>
+    
+
+    <grid id="grid3D_invert">
+      <domain domain_ref="domain">
+        <reorder_domain invert_lat="true" />
+      </domain>
+      <axis axis_ref="axis" />
+    </grid>
+    
+    <grid id="grid2D_invert">
+      <domain domain_ref="domain">
+        <reorder_domain invert_lat="true" shift_lon_fraction="0.5" min_lon="0" max_lon="360"/>
+      </domain>
+    </grid>
+
+    
+  </grid_definition>
+  
+  
+  <field_definition level="1" prec="8" operation="instant" freq_op="1ts" enabled=".true." default_value="1.e+20" detect_missing_value="true">
+    <field id="field2D" grid_ref="grid2D" build_workflow_graph="false" />
+    <field id="field3D" grid_ref="grid3D" build_workflow_graph="true"  />
+    <field id="pressure" grid_ref="grid3D"  />
+    <field id="field3D_recv" read_access="true" grid_ref="grid3D"  field_ref="field3D" />
+    <field id="field3D_resend" grid_ref="grid3D" />
+
+    <field id="field_X" grid_ref="grid_X" build_workflow_graph="false" />
+    <field id="field_Y" grid_ref="grid_Y" build_workflow_graph="false" />
+    <field id="field_Z" grid_ref="grid1D" build_workflow_graph="false" />
+    <field id="field_XY" grid_ref="grid_XY" />
+    <field id="field_XYZ" grid_ref="grid_XYZ" />
+    <field id="field_XZ" grid_ref="grid_XZ" />
+    <field id="field_YZ" grid_ref="grid_YZ" />
+
+    <field id="field_zoom_vert" field_ref="field3D" grid_ref="grid_zoom_vert"  />
+    <field id="field_zoom_vert_sum" field_ref="field_zoom_vert" grid_ref="grid_zoom_vert_sum"  />
+
+
+
+    <field id="field2D_W" grid_ref="grid2D_W"/>
+    <field id="field3D_W" grid_ref="grid3D_W"  />
+    <field id="pressure_W" grid_ref="grid3D_W"  />
+    <field id="field3D_recv_W" read_access="true" grid_ref="grid3D_W"  field_ref="field3D_W"/>
+    <field id="field3D_resend_W" grid_ref="grid3D_W" />
+
+    <field id="field_XW" grid_ref="grid_XW" />
+    <field id="field_YW" grid_ref="grid_YW" />
+    <field id="field_ZW" grid_ref="grid1D_W" />
+    <field id="field_XYW" grid_ref="grid_XYW" />
+    <field id="field_XYZW" grid_ref="grid_XYZW" />
+    <field id="field_XZW" grid_ref="grid_XZW" />
+    <field id="field_YZW" grid_ref="grid_YZW" />
+
+
+
+
+    <field id="other_field2D" grid_ref="other_grid2D"/>
+    <field id="other_field3D" grid_ref="other_grid3D"  />
+    <field id="other_pressure" grid_ref="other_grid3D"  />
+    <field id="other_field3D_recv" read_access="true" grid_ref="other_grid3D"  field_ref="other_field3D"/>
+    <field id="other_field3D_resend" grid_ref="other_grid3D" />
+
+    <field id="other_field_X" grid_ref="other_grid_X" />
+    <field id="other_field_Y" grid_ref="other_grid_Y" />
+    <field id="other_field_Z" grid_ref="other_grid1D" />
+    <field id="other_field_XY" grid_ref="other_grid_XY" />
+    <field id="other_field_XYZ" grid_ref="other_grid_XYZ" />
+    <field id="other_field_XZ" grid_ref="other_grid_XZ" />
+    <field id="other_field_YZ" grid_ref="other_grid_YZ" />
+
+    <field id="other_field2D_W" grid_ref="other_grid2D_W"/>
+    <field id="other_field3D_W" grid_ref="other_grid3D_W"  />
+    <field id="other_pressure_W" grid_ref="other_grid3D_W"  />
+    <field id="other_field3D_recv_W" read_access="true" grid_ref="other_grid3D_W"  field_ref="other_field3D_W"/>
+    <field id="other_field3D_resend_W" grid_ref="other_grid3D_W" />
+
+    <field id="other_field_XW" grid_ref="other_grid_XW" />
+    <field id="other_field_YW" grid_ref="other_grid_YW" />
+    <field id="other_field_ZW" grid_ref="other_grid1D_W" />
+    <field id="other_field_XYW" grid_ref="other_grid_XYW" />
+    <field id="other_field_XYZW" grid_ref="other_grid_XYZW" />
+    <field id="other_field_XZW" grid_ref="other_grid_XZW" />
+    <field id="other_field_YZW" grid_ref="other_grid_YZW" />
+
+
+
+
+    
+    
+  </field_definition>
+  
+
+  <file_definition  type="one_file" >
+    
+    <file id="atm_output" output_freq="1ts" type="one_file" enabled="true">
+       <!-- <field id="id_fieldXY" field_ref="field_XY" operation="once" enabled="true"/> -->
+       <field field_ref="field_X" operation="instant" enabled="true"/>
+    </file>
+
+    <file id="atm_output_expand" output_freq="1ts" enabled="true">
+       <field field_ref="field_X" operation="instant" enabled="true"/>
+    </file>
+
+    <file id="atm_output_extract" output_freq="1ts" enabled="true">
+       <field field_ref="field_X" operation="instant" enabled="true"/>
+    </file>
+
+    <file id="atm_output_interpolate" output_freq="1ts" enabled="true">
+       <field field_ref="field_X" operation="instant" enabled="true"/>
+    </file>
+
+    <file id="atm_output_zoom" output_freq="1ts" enabled="true">
+       <field field_ref="field_X" operation="instant" enabled="true"/>
+    </file>
+
+
+    <file id="atm_output_other" output_freq="1ts"  enabled="false">
+       <field field_ref="other_field3D" enabled="false"/>
+       <field field_ref="other_field2D" enabled="true"/> 
+       <field field_ref="other_field_X" enabled="false"/>
+       <field field_ref="other_field_Y" enabled="false"/>
+       <field field_ref="other_field_XY" enabled="false"/>
+       <field field_ref="other_field_Z" enabled="false"/>
+       <field field_ref="other_field_XYZ" enabled="false"/>
+       <field field_ref="other_field_XZ" enabled="false"/>
+       <field field_ref="other_field_YZ" enabled="false"/>
+    </file>
+
+    <file id="atm_output_W" output_freq="1ts" enabled="false">
+       <field field_ref="field3D_W" enabled="true"/>
+       <field field_ref="field2D_W" enabled="true"/> 
+       <field field_ref="field_XW" enabled="true"/>
+       <field field_ref="field_YW" enabled="true"/>
+       <field field_ref="field_XYW" enabled="true"/>
+       <field field_ref="field_ZW" enabled="true"/>
+       <field field_ref="field_XYZW" enabled="true"/>
+       <field field_ref="field_XZW" enabled="true"/>
+       <field field_ref="field_YZW" enabled="true"/>
+    </file>
+    
+
+    <file id="atm_output_reorder" output_freq="1ts" enabled="false" >
+       <field field_ref="field2D" grid_ref="grid2D_invert" enabled="true"/>
+    </file>
+    
+    <file id="test_grid_lat" output_freq="1ts" enabled="false">
+      <field field_ref="field3D" operation="instant" />
+      <field id="field_reduce_lat" field_ref="field3D" grid_ref="grid_lat" operation="instant" />
+    </file>
+    
+  </file_definition>
+  
+  
+</context>
Index: /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/test_domain_algo/user_param.json
===================================================================
--- /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/test_domain_algo/user_param.json	(revision 1844)
+++ /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/test_domain_algo/user_param.json	(revision 1844)
@@ -0,0 +1,14 @@
+[
+	{
+		"ATMdomain": "'lmdz'",
+		"UsingServer2": "'true'",
+		"NumberServers": "2 4",
+		"RatioServer2": "50"
+	},
+	{
+		"UsingServer2": "'false'",
+		"NumberServers": "6 8",
+		"ATMdomain": "'lmdz'",
+		"RatioServer2": "50"
+	}
+]
Index: /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/test_function/checkfile.def
===================================================================
--- /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/test_function/checkfile.def	(revision 1844)
+++ /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/test_function/checkfile.def	(revision 1844)
@@ -0,0 +1,3 @@
+
+atm_output.nc
+#atm_output_ensemble.nc
Index: /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/test_function/context_atm.xml
===================================================================
--- /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/test_function/context_atm.xml	(revision 1844)
+++ /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/test_function/context_atm.xml	(revision 1844)
@@ -0,0 +1,431 @@
+<!-- -->
+<context id="atm">
+  
+  <calendar type="Gregorian" time_origin="1850-01-01 00:00:00" /> 
+  
+  <domain_definition>
+    <domain id="domain" />
+    <domain id="other_domain" />
+  </domain>
+  
+  <axis_definition>
+    <axis id="axis" />
+    <axis id="axis_dup" />
+    <axis id="domain_X" />
+    <axis id="domain_Y" />
+    <axis id="ensemble" />
+
+    <axis id="other_axis" />
+    <axis id="other_domain_X" />
+    <axis id="other_domain_Y" />
+    <axis id="other_ensemble" />
+  </axis_definition>
+
+  <axis_definition>
+    <axis id="axis_zoom" axis_ref="axis">
+        <zoom_axis begin="0" n="5"/>
+    </axis>
+  </axis_definition>
+
+  <scalar_definition>
+    <scalar id="scalar" /> 
+  </scalar_definition>
+  
+  
+  
+  <grid_definition>
+    
+    <grid id="grid3D">
+      <domain domain_ref="domain" />
+      <axis axis_ref="axis" />
+    </grid>
+    
+    <grid id="grid2D">
+      <domain domain_ref="domain" />
+    </grid>
+
+    <grid id="grid1D">
+      <axis axis_ref="axis" />
+    </grid>
+
+    <grid id="grid_X">
+      <axis axis_ref="domain_X" />
+    </grid>
+
+    <grid id="grid_Y">
+      <axis axis_ref="domain_Y" />
+    </grid>
+
+    <grid id="grid_XY">
+      <axis axis_ref="domain_X" />
+      <axis axis_ref="domain_Y" />
+    </grid>
+
+    <grid id="grid_XYZ">
+      <axis axis_ref="domain_X" />
+      <axis axis_ref="domain_Y" />
+      <axis axis_ref="axis" />
+    </grid>
+
+    <grid id="grid_XZ">
+      <axis axis_ref="domain_X" />
+      <axis axis_ref="axis" />
+    </grid>
+
+    <grid id="grid_YZ">
+      <axis axis_ref="domain_Y" />
+      <axis axis_ref="axis" />
+    </grid>
+
+
+    <grid id="grid3D_W">
+      <domain domain_ref="domain" />
+      <axis axis_ref="axis" />
+      <axis axis_ref="ensemble" />
+    </grid>
+    
+    <grid id="grid2D_W">
+      <domain domain_ref="domain" />
+      <axis axis_ref="ensemble" />
+    </grid>
+
+    <grid id="grid1D_W">
+      <axis axis_ref="axis" />
+      <axis axis_ref="ensemble" />
+    </grid>
+
+    <grid id="grid_XW">
+      <axis axis_ref="domain_X" />
+      <axis axis_ref="ensemble" />
+    </grid>
+
+    <grid id="grid_YW">
+      <axis axis_ref="domain_Y" />
+      <axis axis_ref="ensemble" />
+    </grid>
+
+    <grid id="grid_XYW">
+      <axis axis_ref="domain_X" />
+      <axis axis_ref="domain_Y" />
+      <axis axis_ref="ensemble" />
+    </grid>
+
+    <grid id="grid_XYZW">
+      <axis axis_ref="domain_X" />
+      <axis axis_ref="domain_Y" />
+      <axis axis_ref="axis" />
+      <axis axis_ref="ensemble" />
+    </grid>
+
+    <grid id="grid_XZW">
+      <axis axis_ref="domain_X" />
+      <axis axis_ref="axis" />
+      <axis axis_ref="ensemble" />
+    </grid>
+
+    <grid id="grid_YZW">
+      <axis axis_ref="domain_Y" />
+      <axis axis_ref="axis" />
+      <axis axis_ref="ensemble" />
+    </grid>
+
+ 
+ 
+ 
+ 
+ 
+    <grid id="other_grid3D">
+      <domain domain_ref="other_domain" />
+      <axis axis_ref="other_axis" />
+    </grid>
+    
+    <grid id="other_grid2D">
+      <domain domain_ref="other_domain" />
+    </grid>
+
+    <grid id="other_grid1D">
+      <axis axis_ref="other_axis" />
+    </grid>
+
+    <grid id="other_grid_X">
+      <axis axis_ref="other_domain_X" />
+    </grid>
+
+    <grid id="other_grid_Y">
+      <axis axis_ref="other_domain_Y" />
+    </grid>
+
+    <grid id="other_grid_XY">
+      <axis axis_ref="other_domain_X" />
+      <axis axis_ref="other_domain_Y" />
+    </grid>
+
+    <grid id="other_grid_XYZ">
+      <axis axis_ref="other_domain_X" />
+      <axis axis_ref="other_domain_Y" />
+      <axis axis_ref="other_axis" />
+    </grid>
+
+    <grid id="other_grid_XZ">
+      <axis axis_ref="other_domain_X" />
+      <axis axis_ref="other_axis" />
+    </grid>
+
+    <grid id="other_grid_YZ">
+      <axis axis_ref="other_domain_Y" />
+      <axis axis_ref="other_axis" />
+    </grid>
+
+
+    <grid id="other_grid3D_W">
+      <domain domain_ref="other_domain" />
+      <axis axis_ref="other_axis" />
+      <axis axis_ref="other_ensemble" />
+    </grid>
+    
+    <grid id="other_grid2D_W">
+      <domain domain_ref="other_domain" />
+      <axis axis_ref="other_ensemble" />
+    </grid>
+
+    <grid id="other_grid1D_W">
+      <axis axis_ref="other_axis" />
+      <axis axis_ref="other_ensemble" />
+    </grid>
+
+    <grid id="other_grid_XW">
+      <axis axis_ref="other_domain_X" />
+      <axis axis_ref="other_ensemble" />
+    </grid>
+
+    <grid id="other_grid_YW">
+      <axis axis_ref="other_domain_Y" />
+      <axis axis_ref="other_ensemble" />
+    </grid>
+
+    <grid id="other_grid_XYW">
+      <axis axis_ref="other_domain_X" />
+      <axis axis_ref="other_domain_Y" />
+      <axis axis_ref="other_ensemble" />
+    </grid>
+
+    <grid id="other_grid_XYZW">
+      <axis axis_ref="other_domain_X" />
+      <axis axis_ref="other_domain_Y" />
+      <axis axis_ref="other_axis" />
+      <axis axis_ref="other_ensemble" />
+    </grid>
+
+    <grid id="other_grid_XZW">
+      <axis axis_ref="other_domain_X" />
+      <axis axis_ref="other_axis" />
+      <axis axis_ref="other_ensemble" />
+    </grid>
+
+    <grid id="other_grid_YZW">
+      <axis axis_ref="other_domain_Y" />
+      <axis axis_ref="other_axis" />
+      <axis axis_ref="other_ensemble" />
+    </grid>
+
+
+
+
+
+
+
+
+
+
+    <grid id="grid_vert_reduce">
+      <domain domain_ref="domain" />
+      <scalar >
+        <reduce_axis operation="sum" />
+      </scalar>
+    </grid>
+
+    <grid id="grid_horiz_reduce">
+      <scalar >
+        <reduce_domain operation="sum" />
+      </scalar>
+      <axis axis_ref="axis" />
+    </grid>
+      
+    <grid id="grid_zoom_vert">
+      <domain domain_ref="domain" />
+      <axis axis_ref="axis_zoom" />
+    </grid>
+
+    <grid id="grid_zoom_vert_sum">
+      <scalar >
+        <reduce_domain operation="sum" />
+      </scalar>
+      <axis axis_ref="axis_zoom" />
+    </grid>
+
+   <grid id="grid_lat">
+       <axis axis_ref="domain_Y">
+         <reduce_domain direction="iDir" operation="sum"/> 
+       </axis>
+       <axis axis_ref="axis" />
+    </grid>
+    
+
+    <grid id="grid3D_invert">
+      <domain domain_ref="domain">
+        <reorder_domain invert_lat="true" />
+      </domain>
+      <axis axis_ref="axis" />
+    </grid>
+    
+    <grid id="grid2D_invert">
+      <domain domain_ref="domain">
+        <reorder_domain invert_lat="true" shift_lon_fraction="0.5" min_lon="0" max_lon="360"/>
+      </domain>
+    </grid>
+
+    
+  </grid_definition>
+  
+  
+  <field_definition level="1" prec="8" operation="instant" freq_op="1ts" enabled=".true." default_value="1.e+20" detect_missing_value="true">
+    <field id="field2D" grid_ref="grid2D" build_workflow_graph="false" />
+    <field id="field3D" grid_ref="grid3D" build_workflow_graph="true"  />
+    <field id="pressure" grid_ref="grid3D"  />
+    <field id="field3D_recv" read_access="true" grid_ref="grid3D"  field_ref="field3D" />
+    <field id="field3D_resend" grid_ref="grid3D" />
+
+    <field id="field_X" grid_ref="grid_X" build_workflow_graph="false" />
+    <field id="field_Y" grid_ref="grid_Y" build_workflow_graph="false" />
+    <field id="field_Z" grid_ref="grid1D" build_workflow_graph="false" />
+    <field id="field_XY" grid_ref="grid_XY" />
+    <field id="field_XYZ" grid_ref="grid_XYZ" />
+    <field id="field_XZ" grid_ref="grid_XZ" />
+    <field id="field_YZ" grid_ref="grid_YZ" />
+
+    <field id="field_zoom_vert" field_ref="field3D" grid_ref="grid_zoom_vert"  />
+    <field id="field_zoom_vert_sum" field_ref="field_zoom_vert" grid_ref="grid_zoom_vert_sum"  />
+
+
+
+    <field id="field2D_W" grid_ref="grid2D_W"/>
+    <field id="field3D_W" grid_ref="grid3D_W"  />
+    <field id="pressure_W" grid_ref="grid3D_W"  />
+    <field id="field3D_recv_W" read_access="true" grid_ref="grid3D_W"  field_ref="field3D_W"/>
+    <field id="field3D_resend_W" grid_ref="grid3D_W" />
+
+    <field id="field_XW" grid_ref="grid_XW" />
+    <field id="field_YW" grid_ref="grid_YW" />
+    <field id="field_ZW" grid_ref="grid1D_W" />
+    <field id="field_XYW" grid_ref="grid_XYW" />
+    <field id="field_XYZW" grid_ref="grid_XYZW" />
+    <field id="field_XZW" grid_ref="grid_XZW" />
+    <field id="field_YZW" grid_ref="grid_YZW" />
+
+
+
+
+    <field id="other_field2D" grid_ref="other_grid2D"/>
+    <field id="other_field3D" grid_ref="other_grid3D"  />
+    <field id="other_pressure" grid_ref="other_grid3D"  />
+    <field id="other_field3D_recv" read_access="true" grid_ref="other_grid3D"  field_ref="other_field3D"/>
+    <field id="other_field3D_resend" grid_ref="other_grid3D" />
+
+    <field id="other_field_X" grid_ref="other_grid_X" />
+    <field id="other_field_Y" grid_ref="other_grid_Y" />
+    <field id="other_field_Z" grid_ref="other_grid1D" />
+    <field id="other_field_XY" grid_ref="other_grid_XY" />
+    <field id="other_field_XYZ" grid_ref="other_grid_XYZ" />
+    <field id="other_field_XZ" grid_ref="other_grid_XZ" />
+    <field id="other_field_YZ" grid_ref="other_grid_YZ" />
+
+    <field id="other_field2D_W" grid_ref="other_grid2D_W"/>
+    <field id="other_field3D_W" grid_ref="other_grid3D_W"  />
+    <field id="other_pressure_W" grid_ref="other_grid3D_W"  />
+    <field id="other_field3D_recv_W" read_access="true" grid_ref="other_grid3D_W"  field_ref="other_field3D_W"/>
+    <field id="other_field3D_resend_W" grid_ref="other_grid3D_W" />
+
+    <field id="other_field_XW" grid_ref="other_grid_XW" />
+    <field id="other_field_YW" grid_ref="other_grid_YW" />
+    <field id="other_field_ZW" grid_ref="other_grid1D_W" />
+    <field id="other_field_XYW" grid_ref="other_grid_XYW" />
+    <field id="other_field_XYZW" grid_ref="other_grid_XYZW" />
+    <field id="other_field_XZW" grid_ref="other_grid_XZW" />
+    <field id="other_field_YZW" grid_ref="other_grid_YZW" />
+
+
+
+
+    
+    
+  </field_definition>
+  
+
+  <file_definition  type="one_file" >
+    
+
+     <file id="atm_output" output_freq="4ts" enabled="true" >
+       
+       <field field_ref="field2D" operation="average" enabled="true"/>
+       <field field_ref="field3D" operation="average" enabled="false"/>
+       <field field_ref="pressure" operation="average" enabled="false"/>
+       <field field_ref="field3D_recv" operation="average" enabled="false"/>
+       <field field_ref="field3D_resend" operation="average" enabled="false"/>
+       
+       <!-- <field field_ref="field_X" operation="average" enabled="true"/>
+       <field field_ref="field_Y" operation="average" enabled="true"/>
+       <field field_ref="field_Z" operation="average" enabled="true"/>
+       <field field_ref="field_XY" operation="average" enabled="true"/>
+       <field field_ref="field_XYZ" operation="average" enabled="true"/>
+       <field field_ref="field_XZ" operation="average" enabled="true"/>
+       <field field_ref="field_YZ" operation="average" enabled="true"/>
+       
+       <field field_ref="field_zoom_vert" operation="average" enabled="true"/>
+       <field field_ref="field_zoom_vert_sum" operation="average" enabled="true"/> -->
+       
+    </file>
+
+
+    <file id="atm_output_ensemble" output_freq="4ts" enabled="false">
+       <field field_ref="field2D_W" operation="average" />
+       <field field_ref="field3D_W" operation="average" />
+       <field field_ref="pressure_W" operation="average" />
+       <field field_ref="field3D_recv_W" operation="average" />
+       <field field_ref="field3D_resend_W" operation="average" />
+
+       <field field_ref="field_XW" operation="average" enabled="false" />
+       <field field_ref="field_YW" operation="average" enabled="false" />
+       <field field_ref="field_XYW" operation="average" enabled="false" />
+       <field field_ref="field_ZW" operation="average" enabled="false" />
+       <field field_ref="field_XYZW" operation="average" enabled="false" />
+       <field field_ref="field_XZW" operation="average" enabled="false" />
+       <field field_ref="field_YZW" operation="average" enabled="false" />
+    </file>
+
+
+    <file id="atm_output_other" output_freq="1ts"  enabled="false">
+       <field field_ref="other_field3D" enabled="false"/>
+       <field field_ref="other_field2D" enabled="true"/> 
+       <field field_ref="other_field_X" enabled="false"/>
+       <field field_ref="other_field_Y" enabled="false"/>
+       <field field_ref="other_field_XY" enabled="false"/>
+       <field field_ref="other_field_Z" enabled="false"/>
+       <field field_ref="other_field_XYZ" enabled="false"/>
+       <field field_ref="other_field_XZ" enabled="false"/>
+       <field field_ref="other_field_YZ" enabled="false"/>
+    </file>
+    
+
+    <file id="atm_output_reorder" output_freq="1ts" enabled="false" >
+       <field field_ref="field2D" grid_ref="grid2D_invert" enabled="true"/>
+    </file>
+    
+    <file id="test_grid_lat" output_freq="1ts" enabled="false">
+      <field field_ref="field3D" operation="instant" />
+      <field id="field_reduce_lat" field_ref="field3D" grid_ref="grid_lat" operation="instant" />
+    </file>
+    
+  </file_definition>
+  
+  
+</context>
Index: /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/test_function/user_param.json
===================================================================
--- /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/test_function/user_param.json	(revision 1844)
+++ /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/test_function/user_param.json	(revision 1844)
@@ -0,0 +1,14 @@
+[
+	{
+		"ATMdomain": "'lmdz'",
+		"UsingServer2": "'true'",
+		"NumberServers": "2 4",
+		"RatioServer2": "50"
+	},
+	{
+		"UsingServer2": "'false'",
+		"NumberServers": "6 8",
+		"ATMdomain": "'lmdz'",
+		"RatioServer2": "50"
+	}
+]
Index: /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/test_grid_algo/checkfile.def
===================================================================
--- /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/test_grid_algo/checkfile.def	(revision 1844)
+++ /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/test_grid_algo/checkfile.def	(revision 1844)
@@ -0,0 +1,5 @@
+#atm_output_1.nc
+
+atm_output.nc
+
+atm_output_zoom.nc
Index: /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/test_grid_algo/context_atm.xml
===================================================================
--- /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/test_grid_algo/context_atm.xml	(revision 1844)
+++ /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/test_grid_algo/context_atm.xml	(revision 1844)
@@ -0,0 +1,437 @@
+<!-- -->
+<context id="atm">
+  
+  <calendar type="Gregorian" time_origin="1850-01-01 00:00:00" /> 
+  
+  <domain_definition>
+    <domain id="domain" />
+    <domain id="other_domain" />
+  </domain>
+  
+  <axis_definition>
+    <axis id="axis" />
+    <axis id="axis_dup" />
+    <axis id="domain_X" />
+    <axis id="domain_Y" />
+    <axis id="ensemble" />
+
+    <axis id="other_axis" />
+    <axis id="other_domain_X" />
+    <axis id="other_domain_Y" />
+    <axis id="other_ensemble" />
+  </axis_definition>
+
+  <axis_definition>
+    <axis id="axis_zoom" axis_ref="axis">
+        <zoom_axis begin="0" n="5"/>
+    </axis>
+    <axis id="domain_X_zoom" axis_ref="domain_X">
+        <zoom_axis begin="0" n="1"/>
+    </axis>
+    <axis id="domain_Y_zoom" axis_ref="domain_Y">
+        <zoom_axis begin="3" n="1"/>
+    </axis>
+  </axis_definition>
+
+  <scalar_definition>
+    <scalar id="scalar" /> 
+  </scalar_definition>
+  
+  
+  
+  <grid_definition>
+    
+    <grid id="grid3D">
+      <domain domain_ref="domain" />
+      <axis axis_ref="axis" />
+    </grid>
+    
+    <grid id="grid2D">
+      <domain domain_ref="domain" />
+    </grid>
+
+    <grid id="grid1D">
+      <axis axis_ref="axis" />
+    </grid>
+
+    <grid id="grid_X">
+      <axis axis_ref="domain_X" />
+    </grid>
+
+     <grid id="grid_X_zoom">
+      <axis axis_ref="domain_X_zoom" />
+    </grid>
+
+    <grid id="grid_Y">
+      <axis axis_ref="domain_Y" />
+    </grid>
+
+    <grid id="grid_XY">
+      <axis axis_ref="domain_X" />
+      <axis axis_ref="domain_Y" />
+    </grid>
+
+    <grid id="grid_XYZ">
+      <axis axis_ref="domain_X" />
+      <axis axis_ref="domain_Y" />
+      <axis axis_ref="axis" />
+    </grid>
+
+    <grid id="grid_XZ">
+      <axis axis_ref="domain_X" />
+      <axis axis_ref="axis" />
+    </grid>
+
+    <grid id="grid_YZ">
+      <axis axis_ref="domain_Y" />
+      <axis axis_ref="axis" />
+    </grid>
+
+
+    <grid id="grid3D_W">
+      <domain domain_ref="domain" />
+      <axis axis_ref="axis" />
+      <axis axis_ref="ensemble" />
+    </grid>
+    
+    <grid id="grid2D_W">
+      <domain domain_ref="domain" />
+      <axis axis_ref="ensemble" />
+    </grid>
+
+    <grid id="grid1D_W">
+      <axis axis_ref="axis" />
+      <axis axis_ref="ensemble" />
+    </grid>
+
+    <grid id="grid_XW">
+      <axis axis_ref="domain_X" />
+      <axis axis_ref="ensemble" />
+    </grid>
+
+    <grid id="grid_YW">
+      <axis axis_ref="domain_Y" />
+      <axis axis_ref="ensemble" />
+    </grid>
+
+    <grid id="grid_XYW">
+      <axis axis_ref="domain_X" />
+      <axis axis_ref="domain_Y" />
+      <axis axis_ref="ensemble" />
+    </grid>
+
+    <grid id="grid_XYZW">
+      <axis axis_ref="domain_X" />
+      <axis axis_ref="domain_Y" />
+      <axis axis_ref="axis" />
+      <axis axis_ref="ensemble" />
+    </grid>
+
+    <grid id="grid_XZW">
+      <axis axis_ref="domain_X" />
+      <axis axis_ref="axis" />
+      <axis axis_ref="ensemble" />
+    </grid>
+
+    <grid id="grid_YZW">
+      <axis axis_ref="domain_Y" />
+      <axis axis_ref="axis" />
+      <axis axis_ref="ensemble" />
+    </grid>
+
+
+    <grid id="grid_XY_zoom_Y">
+      <axis axis_ref="domain_X" />
+      <axis axis_ref="domain_Y_zoom" />
+    </grid>
+
+    <grid id="grid_XY_zoom_X">
+      <axis axis_ref="domain_X_zoom" />
+      <axis axis_ref="domain_Y" />
+
+    </grid>
+
+ 
+ 
+ 
+ 
+ 
+    <grid id="other_grid3D">
+      <domain domain_ref="other_domain" />
+      <axis axis_ref="other_axis" />
+    </grid>
+    
+    <grid id="other_grid2D">
+      <domain domain_ref="other_domain" />
+    </grid>
+
+    <grid id="other_grid1D">
+      <axis axis_ref="other_axis" />
+    </grid>
+
+    <grid id="other_grid_X">
+      <axis axis_ref="other_domain_X" />
+    </grid>
+
+    <grid id="other_grid_Y">
+      <axis axis_ref="other_domain_Y" />
+    </grid>
+
+    <grid id="other_grid_XY">
+      <axis axis_ref="other_domain_X" />
+      <axis axis_ref="other_domain_Y" />
+    </grid>
+
+    <grid id="other_grid_XYZ">
+      <axis axis_ref="other_domain_X" />
+      <axis axis_ref="other_domain_Y" />
+      <axis axis_ref="other_axis" />
+    </grid>
+
+    <grid id="other_grid_XZ">
+      <axis axis_ref="other_domain_X" />
+      <axis axis_ref="other_axis" />
+    </grid>
+
+    <grid id="other_grid_YZ">
+      <axis axis_ref="other_domain_Y" />
+      <axis axis_ref="other_axis" />
+    </grid>
+
+
+    <grid id="other_grid3D_W">
+      <domain domain_ref="other_domain" />
+      <axis axis_ref="other_axis" />
+      <axis axis_ref="other_ensemble" />
+    </grid>
+    
+    <grid id="other_grid2D_W">
+      <domain domain_ref="other_domain" />
+      <axis axis_ref="other_ensemble" />
+    </grid>
+
+    <grid id="other_grid1D_W">
+      <axis axis_ref="other_axis" />
+      <axis axis_ref="other_ensemble" />
+    </grid>
+
+    <grid id="other_grid_XW">
+      <axis axis_ref="other_domain_X" />
+      <axis axis_ref="other_ensemble" />
+    </grid>
+
+    <grid id="other_grid_YW">
+      <axis axis_ref="other_domain_Y" />
+      <axis axis_ref="other_ensemble" />
+    </grid>
+
+    <grid id="other_grid_XYW">
+      <axis axis_ref="other_domain_X" />
+      <axis axis_ref="other_domain_Y" />
+      <axis axis_ref="other_ensemble" />
+    </grid>
+
+    <grid id="other_grid_XYZW">
+      <axis axis_ref="other_domain_X" />
+      <axis axis_ref="other_domain_Y" />
+      <axis axis_ref="other_axis" />
+      <axis axis_ref="other_ensemble" />
+    </grid>
+
+    <grid id="other_grid_XZW">
+      <axis axis_ref="other_domain_X" />
+      <axis axis_ref="other_axis" />
+      <axis axis_ref="other_ensemble" />
+    </grid>
+
+    <grid id="other_grid_YZW">
+      <axis axis_ref="other_domain_Y" />
+      <axis axis_ref="other_axis" />
+      <axis axis_ref="other_ensemble" />
+    </grid>
+
+
+
+
+
+
+
+
+
+
+    <grid id="grid_vert_reduce">
+      <domain domain_ref="domain" />
+      <scalar >
+        <reduce_axis operation="sum" />
+      </scalar>
+    </grid>
+
+    <grid id="grid_horiz_reduce">
+      <scalar >
+        <reduce_domain operation="sum" />
+      </scalar>
+      <axis axis_ref="axis" />
+    </grid>
+      
+    <grid id="grid_zoom_vert">
+      <domain domain_ref="domain" />
+      <axis axis_ref="axis_zoom" />
+    </grid>
+
+    <grid id="grid_zoom_vert_sum">
+      <scalar >
+        <reduce_domain operation="sum" />
+      </scalar>
+      <axis axis_ref="axis_zoom" />
+    </grid>
+
+   <grid id="grid_lat">
+       <axis axis_ref="domain_Y">
+         <reduce_domain direction="iDir" operation="sum"/> 
+       </axis>
+       <axis axis_ref="axis" />
+    </grid>
+    
+
+    <grid id="grid3D_invert">
+      <domain domain_ref="domain">
+        <reorder_domain invert_lat="true" />
+      </domain>
+      <axis axis_ref="axis" />
+    </grid>
+    
+    <grid id="grid2D_invert">
+      <domain domain_ref="domain">
+        <reorder_domain invert_lat="true" shift_lon_fraction="0.5" min_lon="0" max_lon="360"/>
+      </domain>
+    </grid>
+
+    
+  </grid_definition>
+  
+  
+  <field_definition level="1" prec="8" operation="instant" freq_op="1ts" enabled=".true." default_value="1.e+20" detect_missing_value="true">
+    <field id="field2D" grid_ref="grid2D" build_workflow_graph="false" />
+    <field id="field3D" grid_ref="grid3D" build_workflow_graph="true"  />
+    <field id="pressure" grid_ref="grid3D"  />
+    <field id="field3D_recv" read_access="true" grid_ref="grid3D"  field_ref="field3D" />
+    <field id="field3D_resend" grid_ref="grid3D" />
+
+    <field id="field_X" grid_ref="grid_X" build_workflow_graph="false" />
+    <field id="field_Y" grid_ref="grid_Y" build_workflow_graph="false" />
+    <field id="field_Z" grid_ref="grid1D" build_workflow_graph="false" />
+    <field id="field_XY" grid_ref="grid_XY" />
+    <field id="field_XYZ" grid_ref="grid_XYZ" />
+    <field id="field_XZ" grid_ref="grid_XZ" />
+    <field id="field_YZ" grid_ref="grid_YZ" />
+
+    <field id="field_zoom_vert" field_ref="field3D" grid_ref="grid_zoom_vert"  />
+    <field id="field_zoom_vert_sum" field_ref="field_zoom_vert" grid_ref="grid_zoom_vert_sum"  />
+
+
+
+    <field id="field2D_W" grid_ref="grid2D_W"/>
+    <field id="field3D_W" grid_ref="grid3D_W"  />
+    <field id="pressure_W" grid_ref="grid3D_W"  />
+    <field id="field3D_recv_W" read_access="true" grid_ref="grid3D_W"  field_ref="field3D_W"/>
+    <field id="field3D_resend_W" grid_ref="grid3D_W" />
+
+    <field id="field_XW" grid_ref="grid_XW" />
+    <field id="field_YW" grid_ref="grid_YW" />
+    <field id="field_ZW" grid_ref="grid1D_W" />
+    <field id="field_XYW" grid_ref="grid_XYW" />
+    <field id="field_XYZW" grid_ref="grid_XYZW" />
+    <field id="field_XZW" grid_ref="grid_XZW" />
+    <field id="field_YZW" grid_ref="grid_YZW" />
+
+
+
+
+    <field id="other_field2D" grid_ref="other_grid2D"/>
+    <field id="other_field3D" grid_ref="other_grid3D"  />
+    <field id="other_pressure" grid_ref="other_grid3D"  />
+    <field id="other_field3D_recv" read_access="true" grid_ref="other_grid3D"  field_ref="other_field3D"/>
+    <field id="other_field3D_resend" grid_ref="other_grid3D" />
+
+    <field id="other_field_X" grid_ref="other_grid_X" />
+    <field id="other_field_Y" grid_ref="other_grid_Y" />
+    <field id="other_field_Z" grid_ref="other_grid1D" />
+    <field id="other_field_XY" grid_ref="other_grid_XY" />
+    <field id="other_field_XYZ" grid_ref="other_grid_XYZ" />
+    <field id="other_field_XZ" grid_ref="other_grid_XZ" />
+    <field id="other_field_YZ" grid_ref="other_grid_YZ" />
+
+    <field id="other_field2D_W" grid_ref="other_grid2D_W"/>
+    <field id="other_field3D_W" grid_ref="other_grid3D_W"  />
+    <field id="other_pressure_W" grid_ref="other_grid3D_W"  />
+    <field id="other_field3D_recv_W" read_access="true" grid_ref="other_grid3D_W"  field_ref="other_field3D_W"/>
+    <field id="other_field3D_resend_W" grid_ref="other_grid3D_W" />
+
+    <field id="other_field_XW" grid_ref="other_grid_XW" />
+    <field id="other_field_YW" grid_ref="other_grid_YW" />
+    <field id="other_field_ZW" grid_ref="other_grid1D_W" />
+    <field id="other_field_XYW" grid_ref="other_grid_XYW" />
+    <field id="other_field_XYZW" grid_ref="other_grid_XYZW" />
+    <field id="other_field_XZW" grid_ref="other_grid_XZW" />
+    <field id="other_field_YZW" grid_ref="other_grid_YZW" />
+
+
+
+
+    
+    
+  </field_definition>
+  
+
+  <file_definition  type="one_file" >
+    
+    <file id="atm_output" output_freq="1ts" type="one_file" enabled="true">
+       <!-- <field id="id_fieldXY" field_ref="field_XY" operation="once" enabled="true"/> -->
+       <field id="id_fieldX" field_ref="field_X" operation="once" enabled="true"/>
+    </file>
+
+     <file id="atm_output_zoom" output_freq="1ts" enabled="true">
+       <field id="fieldX_zoomX" field_ref="field_X" grid_ref="grid_X_zoom" operation="once" enabled="true"/>
+       <!-- <field id="fieldXY_zoomX" field_ref="field_XY" grid_ref="grid_XY_zoom_X" operation="once" enabled="true"/>
+       <field id="fieldXY_zoomY" field_ref="field_XY" grid_ref="grid_XY_zoom_Y" operation="once" enabled="true"/> -->
+    </file>
+
+
+    <file id="atm_output_other" output_freq="1ts"  enabled="false">
+       <field field_ref="other_field3D" enabled="false"/>
+       <field field_ref="other_field2D" enabled="true"/> 
+       <field field_ref="other_field_X" enabled="false"/>
+       <field field_ref="other_field_Y" enabled="false"/>
+       <field field_ref="other_field_XY" enabled="false"/>
+       <field field_ref="other_field_Z" enabled="false"/>
+       <field field_ref="other_field_XYZ" enabled="false"/>
+       <field field_ref="other_field_XZ" enabled="false"/>
+       <field field_ref="other_field_YZ" enabled="false"/>
+    </file>
+
+    <file id="atm_output_W" output_freq="1ts" enabled="false">
+       <field field_ref="field3D_W" enabled="true"/>
+       <field field_ref="field2D_W" enabled="true"/> 
+       <field field_ref="field_XW" enabled="true"/>
+       <field field_ref="field_YW" enabled="true"/>
+       <field field_ref="field_XYW" enabled="true"/>
+       <field field_ref="field_ZW" enabled="true"/>
+       <field field_ref="field_XYZW" enabled="true"/>
+       <field field_ref="field_XZW" enabled="true"/>
+       <field field_ref="field_YZW" enabled="true"/>
+    </file>
+    
+
+    <file id="atm_output_reorder" output_freq="1ts" enabled="false" >
+       <field field_ref="field2D" grid_ref="grid2D_invert" enabled="true"/>
+    </file>
+    
+    <file id="test_grid_lat" output_freq="1ts" enabled="false">
+      <field field_ref="field3D" operation="instant" />
+      <field id="field_reduce_lat" field_ref="field3D" grid_ref="grid_lat" operation="instant" />
+    </file>
+    
+  </file_definition>
+  
+  
+</context>
Index: /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/test_grid_algo/user_param.json
===================================================================
--- /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/test_grid_algo/user_param.json	(revision 1844)
+++ /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/test_grid_algo/user_param.json	(revision 1844)
@@ -0,0 +1,14 @@
+[
+	{
+		"ATMdomain": "'lmdz'",
+		"UsingServer2": "'true'",
+		"NumberServers": "2 4",
+		"RatioServer2": "50"
+	},
+	{
+		"UsingServer2": "'false'",
+		"NumberServers": "6 8",
+		"ATMdomain": "'lmdz'",
+		"RatioServer2": "50"
+	}
+]
Index: /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/test_scalar_algo/checkfile.def
===================================================================
--- /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/test_scalar_algo/checkfile.def	(revision 1844)
+++ /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/test_scalar_algo/checkfile.def	(revision 1844)
@@ -0,0 +1,4 @@
+#atm_output1.nc
+
+atm_output.nc
+atm_output_zoom.nc
Index: /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/test_scalar_algo/context_atm.xml
===================================================================
--- /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/test_scalar_algo/context_atm.xml	(revision 1844)
+++ /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/test_scalar_algo/context_atm.xml	(revision 1844)
@@ -0,0 +1,437 @@
+<!-- -->
+<context id="atm">
+  
+  <calendar type="Gregorian" time_origin="1850-01-01 00:00:00" /> 
+  
+  <domain_definition>
+    <domain id="domain" />
+    <domain id="other_domain" />
+  </domain>
+  
+  <axis_definition>
+    <axis id="axis" />
+    <axis id="axis_dup" />
+    <axis id="domain_X" />
+    <axis id="domain_Y" />
+    <axis id="ensemble" />
+
+    <axis id="other_axis" />
+    <axis id="other_domain_X" />
+    <axis id="other_domain_Y" />
+    <axis id="other_ensemble" />
+  </axis_definition>
+
+  <axis_definition>
+    <axis id="axis_zoom" axis_ref="axis">
+        <zoom_axis begin="0" n="5"/>
+    </axis>
+    <axis id="domain_X_zoom" axis_ref="domain_X">
+        <zoom_axis begin="0" n="1"/>
+    </axis>
+    <axis id="domain_Y_zoom" axis_ref="domain_Y">
+        <zoom_axis begin="3" n="1"/>
+    </axis>
+  </axis_definition>
+
+  <scalar_definition>
+    <scalar id="scalar" /> 
+  </scalar_definition>
+  
+  
+  
+  <grid_definition>
+    
+    <grid id="grid3D">
+      <domain domain_ref="domain" />
+      <axis axis_ref="axis" />
+    </grid>
+    
+    <grid id="grid2D">
+      <domain domain_ref="domain" />
+    </grid>
+
+    <grid id="grid1D">
+      <axis axis_ref="axis" />
+    </grid>
+
+    <grid id="grid_X">
+      <axis axis_ref="domain_X" />
+    </grid>
+
+     <grid id="grid_X_zoom">
+      <axis axis_ref="domain_X_zoom" />
+    </grid>
+
+    <grid id="grid_Y">
+      <axis axis_ref="domain_Y" />
+    </grid>
+
+    <grid id="grid_XY">
+      <axis axis_ref="domain_X" />
+      <axis axis_ref="domain_Y" />
+    </grid>
+
+    <grid id="grid_XYZ">
+      <axis axis_ref="domain_X" />
+      <axis axis_ref="domain_Y" />
+      <axis axis_ref="axis" />
+    </grid>
+
+    <grid id="grid_XZ">
+      <axis axis_ref="domain_X" />
+      <axis axis_ref="axis" />
+    </grid>
+
+    <grid id="grid_YZ">
+      <axis axis_ref="domain_Y" />
+      <axis axis_ref="axis" />
+    </grid>
+
+
+    <grid id="grid3D_W">
+      <domain domain_ref="domain" />
+      <axis axis_ref="axis" />
+      <axis axis_ref="ensemble" />
+    </grid>
+    
+    <grid id="grid2D_W">
+      <domain domain_ref="domain" />
+      <axis axis_ref="ensemble" />
+    </grid>
+
+    <grid id="grid1D_W">
+      <axis axis_ref="axis" />
+      <axis axis_ref="ensemble" />
+    </grid>
+
+    <grid id="grid_XW">
+      <axis axis_ref="domain_X" />
+      <axis axis_ref="ensemble" />
+    </grid>
+
+    <grid id="grid_YW">
+      <axis axis_ref="domain_Y" />
+      <axis axis_ref="ensemble" />
+    </grid>
+
+    <grid id="grid_XYW">
+      <axis axis_ref="domain_X" />
+      <axis axis_ref="domain_Y" />
+      <axis axis_ref="ensemble" />
+    </grid>
+
+    <grid id="grid_XYZW">
+      <axis axis_ref="domain_X" />
+      <axis axis_ref="domain_Y" />
+      <axis axis_ref="axis" />
+      <axis axis_ref="ensemble" />
+    </grid>
+
+    <grid id="grid_XZW">
+      <axis axis_ref="domain_X" />
+      <axis axis_ref="axis" />
+      <axis axis_ref="ensemble" />
+    </grid>
+
+    <grid id="grid_YZW">
+      <axis axis_ref="domain_Y" />
+      <axis axis_ref="axis" />
+      <axis axis_ref="ensemble" />
+    </grid>
+
+
+    <grid id="grid_XY_zoom_Y">
+      <axis axis_ref="domain_X" />
+      <axis axis_ref="domain_Y_zoom" />
+    </grid>
+
+    <grid id="grid_XY_zoom_X">
+      <axis axis_ref="domain_X_zoom" />
+      <axis axis_ref="domain_Y" />
+
+    </grid>
+
+ 
+ 
+ 
+ 
+ 
+    <grid id="other_grid3D">
+      <domain domain_ref="other_domain" />
+      <axis axis_ref="other_axis" />
+    </grid>
+    
+    <grid id="other_grid2D">
+      <domain domain_ref="other_domain" />
+    </grid>
+
+    <grid id="other_grid1D">
+      <axis axis_ref="other_axis" />
+    </grid>
+
+    <grid id="other_grid_X">
+      <axis axis_ref="other_domain_X" />
+    </grid>
+
+    <grid id="other_grid_Y">
+      <axis axis_ref="other_domain_Y" />
+    </grid>
+
+    <grid id="other_grid_XY">
+      <axis axis_ref="other_domain_X" />
+      <axis axis_ref="other_domain_Y" />
+    </grid>
+
+    <grid id="other_grid_XYZ">
+      <axis axis_ref="other_domain_X" />
+      <axis axis_ref="other_domain_Y" />
+      <axis axis_ref="other_axis" />
+    </grid>
+
+    <grid id="other_grid_XZ">
+      <axis axis_ref="other_domain_X" />
+      <axis axis_ref="other_axis" />
+    </grid>
+
+    <grid id="other_grid_YZ">
+      <axis axis_ref="other_domain_Y" />
+      <axis axis_ref="other_axis" />
+    </grid>
+
+
+    <grid id="other_grid3D_W">
+      <domain domain_ref="other_domain" />
+      <axis axis_ref="other_axis" />
+      <axis axis_ref="other_ensemble" />
+    </grid>
+    
+    <grid id="other_grid2D_W">
+      <domain domain_ref="other_domain" />
+      <axis axis_ref="other_ensemble" />
+    </grid>
+
+    <grid id="other_grid1D_W">
+      <axis axis_ref="other_axis" />
+      <axis axis_ref="other_ensemble" />
+    </grid>
+
+    <grid id="other_grid_XW">
+      <axis axis_ref="other_domain_X" />
+      <axis axis_ref="other_ensemble" />
+    </grid>
+
+    <grid id="other_grid_YW">
+      <axis axis_ref="other_domain_Y" />
+      <axis axis_ref="other_ensemble" />
+    </grid>
+
+    <grid id="other_grid_XYW">
+      <axis axis_ref="other_domain_X" />
+      <axis axis_ref="other_domain_Y" />
+      <axis axis_ref="other_ensemble" />
+    </grid>
+
+    <grid id="other_grid_XYZW">
+      <axis axis_ref="other_domain_X" />
+      <axis axis_ref="other_domain_Y" />
+      <axis axis_ref="other_axis" />
+      <axis axis_ref="other_ensemble" />
+    </grid>
+
+    <grid id="other_grid_XZW">
+      <axis axis_ref="other_domain_X" />
+      <axis axis_ref="other_axis" />
+      <axis axis_ref="other_ensemble" />
+    </grid>
+
+    <grid id="other_grid_YZW">
+      <axis axis_ref="other_domain_Y" />
+      <axis axis_ref="other_axis" />
+      <axis axis_ref="other_ensemble" />
+    </grid>
+
+
+
+
+
+
+
+
+
+
+    <grid id="grid_vert_reduce">
+      <domain domain_ref="domain" />
+      <scalar >
+        <reduce_axis operation="sum" />
+      </scalar>
+    </grid>
+
+    <grid id="grid_horiz_reduce">
+      <scalar >
+        <reduce_domain operation="sum" />
+      </scalar>
+      <axis axis_ref="axis" />
+    </grid>
+      
+    <grid id="grid_zoom_vert">
+      <domain domain_ref="domain" />
+      <axis axis_ref="axis_zoom" />
+    </grid>
+
+    <grid id="grid_zoom_vert_sum">
+      <scalar >
+        <reduce_domain operation="sum" />
+      </scalar>
+      <axis axis_ref="axis_zoom" />
+    </grid>
+
+   <grid id="grid_lat">
+       <axis axis_ref="domain_Y">
+         <reduce_domain direction="iDir" operation="sum"/> 
+       </axis>
+       <axis axis_ref="axis" />
+    </grid>
+    
+
+    <grid id="grid3D_invert">
+      <domain domain_ref="domain">
+        <reorder_domain invert_lat="true" />
+      </domain>
+      <axis axis_ref="axis" />
+    </grid>
+    
+    <grid id="grid2D_invert">
+      <domain domain_ref="domain">
+        <reorder_domain invert_lat="true" shift_lon_fraction="0.5" min_lon="0" max_lon="360"/>
+      </domain>
+    </grid>
+
+    
+  </grid_definition>
+  
+  
+  <field_definition level="1" prec="8" operation="instant" freq_op="1ts" enabled=".true." default_value="1.e+20" detect_missing_value="true">
+    <field id="field2D" grid_ref="grid2D" build_workflow_graph="false" />
+    <field id="field3D" grid_ref="grid3D" build_workflow_graph="true"  />
+    <field id="pressure" grid_ref="grid3D"  />
+    <field id="field3D_recv" read_access="true" grid_ref="grid3D"  field_ref="field3D" />
+    <field id="field3D_resend" grid_ref="grid3D" />
+
+    <field id="field_X" grid_ref="grid_X" build_workflow_graph="false" />
+    <field id="field_Y" grid_ref="grid_Y" build_workflow_graph="false" />
+    <field id="field_Z" grid_ref="grid1D" build_workflow_graph="false" />
+    <field id="field_XY" grid_ref="grid_XY" />
+    <field id="field_XYZ" grid_ref="grid_XYZ" />
+    <field id="field_XZ" grid_ref="grid_XZ" />
+    <field id="field_YZ" grid_ref="grid_YZ" />
+
+    <field id="field_zoom_vert" field_ref="field3D" grid_ref="grid_zoom_vert"  />
+    <field id="field_zoom_vert_sum" field_ref="field_zoom_vert" grid_ref="grid_zoom_vert_sum"  />
+
+
+
+    <field id="field2D_W" grid_ref="grid2D_W"/>
+    <field id="field3D_W" grid_ref="grid3D_W"  />
+    <field id="pressure_W" grid_ref="grid3D_W"  />
+    <field id="field3D_recv_W" read_access="true" grid_ref="grid3D_W"  field_ref="field3D_W"/>
+    <field id="field3D_resend_W" grid_ref="grid3D_W" />
+
+    <field id="field_XW" grid_ref="grid_XW" />
+    <field id="field_YW" grid_ref="grid_YW" />
+    <field id="field_ZW" grid_ref="grid1D_W" />
+    <field id="field_XYW" grid_ref="grid_XYW" />
+    <field id="field_XYZW" grid_ref="grid_XYZW" />
+    <field id="field_XZW" grid_ref="grid_XZW" />
+    <field id="field_YZW" grid_ref="grid_YZW" />
+
+
+
+
+    <field id="other_field2D" grid_ref="other_grid2D"/>
+    <field id="other_field3D" grid_ref="other_grid3D"  />
+    <field id="other_pressure" grid_ref="other_grid3D"  />
+    <field id="other_field3D_recv" read_access="true" grid_ref="other_grid3D"  field_ref="other_field3D"/>
+    <field id="other_field3D_resend" grid_ref="other_grid3D" />
+
+    <field id="other_field_X" grid_ref="other_grid_X" />
+    <field id="other_field_Y" grid_ref="other_grid_Y" />
+    <field id="other_field_Z" grid_ref="other_grid1D" />
+    <field id="other_field_XY" grid_ref="other_grid_XY" />
+    <field id="other_field_XYZ" grid_ref="other_grid_XYZ" />
+    <field id="other_field_XZ" grid_ref="other_grid_XZ" />
+    <field id="other_field_YZ" grid_ref="other_grid_YZ" />
+
+    <field id="other_field2D_W" grid_ref="other_grid2D_W"/>
+    <field id="other_field3D_W" grid_ref="other_grid3D_W"  />
+    <field id="other_pressure_W" grid_ref="other_grid3D_W"  />
+    <field id="other_field3D_recv_W" read_access="true" grid_ref="other_grid3D_W"  field_ref="other_field3D_W"/>
+    <field id="other_field3D_resend_W" grid_ref="other_grid3D_W" />
+
+    <field id="other_field_XW" grid_ref="other_grid_XW" />
+    <field id="other_field_YW" grid_ref="other_grid_YW" />
+    <field id="other_field_ZW" grid_ref="other_grid1D_W" />
+    <field id="other_field_XYW" grid_ref="other_grid_XYW" />
+    <field id="other_field_XYZW" grid_ref="other_grid_XYZW" />
+    <field id="other_field_XZW" grid_ref="other_grid_XZW" />
+    <field id="other_field_YZW" grid_ref="other_grid_YZW" />
+
+
+
+
+    
+    
+  </field_definition>
+  
+
+  <file_definition  type="one_file" >
+    
+    <file id="atm_output" output_freq="1ts" type="one_file" enabled="true">
+       <!-- <field id="id_fieldXY" field_ref="field_XY" operation="once" enabled="true"/> -->
+       <field id="id_fieldX" field_ref="field_X" operation="once" enabled="true"/>
+    </file>
+
+     <file id="atm_output_zoom" output_freq="1ts" enabled="true">
+       <field id="fieldX_zoomX" field_ref="field_X" grid_ref="grid_X_zoom" operation="once" enabled="true"/>
+       <!-- <field id="fieldXY_zoomX" field_ref="field_XY" grid_ref="grid_XY_zoom_X" operation="once" enabled="true"/>
+       <field id="fieldXY_zoomY" field_ref="field_XY" grid_ref="grid_XY_zoom_Y" operation="once" enabled="true"/> -->
+    </file>
+
+
+    <file id="atm_output_other" output_freq="1ts"  enabled="false">
+       <field field_ref="other_field3D" enabled="false"/>
+       <field field_ref="other_field2D" enabled="true"/> 
+       <field field_ref="other_field_X" enabled="false"/>
+       <field field_ref="other_field_Y" enabled="false"/>
+       <field field_ref="other_field_XY" enabled="false"/>
+       <field field_ref="other_field_Z" enabled="false"/>
+       <field field_ref="other_field_XYZ" enabled="false"/>
+       <field field_ref="other_field_XZ" enabled="false"/>
+       <field field_ref="other_field_YZ" enabled="false"/>
+    </file>
+
+    <file id="atm_output_W" output_freq="1ts" enabled="false">
+       <field field_ref="field3D_W" enabled="true"/>
+       <field field_ref="field2D_W" enabled="true"/> 
+       <field field_ref="field_XW" enabled="true"/>
+       <field field_ref="field_YW" enabled="true"/>
+       <field field_ref="field_XYW" enabled="true"/>
+       <field field_ref="field_ZW" enabled="true"/>
+       <field field_ref="field_XYZW" enabled="true"/>
+       <field field_ref="field_XZW" enabled="true"/>
+       <field field_ref="field_YZW" enabled="true"/>
+    </file>
+    
+
+    <file id="atm_output_reorder" output_freq="1ts" enabled="false" >
+       <field field_ref="field2D" grid_ref="grid2D_invert" enabled="true"/>
+    </file>
+    
+    <file id="test_grid_lat" output_freq="1ts" enabled="false">
+      <field field_ref="field3D" operation="instant" />
+      <field id="field_reduce_lat" field_ref="field3D" grid_ref="grid_lat" operation="instant" />
+    </file>
+    
+  </file_definition>
+  
+  
+</context>
Index: /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/test_scalar_algo/user_param.json
===================================================================
--- /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/test_scalar_algo/user_param.json	(revision 1844)
+++ /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/test_scalar_algo/user_param.json	(revision 1844)
@@ -0,0 +1,14 @@
+[
+	{
+		"ATMdomain": "'lmdz'",
+		"UsingServer2": "'true'",
+		"NumberServers": "2 4",
+		"RatioServer2": "50"
+	},
+	{
+		"UsingServer2": "'false'",
+		"NumberServers": "6 8",
+		"ATMdomain": "'lmdz'",
+		"RatioServer2": "50"
+	}
+]
Index: /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/user_config.py
===================================================================
--- /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/user_config.py	(revision 1844)
+++ /XIOS/dev/dev_trunk_omp/xios_test_suite/TEST_SUITE/user_config.py	(revision 1844)
@@ -0,0 +1,50 @@
+import os
+import sys
+import subprocess
+
+def main():
+
+
+	dirpath = os.getcwd()
+	my_list = os.listdir(dirpath)
+
+	test_list=[]
+	for folder in my_list:
+		if folder.startswith("test_"):
+			test_list.append(folder)
+	FNULL = open(os.devnull, 'w')
+	retcode = subprocess.call(['bash', 'setup.sh'], stdout=FNULL, stderr=subprocess.STDOUT)
+	if retcode!=0:	
+		print("setup.sh failed")
+		print >> sys.stderr, retcode
+		sys.exit()
+	
+
+	f=open("CMakeLists.txt", "w")
+
+	f.write("####################################\n")
+	f.write("# file generated by user_config.py #\n")
+	f.write("#      DO NOT modify               #\n")
+	f.write("####################################\n\n")
+	
+	f.write("cmake_minimum_required(VERSION 2.8.12.2)\n\n")
+	f.write("project(generic_testcase)\n\n")
+	f.write("enable_testing()\n\n")
+
+	for x in range(len(test_list)):
+		f.write("add_subdirectory(" + test_list[x]+ ")\n")
+
+	f.write("\n")
+	f.write("add_custom_target(\"report\")\n\n")
+	f.write("add_custom_command(TARGET \"report\" \n")
+	f.write("                   POST_BUILD\n")
+	f.write("                   COMMAND rm -f report.txt\n")
+	f.write("                   COMMAND rm -f report.html\n")
+	f.write("                   )\n\n")
+	f.close
+	
+	print >> sys.stderr, 0
+	sys.exit()
+
+if __name__== "__main__":
+  main()
Index: /XIOS/dev/dev_trunk_omp/xios_test_suite/TOOLS/copy_to_forge
===================================================================
--- /XIOS/dev/dev_trunk_omp/xios_test_suite/TOOLS/copy_to_forge	(revision 1844)
+++ /XIOS/dev/dev_trunk_omp/xios_test_suite/TOOLS/copy_to_forge	(revision 1844)
@@ -0,0 +1,11 @@
+#!/bin/bash
+FORGE_DIR=/ipsl/forge/projets/ioserver/XIOS_TEST_SUITE
+forge_IP=ioserver@forge.ipsl.jussieu.fr
+
+files=$*
+
+for file in $files 
+do
+  scp $file $forge_IP:$FORGE_DIR 
+  ssh $forge_IP "chmod --quiet a+rw ${FORGE_DIR}/${file}"
+done
Index: /XIOS/dev/dev_trunk_omp/xios_test_suite/TOOLS/copy_to_thredds
===================================================================
--- /XIOS/dev/dev_trunk_omp/xios_test_suite/TOOLS/copy_to_thredds	(revision 1844)
+++ /XIOS/dev/dev_trunk_omp/xios_test_suite/TOOLS/copy_to_thredds	(revision 1844)
@@ -0,0 +1,8 @@
+#!/bin/bash
+THREDDS_DIR=$xios_thredds_dir
+files=$*
+
+for file in $files 
+do
+  cp $file $THREDDS_DIR ; chmod --quiet g+wr $THREDDS_DIR/$file ; chmod --quiet o+r $THREDDS_DIR/$file
+done
Index: /XIOS/dev/dev_trunk_omp/xios_test_suite/copy_html
===================================================================
--- /XIOS/dev/dev_trunk_omp/xios_test_suite/copy_html	(revision 1844)
+++ /XIOS/dev/dev_trunk_omp/xios_test_suite/copy_html	(revision 1844)
@@ -0,0 +1,4 @@
+#!/bin/bash
+
+source ./load_env
+(cd HTML && ./copy_html_${xios_machine_name})
Index: /XIOS/dev/dev_trunk_omp/xios_test_suite/cron_script_irene
===================================================================
--- /XIOS/dev/dev_trunk_omp/xios_test_suite/cron_script_irene	(revision 1844)
+++ /XIOS/dev/dev_trunk_omp/xios_test_suite/cron_script_irene	(revision 1844)
@@ -0,0 +1,33 @@
+#/bin/bash
+set -x 
+xios_branch=trunk
+xios_svn_rep="svn+ssh://forge.ipsl.jussieu.fr/ipsl/forge/projets/ioserver/svn/XIOS"
+xios_test_suite_dir="/ccc/scratch/cont003/gen0826/gen0826/XIOS_TEST_SUITE"
+
+#permission for group
+CHMOD() { chmod --quiet ug+rwX,o+rX "$@" ;}
+
+mkdir -p $xios_test_suite_dir ; CHMOD $xios_test_suite_dir
+mkdir -p $xios_test_suite_dir/$xios_branch ; CHMOD $xios_test_suite_dir/$xios_branch
+
+full_branch_dir=${xios_test_suite_dir}/$xios_branch
+full_svn_rep=$xios_svn_rep/$xios_branch
+
+cd $full_branch_dir
+
+if [ ! -f "./last_rev_tested" ]; then
+  echo 0 > ./last_rev_tested 
+  CHMOD ./last_rev_tested 
+fi
+
+last_rev=`cat ./last_rev_tested`
+current_rev=`svn info --show-item last-changed-revision $full_svn_rep`
+
+if [ "$current_rev" -gt "$last_rev" ];
+then 
+    echo $current_rev > last_rev_tested
+    CHMOD ./last_rev_tested 
+    svn co $full_svn_rep xios_rev_$current_rev
+    (cd xios_rev_$current_rev/xios_test_suite && ./launch_all)
+    CHMOD -R xios_rev_$current_rev
+fi;
Index: /XIOS/dev/dev_trunk_omp/xios_test_suite/cron_script_jeanzay
===================================================================
--- /XIOS/dev/dev_trunk_omp/xios_test_suite/cron_script_jeanzay	(revision 1844)
+++ /XIOS/dev/dev_trunk_omp/xios_test_suite/cron_script_jeanzay	(revision 1844)
@@ -0,0 +1,34 @@
+#/bin/bash
+
+xios_branch=trunk
+xios_svn_rep="svn+ssh://forge.ipsl.jussieu.fr/ipsl/forge/projets/ioserver/svn/XIOS"
+xios_test_suite_dir="/gpfsscratch/rech/psl/commun/XIOS_TEST_SUITE"
+
+#permission for group
+CHMOD() { setfacl -m u::rwX,u:rpsl565:rwX,u:rpsl954:rwX,u:rgzi016:rwX,g::r-X,o::r-X,m::rwX "$@" ;}
+
+
+mkdir -p $xios_test_suite_dir ; CHMOD $xios_test_suite_dir
+mkdir -p $xios_test_suite_dir/$xios_branch ; CHMOD $xios_test_suite_dir/$xios_branch
+
+full_branch_dir=${xios_test_suite_dir}/$xios_branch
+full_svn_rep=$xios_svn_rep/$xios_branch
+
+cd $full_branch_dir
+
+if [ ! -f "./last_rev_tested" ]; then
+  echo 0 > ./last_rev_tested 
+  CHMOD ./last_rev_tested 
+fi
+
+last_rev=`cat ./last_rev_tested`
+current_rev=`svn info --show-item revision $full_svn_rep`
+
+if [ "$current_rev" -gt "$last_rev" ];
+then 
+    echo $current_rev > last_rev_tested
+    CHMOD ./last_rev_tested 
+    svn co $full_svn_rep xios_rev_$current_rev
+    (cd xios_rev_$current_rev/xios_test_suite && ./launch_all)
+    CHMOD -R xios_rev_$current_rev
+fi;
Index: /XIOS/dev/dev_trunk_omp/xios_test_suite/launch_all
===================================================================
--- /XIOS/dev/dev_trunk_omp/xios_test_suite/launch_all	(revision 1844)
+++ /XIOS/dev/dev_trunk_omp/xios_test_suite/launch_all	(revision 1844)
@@ -0,0 +1,6 @@
+#!/bin/bash
+
+source ./load_env
+./copy_html
+./launch_compile
+./launch_test_suite
Index: /XIOS/dev/dev_trunk_omp/xios_test_suite/launch_all_local
===================================================================
--- /XIOS/dev/dev_trunk_omp/xios_test_suite/launch_all_local	(revision 1844)
+++ /XIOS/dev/dev_trunk_omp/xios_test_suite/launch_all_local	(revision 1844)
@@ -0,0 +1,5 @@
+#!/bin/bash
+
+source ./load_env_local
+./launch_compile_local
+./launch_test_suite_local
Index: /XIOS/dev/dev_trunk_omp/xios_test_suite/launch_compile
===================================================================
--- /XIOS/dev/dev_trunk_omp/xios_test_suite/launch_compile	(revision 1844)
+++ /XIOS/dev/dev_trunk_omp/xios_test_suite/launch_compile	(revision 1844)
@@ -0,0 +1,5 @@
+#!/bin/bash
+
+source ./load_env
+mkdir -p BUILD
+(cd COMPILE && ./compile_${xios_machine_name})
Index: /XIOS/dev/dev_trunk_omp/xios_test_suite/launch_compile_local
===================================================================
--- /XIOS/dev/dev_trunk_omp/xios_test_suite/launch_compile_local	(revision 1844)
+++ /XIOS/dev/dev_trunk_omp/xios_test_suite/launch_compile_local	(revision 1844)
@@ -0,0 +1,5 @@
+#!/bin/bash
+
+source ./load_env_local
+mkdir -p BUILD
+(cd COMPILE && ./compile_${xios_machine_name}_local)
Index: /XIOS/dev/dev_trunk_omp/xios_test_suite/launch_test_suite
===================================================================
--- /XIOS/dev/dev_trunk_omp/xios_test_suite/launch_test_suite	(revision 1844)
+++ /XIOS/dev/dev_trunk_omp/xios_test_suite/launch_test_suite	(revision 1844)
@@ -0,0 +1,6 @@
+#!/bin/bash
+
+source ./load_env
+mkdir -p RUN_TEST_SUITE
+cp -r TEST_SUITE/* RUN_TEST_SUITE
+(cd RUN_TEST_SUITE && ./run_test_${xios_machine_name})
Index: /XIOS/dev/dev_trunk_omp/xios_test_suite/launch_test_suite_local
===================================================================
--- /XIOS/dev/dev_trunk_omp/xios_test_suite/launch_test_suite_local	(revision 1844)
+++ /XIOS/dev/dev_trunk_omp/xios_test_suite/launch_test_suite_local	(revision 1844)
@@ -0,0 +1,6 @@
+#!/bin/bash
+
+source ./load_env_local
+mkdir -p RUN_TEST_SUITE
+cp -r TEST_SUITE/* RUN_TEST_SUITE
+(cd RUN_TEST_SUITE && ./run_test_${xios_machine_name}_local)
Index: /XIOS/dev/dev_trunk_omp/xios_test_suite/load_env
===================================================================
--- /XIOS/dev/dev_trunk_omp/xios_test_suite/load_env	(revision 1844)
+++ /XIOS/dev/dev_trunk_omp/xios_test_suite/load_env	(revision 1844)
@@ -0,0 +1,14 @@
+#!/bin/bash
+
+myhostname=`hostname`
+
+if [[ $myhostname = irene* ]]
+then
+  export xios_machine_name=irene
+elif [[ $myhostname = jean-zay* ]]
+then
+  export xios_machine_name=jeanzay
+fi 
+
+source ./ENV/${xios_machine_name}.env
+export PATH=`pwd`/TOOLS:$PATH 
Index: /XIOS/dev/dev_trunk_omp/xios_test_suite/load_env_local
===================================================================
--- /XIOS/dev/dev_trunk_omp/xios_test_suite/load_env_local	(revision 1844)
+++ /XIOS/dev/dev_trunk_omp/xios_test_suite/load_env_local	(revision 1844)
@@ -0,0 +1,14 @@
+#!/bin/bash
+
+myhostname=`hostname`
+
+if [[ $myhostname = irene* ]]
+then
+  export xios_machine_name=irene
+elif [[ $myhostname = jean-zay* ]]
+then
+  export xios_machine_name=jeanzay
+fi 
+
+source ./ENV_local/${xios_machine_name}.env
+export PATH=`pwd`/TOOLS:$PATH 
