Index: /XIOS/trunk/xios_test_suite/TEST_SUITE/check.py
===================================================================
--- /XIOS/trunk/xios_test_suite/TEST_SUITE/check.py	(revision 1806)
+++ /XIOS/trunk/xios_test_suite/TEST_SUITE/check.py	(revision 1806)
@@ -0,0 +1,438 @@
+import os
+import sys
+import subprocess
+import socket
+import os.path
+from os import path
+
+
+from default_param import *
+from user_param 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")
+
+
+def write_jz_job(configName, nbproc=8):
+	red = lambda text: '\033[0;31m' + text + '\033[0m'
+	f=open("jz_job_"+configName+".sh", "w")
+	f.write("#!/bin/bash\n")
+	f.write("#SBATCH --ntasks="+repr(nbproc)+"              # Nombre total de processus MPI\n")
+	f.write("#SBATCH --ntasks-per-node=16\n")
+	f.write("#SBATCH --hint=nomultithread\n")
+	f.write("#SBATCH -t 00:10:00            # Temps elapsed maximum d'execution\n")
+	f.write("#SBATCH -o single_config.out     # Nom du fichier de sortie\n")
+	f.write("#SBATCH -e single_config.err     # Nom du fichier d'erreur\n")
+	f.write("#SBATCH --account=psl@cpu\n")
+	f.write("cd ${SLURM_SUBMIT_DIR}\n")
+	f.write("module purge\n")
+	f.write("module load intel-all/19.0.4\n")
+	f.write("module load netcdf/4.7.0/intel-19.0.4-mpi\n")
+	f.write("module load netcdf-cxx/4.2/intel-19.0.4-mpi\n")
+	f.write("module load netcdf-fortran/4.4.5/intel-19.0.4-mpi\n")
+	f.write("module load gcc/6.5.0/gcc-4.8.5\n")
+	f.write("module load cmake\n")
+	f.write("module load cdo\n")
+	f.write("ulimit -c 0\n")
+	xios_root=os.getenv('xios_dir')
+	build_folder=os.getenv('build_dir')
+	f.write("export xios_dir="+xios_root+"\n")
+	f.write("export build_dir="+build_folder+"\n")
+	f.write("export machine_name=jeanzay\n")
+	f.write("cp ../setup.py ./\n")
+	f.write("cp ../run_sub_test.sh ./\n")
+	f.write("mv user_params.def user_params.def_bkp\n")
+	f.write("cp "+configName+"/setup/user_param.py user_params.def\n")
+	f.write("python setup.py\n")
+	f.write("cmake .\n")
+	f.write("ctest -V #enable all output\n")
+	f.write("rm -f setup.py\n")
+	f.write("rm -f run_sub_test.sh\n")
+	f.write("rm -f run_test_*.py\n")
+	f.write("rm -f CMakeLists.txt\n")
+	f.write("rm -f context_grid_dynamico.xml\n")
+	f.write("rm -f dynamico_grid.nc\n")
+	f.write("rm -f default_param.*\n")
+	f.write("rm -f user_param.*\n")
+	f.write("mv user_params.def_bkp user_params.def\n")
+	f.write("\n")
+	f.close
+
+def write_irene_job(configName, nbproc=8):
+	red = lambda text: '\033[0;31m' + text + '\033[0m'
+	f=open("irene_job_"+configName+".sh", "w")
+	f.write("#!/bin/bash\n")
+	f.write("#MSUB -r XIOS\n")
+	f.write("#MSUB -o client_output.out    # standard output\n")
+	f.write("#MSUB -e client_error.err    #error output\n")
+	f.write("#MSUB -eo\n")
+	f.write("#MSUB -c 1\n")
+	f.write("#MSUB -n "+ repr(nbproc) + "  # Number of MPI tasks (SPMD case) or cores (MPMD case)\n")
+	f.write("#MSUB -X \n")
+	f.write("#MSUB -x \n")
+	f.write("#MSUB -T 600      # Wall clock limit (seconds)\n")
+	f.write("#MSUB -q skylake           # thin nodes\n")
+	f.write("#MSUB -A devcmip6\n")
+	f.write("#MSUB -Q test\n")
+	f.write("#MSUB -m work\n")
+	f.write("cd $BRIDGE_MSUB_PWD\n")
+	f.write("module unload netcdf-c netcdf-fortran hdf5 flavor perl hdf5 boost blitz mpi gnu\n")
+	f.write("module load gnu\n")
+	f.write("module load mpi/intelmpi/2017.0.6.256\n")
+	f.write("module load flavor/buildcompiler/intel/17\n")
+	f.write("module load flavor/hdf5/parallel\n")
+	f.write("module load netcdf-fortran/4.4.4\n")
+	f.write("module load hdf5/1.8.20\n")
+	f.write("module load boost\n")
+	f.write("module load blitz\n")
+	f.write("module load feature/bridge/heterogenous_mpmd\n")
+	f.write("module load nco\n")
+	f.write("module load cdo\n")
+	f.write("export KMP_STACKSIZE=3g\n")
+	f.write("export KMP_LIBRARY=turnaround\n")
+	f.write("export MKL_SERIAL=YES\n")
+	f.write("export OMP_NUM_THREADS=${BRIDGE_MSUB_NCORE}\n")
+	f.write("set -x \n")
+	xios_root=os.getenv('xios_dir')
+	build_folder=os.getenv('build_dir')
+	f.write("export xios_dir="+xios_root+"\n")
+	f.write("export build_dir="+build_folder+"\n")
+	f.write("export machine_name=irene\n")
+	f.write("cp ../setup.py ./\n")
+	f.write("cp ../run_sub_test.sh ./\n")
+	f.write("mv user_params.def user_params.def_bkp\n")
+	f.write("cp "+configName+"/setup/user_param.py user_params.def\n")
+	f.write("python setup.py\n")
+	f.write("cmake .\n")
+	f.write("ctest -V #enable all output\n")
+	f.write("rm -f setup.py\n")
+	f.write("rm -f run_sub_test.sh\n")
+	f.write("rm -f run_test_*.py\n")
+	f.write("rm -f CMakeLists.txt\n")
+	f.write("rm -f context_grid_dynamico.xml\n")
+	f.write("rm -f dynamico_grid.nc\n")
+	f.write("rm -f default_param.*\n")
+	f.write("rm -f user_param.*\n")
+	f.write("mv user_params.def_bkp user_params.def\n")
+	f.write("\n")
+	f.close
+
+
+
+def main():
+
+	black = lambda text: '\033[0;30m' + text + '\033[0m'
+	red = lambda text: '\033[0;31m' + text + '\033[0m'
+	green = lambda text: '\033[0;32m' + text + '\033[0m'
+	yellow = lambda text: '\033[0;33m' + text + '\033[0m'
+	blue = lambda text: '\033[0;34m' + text + '\033[0m'
+	magenta = lambda text: '\033[0;35m' + text + '\033[0m'
+	cyan = lambda text: '\033[0;36m' + text + '\033[0m'
+	lgray = lambda text: '\033[0;37m' + text + '\033[0m'
+	dgray = lambda text: '\033[1;30m' + text + '\033[0m'
+	lred = lambda text: '\033[1;32m' + text + '\033[0m'
+	lgreen = lambda text: '\033[1;32m' + text + '\033[0m'
+	lyellow = lambda text: '\033[1;33m' + text + '\033[0m'
+	lblue = lambda text: '\033[1;34m' + text + '\033[0m'
+	lpurple = lambda text: '\033[1;35m' + text + '\033[0m'
+	lcyan = lambda text: '\033[1;36m' + text + '\033[0m'
+	white = lambda text: '\033[1;37m' + text + '\033[0m'
+	
+	configNamePattern=[0]*7
+
+	f=open("user_param.py", "r")
+	for line in f:
+		line = line.strip()
+		if line.startswith("UsingServer2"):
+			configNamePattern[0] = '_UsingSrv2=' + UsingServer2
+		elif line.startswith("RatioServer2"):
+			configNamePattern[1] = '_RatioSrv2=' + repr(RatioServer2)
+		elif line.startswith("NumberPoolsServer2"):
+			configNamePattern[2] = '_NbPoolsSrv2=' + repr(NumberPoolsServer2)
+		elif line.startswith("NumberClients"):
+			configNamePattern[3] = '_NbClients=' + repr(NumberClients)
+		elif line.startswith("NumberServers"):
+			configNamePattern[4] = '_NbServers=' + repr(NumberServers)
+		elif line.startswith("Duration"):
+			configNamePattern[5] = '_Duration=' + Duration
+		elif line.startswith("ATMdomain"):
+			configNamePattern[5] = '_ATMdomain=' + ATMdomain
+	f.close()
+		
+	
+
+	configName = "config"
+	defaultConfig = True
+
+	for i in range(len(configNamePattern)):
+		if configNamePattern[i] != 0:
+			configName = configName + configNamePattern[i]
+			defaultConfig = False
+
+	if defaultConfig:
+		configName = "config_default"
+
+	
+
+
+	if not os.path.exists(configName):
+
+		
+		
+
+		os.mkdir(configName)
+		print blue("\n    ****************************************************************")
+		print blue("    * Directory " + repr(configName) + " Created ")
+		print blue("    * Copy results to \'not_validated_reference\' folder")
+		print blue("    ****************************************************************\n")
+
+		OSinfo("mkdir "+configName+'/setup')
+		OSinfo('mkdir '+configName+'/tmp_reference')
+		OSinfo('mkdir '+configName+'/xios_output')
+		
+		OSinfo('mv param.def '+configName+'/setup/')
+		OSinfo('mv all_param.def '+configName+'/setup/')
+		OSinfo('mv user_param.py '+configName+'/setup/')
+		OSinfo('cp '+configName+'/setup/user_param.py '+configName+'/setup/user_param.def ')
+		OSinfo('mv iodef.xml '+configName+'/setup/')
+		OSinfo('cp context_atm.xml '+configName+'/setup/')
+		OSinfo('cp context_grid_dynamico.xml '+configName+'/setup/')
+		OSinfo('cp dynamico_grid.nc '+configName+'/setup/')
+		OSinfo('mv xios_*.out '+configName+'/xios_output/')
+		OSinfo('mv xios_*.err '+configName+'/xios_output/')
+		
+
+		f=open("checkfile.def", "r")
+		h=open("report.txt", "a+")
+		l=open("report.html", "a+")
+		preport=open("../plein_report.txt", "a+")
+		h.write("Config : "+configName+"\n")		
+		l.write("<p>Config : "+configName+"</p>")	
+		for line in f:
+			line=line.strip()
+			line=line.rstrip()
+
+			if line.startswith("all"):
+				allfiles = os.listdir(os.getcwd())
+				for thisfile in allfiles:
+					if thisfile.endswith(".nc") and thisfile!="dynamico_grid.nc":
+						cmd = 'mv '+thisfile + ' '+configName+'/tmp_reference/'
+						OSinfo(cmd)	
+				
+				h.write("test for "+lpurple("all NC files")+"     \t"+yellow('INITIALIZED')+"\n")
+				preport.write(os.path.basename(os.getcwd())+" "+os.path.basename(os.getcwd())[5:]+"@"+configName+" "+os.path.basename(os.getcwd())[5:]+"@"+configName[7:]+"_all_nc_files"+" "+repr(0)+" \n")				
+				l.write("<p>test for <font color=\"purple\">"+"all NC files"+"</font> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=\"darkorange\">INITIALIZED</font></p>")
+				print yellow("\n        ****************************************")
+				print yellow("        ** "+"all NC files"+" is stored as temporal reference !!! **")
+				print yellow("\n        ****************************************")
+
+				break
+
+			if not line.startswith("#") and len(line) != 0:
+				cmd = 'mv '+line + ' '+configName+'/tmp_reference/'
+				OSinfo(cmd)
+
+				h.write("test for "+lpurple(line)+"     \t"+yellow('INITIALIZED')+"\n")		
+				preport.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")		
+				l.write("<p>test for <font color=\"purple\">"+line+"</font> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=\"darkorange\">INITIALIZED</font></p>")
+				print yellow("\n        ****************************************")
+				print yellow("        ** "+line+" is stored as temporal reference !!! **")
+				print yellow("\n        ****************************************")
+				
+		f.close()
+		h.write("\n")
+		l.write("<br>")
+		h.close()
+		l.close()
+		preport.close()
+		#generate job scripts
+		hostname=os.getenv('machine_name')
+		if hostname.startswith("jeanzay"):
+			write_jz_job(configName, NumberClients+NumberServers)
+				
+		elif hostname.startswith("irene"):
+			write_irene_job(configName, NumberClients+NumberServers)
+							
+		else :
+			print("machine unknown")
+			print >> sys.stderr, 1
+			sys.exit()
+
+
+	else:    
+		
+
+
+		print blue("\n    ********************************************************")
+		print blue("    * Directory " + repr(configName) + " already exists")
+		print blue("    * Start comparing results with references")
+		print blue("    ********************************************************\n")
+
+		tmp_ref = os.path.isdir(configName+'/tmp_reference')
+		ref = os.path.isdir(configName+'/reference') and not tmp_ref
+
+
+		if ref:
+			print blue("\n    =====================================")
+			print blue("    | Comparing results with references |")
+			print blue("    =====================================\n")
+			path = configName+'/reference/'
+			OSinfo('cp '+configName+'/setup/user_param.py '+configName+'/setup/user_param.def ')
+		elif tmp_ref:
+			print blue("\n    ===================================================")
+			print blue("    | Comparing results with NON-Validated references |")
+			print blue("    ===================================================\n")
+			path = configName+'/tmp_reference/'
+			OSinfo('cp '+configName+'/setup/user_param.py '+configName+'/setup/user_param.def ')
+		
+		f=open("checkfile.def", "r")
+		h=open("report.txt", "a+")
+		l=open("report.html", "a+")
+		preport=open("../plein_report.txt", "a+")
+
+
+		h.write("Config : "+configName+"\n")	
+		l.write("<p>Config : "+configName+"</p>")	
+		for line in f:
+
+			line=line.strip()
+			line=line.rstrip()
+			
+			if line.startswith("all") :
+				for thisfile in os.listdir(path):
+					if thisfile.endswith(".nc"):
+						cmd = 'cdo -W diffn '+ thisfile +' '+ path + thisfile + ' | tail -1 > diff.txt'
+						
+						OSinfo(cmd)
+						
+						if os.stat("diff.txt").st_size==0:
+							h.write("test for "+lpurple(thisfile)+"     \t"+green('PASSED')+"\n")		
+							preport.write(os.path.basename(os.getcwd())+" "+os.path.basename(os.getcwd())[5:]+"@"+configName+" "+os.path.basename(os.getcwd())[5:]+"@"+configName[7:]+"@"+thisfile+" "+repr(1)+" \n")		
+							l.write("<p>test for <font color=\"purple\">"+thisfile+"</font> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=\"green\">PASSED</font></p>")		
+							print green("\n        ****************************************")
+							print green("        ** "+thisfile+" is valid !!! **")
+							print green("\n        ****************************************")
+
+						else:	
+							g=open("diff.txt", "r")
+							for gline in g:
+								if gline.strip().startswith("0") or ":" in gline :
+									h.write("test for "+lpurple(thisfile)+"      \t"+green('PASSED')+"\n")	
+									preport.write(os.path.basename(os.getcwd())+" "+os.path.basename(os.getcwd())[5:]+"@"+configName+" "+os.path.basename(os.getcwd())[5:]+"@"+configName[7:]+"@"+thisfile+" "+repr(1)+" \n")			
+									l.write("<p>test for <font color=\"purple\">"+thisfile+"</font> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=\"green\">PASSED</font></p>")		
+									print green("\n        ****************************************")
+									print green("        ** "+thisfile+" is valid !!! **")
+									print green("\n        ****************************************")
+								else:
+									h.write("test for "+lpurple(thisfile)+"     \t"+red('FAILED')+"\n")	
+									preport.write(os.path.basename(os.getcwd())+" "+os.path.basename(os.getcwd())[5:]+"@"+configName+" "+os.path.basename(os.getcwd())[5:]+"@"+configName[7:]+"@"+thisfile+" "+repr(-1)+" \n")			
+									l.write("<p>test for <font color=\"purple\">"+thisfile+"</font> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=\"red\">FAILED</font></p>")		
+									print red("\n        **************************************************")
+									print red("        ** "+thisfile+" is NOT valid. Please debugging.. **")
+									print red("\n        **************************************************")
+							g.close()
+
+						# generate job submission script
+						hostname=os.getenv('machine_name')
+
+						if hostname.startswith("jeanzay"):
+							write_jz_job(configName, NumberClients+NumberServers)
+							
+						elif hostname.startswith("irene"):
+							write_irene_job(configName, NumberClients+NumberServers)
+							
+						else :
+							print("machine unknown")
+							print >> sys.stderr, 1
+							sys.exit()
+				break
+
+
+			elif not line.startswith("#") and len(line) != 0:
+				cmd = 'cdo -W diffn '+ line +' '+ path + line + ' | tail -1 > diff.txt'
+				
+				OSinfo(cmd)
+
+				if os.stat("diff.txt").st_size==0:
+					h.write("test for "+lpurple(line)+"     \t"+green('PASSED')+"\n")
+					preport.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")				
+					l.write("<p>test for <font color=\"purple\">"+line+"</font> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=\"green\">PASSED</font></p>")		
+					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 :
+							h.write("test for "+lpurple(line)+"      \t"+green('PASSED')+"\n")		
+							preport.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")		
+							l.write("<p>test for <font color=\"purple\">"+line+"</font> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=\"green\">PASSED</font></p>")		
+							print green("\n        ****************************************")
+							print green("        ** "+line+" is valid !!! **")
+							print green("\n        ****************************************")
+						else:
+							h.write("test for "+lpurple(line)+"     \t"+red('FAILED')+"\n")	
+							preport.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")			
+							l.write("<p>test for <font color=\"purple\">"+line+"</font> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color=\"red\">FAILED</font></p>")		
+							print red("\n        **************************************************")
+							print red("        ** "+line+" is NOT valid. Please debugging.. **")
+							print red("\n        **************************************************")
+					g.close()
+
+				# generate job submission script
+				hostname=os.getenv('machine_name')
+
+				if hostname.startswith("jeanzay"):
+					write_jz_job(configName, NumberClients+NumberServers)
+							
+				elif hostname.startswith("irene"):
+					write_irene_job(configName, NumberClients+NumberServers)
+							
+				else :
+					print("machine unknown")
+					print >> sys.stderr, 1
+					sys.exit()
+
+
+		f.close()
+		h.write("\n")
+		l.write("<br>")
+		h.close()
+		l.close()
+		preport.close()
+
+		if not os.path.exists('current_run'):
+			OSinfo('mkdir current_run')
+
+		if not os.path.exists('current_run/'+configName):
+			OSinfo('mkdir current_run/'+configName)
+
+		OSinfo('mv -f param.def current_run/'+configName)
+		OSinfo('mv -f all_param.def current_run/'+configName)
+		OSinfo('mv -f user_param.py current_run/'+configName)
+		OSinfo('mv -f iodef.xml current_run/'+configName)
+		OSinfo('rm -f current_run/'+configName+'/context_atm.xml')
+		OSinfo('cp -n context_atm.xml current_run/'+configName)
+		OSinfo('cp -f context_grid_dynamico.xml current_run/'+configName)
+		OSinfo('cp -f dynamico_grid.nc current_run/'+configName)
+		OSinfo('mv -f xios_*.out current_run/'+configName)
+		OSinfo('mv -f xios_*.err current_run/'+configName)
+
+
+
+
+if __name__== "__main__":
+  main()
Index: /XIOS/trunk/xios_test_suite/TEST_SUITE/config.py
===================================================================
--- /XIOS/trunk/xios_test_suite/TEST_SUITE/config.py	(revision 1806)
+++ /XIOS/trunk/xios_test_suite/TEST_SUITE/config.py	(revision 1806)
@@ -0,0 +1,55 @@
+import os
+import sys
+
+from default_param import *
+from user_param 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")
+	f.write('UsingServer2 = ' + repr(UsingServer2) + '\n')
+	f.write('RatioServer2 = ' + repr(RatioServer2) + '\n')
+	f.write('NumberPoolsServer2 = ' + repr(NumberPoolsServer2) + '\n')
+	f.write('NumberClients = ' + repr(NumberClients) + '\n')
+	f.write('NumberServers = ' + repr(NumberServers) + '\n')
+	f.write('Duration = ' + repr(Duration) + '\n')
+	f.write('ATMdomain = ' + repr(ATMdomain) + '\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/trunk/xios_test_suite/TEST_SUITE/context_atm.xml
===================================================================
--- /XIOS/trunk/xios_test_suite/TEST_SUITE/context_atm.xml	(revision 1806)
+++ /XIOS/trunk/xios_test_suite/TEST_SUITE/context_atm.xml	(revision 1806)
@@ -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/trunk/xios_test_suite/TEST_SUITE/context_grid_dynamico.xml
===================================================================
--- /XIOS/trunk/xios_test_suite/TEST_SUITE/context_grid_dynamico.xml	(revision 1806)
+++ /XIOS/trunk/xios_test_suite/TEST_SUITE/context_grid_dynamico.xml	(revision 1806)
@@ -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/trunk/xios_test_suite/TEST_SUITE/default_param.py
===================================================================
--- /XIOS/trunk/xios_test_suite/TEST_SUITE/default_param.py	(revision 1806)
+++ /XIOS/trunk/xios_test_suite/TEST_SUITE/default_param.py	(revision 1806)
@@ -0,0 +1,7 @@
+UsingServer2 = 'false'
+RatioServer2 = 50
+NumberPoolsServer2 = 1
+NumberClients = 4
+NumberServers = 4
+Duration = '1d'
+ATMdomain = 'lmdz'
Index: /XIOS/trunk/xios_test_suite/TEST_SUITE/generate_test.py
===================================================================
--- /XIOS/trunk/xios_test_suite/TEST_SUITE/generate_test.py	(revision 1806)
+++ /XIOS/trunk/xios_test_suite/TEST_SUITE/generate_test.py	(revision 1806)
@@ -0,0 +1,176 @@
+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("#machine") :
+#                machine = line.replace("\n","").split(" ")[1]
+#                machine_name = machine_name_dict[machine]
+#                if not machine in machine_list :
+#                    machine_list.append(machine)
+            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]+"]]\n")
+        f.write("\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")
+            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/trunk/xios_test_suite/TEST_SUITE/iodef.xml
===================================================================
--- /XIOS/trunk/xios_test_suite/TEST_SUITE/iodef.xml	(revision 1806)
+++ /XIOS/trunk/xios_test_suite/TEST_SUITE/iodef.xml	(revision 1806)
@@ -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/trunk/xios_test_suite/TEST_SUITE/iodef.xml.template
===================================================================
--- /XIOS/trunk/xios_test_suite/TEST_SUITE/iodef.xml.template	(revision 1806)
+++ /XIOS/trunk/xios_test_suite/TEST_SUITE/iodef.xml.template	(revision 1806)
@@ -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/trunk/xios_test_suite/TEST_SUITE/job_irene.sh
===================================================================
--- /XIOS/trunk/xios_test_suite/TEST_SUITE/job_irene.sh	(revision 1806)
+++ /XIOS/trunk/xios_test_suite/TEST_SUITE/job_irene.sh	(revision 1806)
@@ -0,0 +1,45 @@
+#!/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
+
+
+#============================= X64_IRENE_prod =============================
+
+
+cd $BRIDGE_MSUB_PWD
+
+module load subversion
+export arch=X64_IRENE
+export mode=prod
+
+./run_test
+
+
+#============================= X64_IRENE_debug =============================
+
+
+cd $BRIDGE_MSUB_PWD
+
+module load subversion
+export arch=X64_IRENE
+export mode=debug
+
+./run_test
+
+
+
+
Index: /XIOS/trunk/xios_test_suite/TEST_SUITE/job_jeanzay.sh
===================================================================
--- /XIOS/trunk/xios_test_suite/TEST_SUITE/job_jeanzay.sh	(revision 1806)
+++ /XIOS/trunk/xios_test_suite/TEST_SUITE/job_jeanzay.sh	(revision 1806)
@@ -0,0 +1,245 @@
+#!/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
+
+
+cd ${SLURM_SUBMIT_DIR}
+
+
+#============================= X64_JEANZAY_prod =============================
+
+module load subversion
+export arch=X64_JEANZAY
+export mode=prod
+export machine_name=jeanzay
+export machine_full_name=Jean-Zay
+export xios_dir=/gpfswork/rech/psl/rpsl954/cron_xios/trunk
+export reference_dir=${WORK}
+export reference_file=xios_reference.tar.gz
+export reference_folder=xios_reference
+
+export build_dir=build_${arch}_${mode}
+export xios_revision=$(svn info --show-item revision .. 2>&1)
+export relurl=$(svn info --show-item relative-url .. 2>&1)
+
+source ../arch/arch-${arch}.env
+source $I_MPI_ROOT/intel64/bin/mpivars.sh release_mt
+
+module load cmake
+module load cdo
+module load subversion
+
+ulimit -c 0
+
+bash -c "cd .. && ./make_xios --arch ${arch} --${mode} --build_dir ${build_dir} --job 4"
+
+#----------- Fetch reference -----------
+cp ${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 plein_report.txt
+
+echo "#revision" ${xios_revision} >> plein_report.txt
+echo "#relurl" ${relurl} >> plein_report.txt
+echo "#machine" ${machine_name} >> plein_report.txt
+echo "#build_dir" ${xios_dir}/${build_dir} >> plein_report.txt
+echo "#arch" ${arch} >> plein_report.txt
+echo "#mode" ${mode} >> plein_report.txt
+
+
+rm -f setup.sh
+touch setup.sh
+>setup.sh
+for i in $(ls -d test_*/)
+do
+  cp setup.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.*
+
+mkdir -p ../html
+mkdir -p ../html/test_${machine_name}
+cp plein_report.txt ../html/test_${machine_name}/test_${xios_revision}_${machine_name}_${arch}_${mode}.txt
+
+
+mkdir -p ../html/def_files
+mkdir -p ../html/def_files/${xios_revision}
+
+for i in $(ls -d test_*/)
+do
+  mkdir -p ../html/def_files/${xios_revision}/${i%%}
+  cp ${i%%}/user_params.def ../html/def_files/${xios_revision}/${i%%}      
+  for j in $(ls -d ${i%%/}/config_*)
+  do
+    mkdir -p ../html/def_files/${xios_revision}/${j%%}
+    cp ${j%%}/setup/all_param.def ../html/def_files/${xios_revision}/${j%%}  
+  done
+done
+
+
+bash -c "cd ../html && python generate_test.py"
+
+
+
+#============================= X64_JEANZAY_debug =============================
+
+module load subversion
+export arch=X64_JEANZAY
+export mode=debug
+export machine_name=jeanzay
+export machine_full_name=Jean-Zay
+export xios_dir=/gpfswork/rech/psl/rpsl954/cron_xios/trunk
+export reference_dir=${WORK}
+export reference_file=xios_reference.tar.gz
+export reference_folder=xios_reference
+
+export build_dir=build_${arch}_${mode}
+export xios_revision=$(svn info --show-item revision .. 2>&1)
+export relurl=$(svn info --show-item relative-url .. 2>&1)
+
+source ../arch/arch-${arch}.env
+source $I_MPI_ROOT/intel64/bin/mpivars.sh release_mt
+
+module load cmake
+module load cdo
+module load subversion
+
+ulimit -c 0
+
+bash -c "cd .. && ./make_xios --arch ${arch} --${mode} --build_dir ${build_dir} --job 4"
+
+#----------- Fetch reference -----------
+cp ${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 plein_report.txt
+
+echo "#revision" ${xios_revision} >> plein_report.txt
+echo "#relurl" ${relurl} >> plein_report.txt
+echo "#machine" ${machine_name} >> plein_report.txt
+echo "#build_dir" ${xios_dir}/${build_dir} >> plein_report.txt
+echo "#arch" ${arch} >> plein_report.txt
+echo "#mode" ${mode} >> plein_report.txt
+
+
+rm -f setup.sh
+touch setup.sh
+>setup.sh
+for i in $(ls -d test_*/)
+do
+  cp setup.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.*
+
+mkdir -p ../html
+mkdir -p ../html/test_${machine_name}
+
+cp plein_report.txt ../html/test_${machine_name}/test_${xios_revision}_${machine_name}_${arch}_${mode}.txt
+
+mkdir -p ../html/def_files
+mkdir -p ../html/def_files/${xios_revision}
+
+for i in $(ls -d test_*/)
+do
+  mkdir -p ../html/def_files/${xios_revision}/${i%%}
+  cp ${i%%}/user_params.def ../html/def_files/${xios_revision}/${i%%}      
+  for j in $(ls -d ${i%%/}/config_*)
+  do
+    mkdir -p ../html/def_files/${xios_revision}/${j%%}
+    cp ${j%%}/setup/all_param.def ../html/def_files/${xios_revision}/${j%%}  
+  done
+done
+
+
+bash -c "cd ../html && python generate_test.py"
+bash -c "cd ../html && copy_to_forge_info jeanzay"
+
Index: /XIOS/trunk/xios_test_suite/TEST_SUITE/param.def
===================================================================
--- /XIOS/trunk/xios_test_suite/TEST_SUITE/param.def	(revision 1806)
+++ /XIOS/trunk/xios_test_suite/TEST_SUITE/param.def	(revision 1806)
@@ -0,0 +1,4 @@
+&params_run
+duration='1d'
+nb_proc_atm=8
+/
Index: /XIOS/trunk/xios_test_suite/TEST_SUITE/run_sub_test.sh
===================================================================
--- /XIOS/trunk/xios_test_suite/TEST_SUITE/run_sub_test.sh	(revision 1806)
+++ /XIOS/trunk/xios_test_suite/TEST_SUITE/run_sub_test.sh	(revision 1806)
@@ -0,0 +1,70 @@
+#!/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
+
+
+# Black        0;30     Dark Gray     1;30
+# Red          0;31     Light Red     1;31
+# Green        0;32     Light Green   1;32
+# Brown/Orange 0;33     Yellow        1;33
+# Blue         0;34     Light Blue    1;34
+# Purple       0;35     Light Purple  1;35
+# Cyan         0;36     Light Cyan    1;36
+# Light Gray   0;37     White         1;37
+
+
+{ 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 == ada)]]
+then
+    echo "Testing on ADA"
+    mpirun -np $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/trunk/xios_test_suite/TEST_SUITE/run_test
===================================================================
--- /XIOS/trunk/xios_test_suite/TEST_SUITE/run_test	(revision 1806)
+++ /XIOS/trunk/xios_test_suite/TEST_SUITE/run_test	(revision 1806)
@@ -0,0 +1,108 @@
+#!/bin/bash
+
+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_dir=${xios_reference_dir}
+export reference_file=xios_reference.tar.gz
+export reference_folder=xios_reference
+
+export build_dir=build_${arch}_${mode}
+export xios_revision=$(svn info --show-item revision ../.. 2>&1)
+export relurl=$(svn info --show-item relative-url ../.. 2>&1)
+
+source ../ARCH/arch-${arch}.env
+module load nco
+module load cdo
+module load subversion
+
+set -x 
+
+
+bash -c "cd ../.. && ./make_xios --arch_dir ../ARCH --arch ${arch} --${mode} --build_dir ${build_dir} --job 16"
+
+#----------- Fetch reference -----------
+cp ${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 plein_report.txt
+
+echo "#revision" ${xios_revision} >> plein_report.txt
+echo "#relurl" ${relurl} >> plein_report.txt
+echo "#machine" ${machine_name} >> plein_report.txt
+echo "#build_dir" ${xios_dir}/${build_dir} >> plein_report.txt
+echo "#arch" ${arch} >> plein_report.txt
+echo "#mode" ${mode} >> plein_report.txt
+
+
+rm -f setup.sh
+touch setup.sh
+>setup.sh
+for i in $(ls -d test_*/)
+do
+  cp setup.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 --quiet ug+rwx rundir
+mkdir -p ${rundir}/test_${machine_name} ; chmod --quiet  ug+rwx ${xios_test_suite_repository}/test_${machine_name}
+
+cp plein_report.txt ${rundir}/test_${machine_name}/test_${xios_revision}_${machine_name}_${arch}_${mode}.txt
+chmod -quiet ug+rw ${rundir}/test_${machine_name}/test_${xios_revision}_${machine_name}_${arch}_${mode}.txt
+
+mkdir -p ${rundir}/def_files ;  chmod -quiet ug+rwx ${rundir}/RUN/def_files
+mkdir -p ${rundir}/def_files/${xios_revision} ;  chmod -quiet ug+rwx ${rundir}/def_files/${xios_revision}
+
+for i in $(ls -d test_*/)
+do
+  mkdir -p ${rundir}/def_files/${xios_revision}/${i%%}
+  cp ${i%%}/user_params.def ${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 -R -quiet ug+rwx ${rundir}/def_files
+done
+
Index: /XIOS/trunk/xios_test_suite/TEST_SUITE/run_test_irene
===================================================================
--- /XIOS/trunk/xios_test_suite/TEST_SUITE/run_test_irene	(revision 1806)
+++ /XIOS/trunk/xios_test_suite/TEST_SUITE/run_test_irene	(revision 1806)
@@ -0,0 +1,6 @@
+#!/bin/bash
+
+ccc_msub job_irene.sh
+
+bash -c "python generate_test.py"
+copy_to_thredds  test_${xios_machine_name}_info.js
Index: /XIOS/trunk/xios_test_suite/TEST_SUITE/setup.py
===================================================================
--- /XIOS/trunk/xios_test_suite/TEST_SUITE/setup.py	(revision 1806)
+++ /XIOS/trunk/xios_test_suite/TEST_SUITE/setup.py	(revision 1806)
@@ -0,0 +1,171 @@
+import os
+import sys
+
+
+def main():
+
+	black = lambda text: '\033[0;30m' + text + '\033[0m'
+	red = lambda text: '\033[0;31m' + text + '\033[0m'
+	green = lambda text: '\033[0;32m' + text + '\033[0m'
+	yellow = lambda text: '\033[0;33m' + text + '\033[0m'
+	blue = lambda text: '\033[0;34m' + text + '\033[0m'
+	magenta = lambda text: '\033[0;35m' + text + '\033[0m'
+	cyan = lambda text: '\033[0;36m' + text + '\033[0m'
+	lgray = lambda text: '\033[0;37m' + text + '\033[0m'
+	dgray = lambda text: '\033[1;30m' + text + '\033[0m'
+	lred = lambda text: '\033[1;32m' + text + '\033[0m'
+	lgreen = lambda text: '\033[1;32m' + text + '\033[0m'
+	lyellow = lambda text: '\033[1;33m' + text + '\033[0m'
+	lblue = lambda text: '\033[1;34m' + text + '\033[0m'
+	lpurple = lambda text: '\033[1;35m' + text + '\033[0m'
+	lcyan = lambda text: '\033[1;36m' + text + '\033[0m'
+	white = lambda text: '\033[1;37m' + text + '\033[0m'
+
+	default_nb_config = 7
+
+	nb_config = 1;
+	configs = [0]*default_nb_config
+	 
+	configs_arg = [[], [], [], [], [], [], []] 
+
+	f=open("user_params.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("UsingServer2"):
+					line = line.replace("UsingServer2", "")
+					for word in line.split():
+						configs[0] += 1
+						configs_arg[0].append('UsingServer2 = '+word)
+				elif line.startswith("RatioServer2"):
+					line = line.replace("RatioServer2", "")
+					for word in line.split():
+						configs[1] += 1
+						configs_arg[1].append('RatioServer2 = '+word)
+				elif line.startswith("NumberPoolsServer2"):
+					line = line.replace("NumberPoolsServer2", "")
+					for word in line.split():
+						configs[2] += 1
+						configs_arg[2].append('NumberPoolsServer2 = '+word)
+				elif line.startswith("NumberClients"):
+					line = line.replace("NumberClients", "")
+					for word in line.split():
+						configs[3] += 1
+						configs_arg[3].append('NumberClients = '+word)
+				elif line.startswith("NumberServers"):
+					line = line.replace("NumberServers", "")
+					for word in line.split():
+						configs[4] += 1
+						configs_arg[4].append('NumberServers = '+word)
+				elif line.startswith("Duration"):
+					line = line.replace("Duration", "")
+					for word in line.split():
+						configs[5] += 1
+						configs_arg[5].append('Duration = '+word)
+				elif line.startswith("ATMdomain"):
+					line = line.replace("ATMdomain", "")
+					for word in line.split():
+						configs[6] += 1
+						configs_arg[6].append('ATMdomain = '+word)
+
+				
+	for x in range(default_nb_config):
+		if configs[x]==0:
+			configs[x] =1
+
+	config_id=0
+	for i0 in range(configs[0]):
+		hasContent0 = len(configs_arg[0])>0
+		for i1 in range(configs[1]):
+			hasContent1 = len(configs_arg[1])>0
+			for i2 in range(configs[2]):
+				hasContent2 = len(configs_arg[2])>0
+				for i3 in range(configs[3]):
+					hasContent3 = len(configs_arg[3])>0
+					for i4 in range(configs[4]):
+						hasContent4 = len(configs_arg[4])>0
+						for i5 in range(configs[5]):
+							hasContent5 = len(configs_arg[5])>0
+							for i6 in range(configs[6]):
+								hasContent6 = len(configs_arg[6])>0
+
+								filename = "user_param.py."+repr(config_id)
+								g = open(filename, "w")
+
+								if hasContent0: g.write(configs_arg[0][i0]+'\n')
+								if hasContent1: g.write(configs_arg[1][i1]+'\n')
+								if hasContent2: g.write(configs_arg[2][i2]+'\n')
+								if hasContent3: g.write(configs_arg[3][i3]+'\n')
+								if hasContent4: g.write(configs_arg[4][i4]+'\n')
+								if hasContent5: g.write(configs_arg[5][i5]+'\n')
+								if hasContent6: g.write(configs_arg[6][i6]+'\n')
+							
+								config_id +=1
+								g.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())
+
+
+	for x in range(nb_config):
+		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 OSinfo(runthis):\n")
+		# g.write("	osstdout = subprocess.Popen(runthis, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, close_fds=True)\n")
+		# g.write("	theInfo = osstdout.communicate()[0].strip()\n")
+		# g.write("	if osstdout.returncode!=0:\n")
+		# g.write("		print(runthis+\" failed\")\n")
+		# g.write("		print >> sys.stderr, osstdout.returncode\n")
+		# g.write("		sys.exit()\n")
+		# g.write("	else:\n")
+		# g.write("		print(runthis+\" OK\")\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
+
+	f=open("report.txt", "w")
+	g=open("report.html", "w")
+	f.write("\n\n\nin "+cyan(foldername)+" ...\n\n")
+	g.write("<br><br><br><p>in <font color=\"blue\">"+foldername+"</font> ...</p><br><br>")
+	f.close
+	g.close
+
+
+if __name__== "__main__":
+  main()
Index: /XIOS/trunk/xios_test_suite/TEST_SUITE/test_irene_info.js
===================================================================
--- /XIOS/trunk/xios_test_suite/TEST_SUITE/test_irene_info.js	(revision 1806)
+++ /XIOS/trunk/xios_test_suite/TEST_SUITE/test_irene_info.js	(revision 1806)
@@ -0,0 +1,118 @@
+var test_irene_revision_list = ['1797']
+
+var test_irene_info_list = [
+        ['1797', 'irene', 'build_X64_IRENE_prod', 'trunk', 'Irene', 'X64_IRENE', 'prod', '/ccc/work/cont003/gen0826/gen0826/XIOS_Test_Suite/XIOS_trunk/build_X64_IRENE_prod'],
+        ['1797', 'irene', 'build_X64_IRENE_debug', 'trunk', 'Irene', 'X64_IRENE', 'debug', '/ccc/work/cont003/gen0826/gen0826/XIOS_Test_Suite/XIOS_trunk/build_X64_IRENE_debug']]
+
+var test_irene_1797_X64_IRENE_prod = [
+        ['test_scalar_algo', 'config_UsingSrv2=false_NbServers=2_ATMdomain=lmdz', 'atm_output.nc', 1],
+        ['test_scalar_algo', 'config_UsingSrv2=false_NbServers=2_ATMdomain=lmdz', 'atm_output_zoom.nc', 1],
+        ['test_scalar_algo', 'config_UsingSrv2=false_NbServers=4_ATMdomain=lmdz', 'atm_output.nc', 1],
+        ['test_scalar_algo', 'config_UsingSrv2=false_NbServers=4_ATMdomain=lmdz', 'atm_output_zoom.nc', 1],
+        ['test_scalar_algo', 'config_UsingSrv2=true_NbServers=2_ATMdomain=lmdz', 'atm_output.nc', 1],
+        ['test_scalar_algo', 'config_UsingSrv2=true_NbServers=2_ATMdomain=lmdz', 'atm_output_zoom.nc', 1],
+        ['test_scalar_algo', 'config_UsingSrv2=true_NbServers=4_ATMdomain=lmdz', 'atm_output.nc', 1],
+        ['test_scalar_algo', 'config_UsingSrv2=true_NbServers=4_ATMdomain=lmdz', 'atm_output_zoom.nc', 1],
+        ['test_grid_algo', 'config_UsingSrv2=false_NbServers=2_ATMdomain=lmdz', 'atm_output.nc', 1],
+        ['test_grid_algo', 'config_UsingSrv2=false_NbServers=2_ATMdomain=lmdz', 'atm_output_zoom.nc', 1],
+        ['test_grid_algo', 'config_UsingSrv2=false_NbServers=4_ATMdomain=lmdz', 'atm_output.nc', 1],
+        ['test_grid_algo', 'config_UsingSrv2=false_NbServers=4_ATMdomain=lmdz', 'atm_output_zoom.nc', 1],
+        ['test_domain_algo', 'config_UsingSrv2=true_NbServers=2_ATMdomain=lmdz', 'atm_output.nc', 1],
+        ['test_domain_algo', 'config_UsingSrv2=true_NbServers=2_ATMdomain=lmdz', 'atm_output_expand.nc', 1],
+        ['test_domain_algo', 'config_UsingSrv2=true_NbServers=2_ATMdomain=lmdz', 'atm_output_extract.nc', 1],
+        ['test_domain_algo', 'config_UsingSrv2=true_NbServers=2_ATMdomain=lmdz', 'atm_output_interpolate.nc', 1],
+        ['test_domain_algo', 'config_UsingSrv2=true_NbServers=2_ATMdomain=lmdz', 'atm_output_zoom.nc', 1],
+        ['test_domain_algo', 'config_UsingSrv2=true_NbServers=4_ATMdomain=lmdz', 'atm_output.nc', 1],
+        ['test_domain_algo', 'config_UsingSrv2=true_NbServers=4_ATMdomain=lmdz', 'atm_output_expand.nc', 1],
+        ['test_domain_algo', 'config_UsingSrv2=true_NbServers=4_ATMdomain=lmdz', 'atm_output_extract.nc', 1],
+        ['test_domain_algo', 'config_UsingSrv2=true_NbServers=4_ATMdomain=lmdz', 'atm_output_interpolate.nc', 1],
+        ['test_domain_algo', 'config_UsingSrv2=true_NbServers=4_ATMdomain=lmdz', 'atm_output_zoom.nc', 1],
+        ['test_domain_algo', 'config_UsingSrv2=false_NbServers=2_ATMdomain=lmdz', 'atm_output.nc', 1],
+        ['test_domain_algo', 'config_UsingSrv2=false_NbServers=2_ATMdomain=lmdz', 'atm_output_expand.nc', 1],
+        ['test_domain_algo', 'config_UsingSrv2=false_NbServers=2_ATMdomain=lmdz', 'atm_output_extract.nc', 1],
+        ['test_domain_algo', 'config_UsingSrv2=false_NbServers=2_ATMdomain=lmdz', 'atm_output_interpolate.nc', 1],
+        ['test_domain_algo', 'config_UsingSrv2=false_NbServers=2_ATMdomain=lmdz', 'atm_output_zoom.nc', 1],
+        ['test_domain_algo', 'config_UsingSrv2=false_NbServers=4_ATMdomain=lmdz', 'atm_output.nc', 1],
+        ['test_domain_algo', 'config_UsingSrv2=false_NbServers=4_ATMdomain=lmdz', 'atm_output_expand.nc', 1],
+        ['test_domain_algo', 'config_UsingSrv2=false_NbServers=4_ATMdomain=lmdz', 'atm_output_extract.nc', 1],
+        ['test_domain_algo', 'config_UsingSrv2=false_NbServers=4_ATMdomain=lmdz', 'atm_output_interpolate.nc', 1],
+        ['test_domain_algo', 'config_UsingSrv2=false_NbServers=4_ATMdomain=lmdz', 'atm_output_zoom.nc', 1],
+        ['test_function', 'config_UsingSrv2=true_NbServers=4_ATMdomain=lmdz', 'atm_output.nc', 1],
+        ['test_function', 'config_UsingSrv2=true_NbServers=2_ATMdomain=lmdz', 'atm_output.nc', 1],
+        ['test_function', 'config_UsingSrv2=false_NbServers=4_ATMdomain=lmdz', 'atm_output.nc', 1],
+        ['test_function', 'config_UsingSrv2=false_NbServers=2_ATMdomain=lmdz', 'atm_output.nc', 1],
+        ['test_axis_algo', 'config_UsingSrv2=true_NbServers=2_ATMdomain=lmdz', 'atm_output_zoom.nc', 1],
+        ['test_axis_algo', 'config_UsingSrv2=true_NbServers=4_ATMdomain=lmdz', 'atm_output_zoom.nc', 1]]
+
+
+var test_irene_1797_X64_IRENE_debug = [
+        ['test_scalar_algo', 'config_UsingSrv2=false_NbServers=2_ATMdomain=lmdz', 'atm_output.nc', 1],
+        ['test_scalar_algo', 'config_UsingSrv2=false_NbServers=2_ATMdomain=lmdz', 'atm_output_zoom.nc', 1],
+        ['test_scalar_algo', 'config_UsingSrv2=false_NbServers=4_ATMdomain=lmdz', 'atm_output.nc', 1],
+        ['test_scalar_algo', 'config_UsingSrv2=false_NbServers=4_ATMdomain=lmdz', 'atm_output_zoom.nc', 1],
+        ['test_scalar_algo', 'config_UsingSrv2=true_NbServers=2_ATMdomain=lmdz', 'atm_output.nc', 1],
+        ['test_scalar_algo', 'config_UsingSrv2=true_NbServers=2_ATMdomain=lmdz', 'atm_output_zoom.nc', 1],
+        ['test_scalar_algo', 'config_UsingSrv2=true_NbServers=4_ATMdomain=lmdz', 'atm_output.nc', 1],
+        ['test_scalar_algo', 'config_UsingSrv2=true_NbServers=4_ATMdomain=lmdz', 'atm_output_zoom.nc', 1],
+        ['test_grid_algo', 'config_UsingSrv2=false_NbServers=2_ATMdomain=lmdz', 'atm_output.nc', 1],
+        ['test_grid_algo', 'config_UsingSrv2=false_NbServers=2_ATMdomain=lmdz', 'atm_output_zoom.nc', 1],
+        ['test_grid_algo', 'config_UsingSrv2=false_NbServers=4_ATMdomain=lmdz', 'atm_output.nc', 1],
+        ['test_grid_algo', 'config_UsingSrv2=false_NbServers=4_ATMdomain=lmdz', 'atm_output_zoom.nc', 1],
+        ['test_domain_algo', 'config_UsingSrv2=true_NbServers=2_ATMdomain=lmdz', 'atm_output.nc', 1],
+        ['test_domain_algo', 'config_UsingSrv2=true_NbServers=2_ATMdomain=lmdz', 'atm_output_expand.nc', 1],
+        ['test_domain_algo', 'config_UsingSrv2=true_NbServers=2_ATMdomain=lmdz', 'atm_output_extract.nc', 1],
+        ['test_domain_algo', 'config_UsingSrv2=true_NbServers=2_ATMdomain=lmdz', 'atm_output_interpolate.nc', 1],
+        ['test_domain_algo', 'config_UsingSrv2=true_NbServers=2_ATMdomain=lmdz', 'atm_output_zoom.nc', 1],
+        ['test_domain_algo', 'config_UsingSrv2=true_NbServers=4_ATMdomain=lmdz', 'atm_output.nc', 1],
+        ['test_domain_algo', 'config_UsingSrv2=true_NbServers=4_ATMdomain=lmdz', 'atm_output_expand.nc', 1],
+        ['test_domain_algo', 'config_UsingSrv2=true_NbServers=4_ATMdomain=lmdz', 'atm_output_extract.nc', 1],
+        ['test_domain_algo', 'config_UsingSrv2=true_NbServers=4_ATMdomain=lmdz', 'atm_output_interpolate.nc', 1],
+        ['test_domain_algo', 'config_UsingSrv2=true_NbServers=4_ATMdomain=lmdz', 'atm_output_zoom.nc', 1],
+        ['test_domain_algo', 'config_UsingSrv2=false_NbServers=2_ATMdomain=lmdz', 'atm_output.nc', 1],
+        ['test_domain_algo', 'config_UsingSrv2=false_NbServers=2_ATMdomain=lmdz', 'atm_output_expand.nc', 1],
+        ['test_domain_algo', 'config_UsingSrv2=false_NbServers=2_ATMdomain=lmdz', 'atm_output_extract.nc', 1],
+        ['test_domain_algo', 'config_UsingSrv2=false_NbServers=2_ATMdomain=lmdz', 'atm_output_interpolate.nc', 1],
+        ['test_domain_algo', 'config_UsingSrv2=false_NbServers=2_ATMdomain=lmdz', 'atm_output_zoom.nc', 1],
+        ['test_domain_algo', 'config_UsingSrv2=false_NbServers=4_ATMdomain=lmdz', 'atm_output.nc', 1],
+        ['test_domain_algo', 'config_UsingSrv2=false_NbServers=4_ATMdomain=lmdz', 'atm_output_expand.nc', 1],
+        ['test_domain_algo', 'config_UsingSrv2=false_NbServers=4_ATMdomain=lmdz', 'atm_output_extract.nc', 1],
+        ['test_domain_algo', 'config_UsingSrv2=false_NbServers=4_ATMdomain=lmdz', 'atm_output_interpolate.nc', 1],
+        ['test_domain_algo', 'config_UsingSrv2=false_NbServers=4_ATMdomain=lmdz', 'atm_output_zoom.nc', 1],
+        ['test_function', 'config_UsingSrv2=true_NbServers=4_ATMdomain=lmdz', 'atm_output.nc', 1],
+        ['test_function', 'config_UsingSrv2=true_NbServers=2_ATMdomain=lmdz', 'atm_output.nc', 1],
+        ['test_function', 'config_UsingSrv2=false_NbServers=4_ATMdomain=lmdz', 'atm_output.nc', 1],
+        ['test_function', 'config_UsingSrv2=false_NbServers=2_ATMdomain=lmdz', 'atm_output.nc', 1],
+        ['test_axis_algo', 'config_UsingSrv2=true_NbServers=2_ATMdomain=lmdz', 'atm_output_zoom.nc', 1],
+        ['test_axis_algo', 'config_UsingSrv2=true_NbServers=4_ATMdomain=lmdz', 'atm_output_zoom.nc', 1]]
+
+
+var test_irene_1797_test_scalar_algo_user_params = [
+        'NumberServers = 2, 4',
+        'UsingServer2 = \'false\', \'true\'',
+        'ATMdomain = \'lmdz\'',
+        ]
+
+var test_irene_1797_test_grid_algo_user_params = [
+        'NumberServers = 2, 4',
+        'UsingServer2 = \'false\'',
+        'ATMdomain = \'lmdz\'',
+        ]
+
+var test_irene_1797_test_domain_algo_user_params = [
+        'NumberServers = 2, 4',
+        'UsingServer2 = \'true\', \'false\'',
+        'ATMdomain = \'lmdz\'',
+        ]
+
+var test_irene_1797_test_function_user_params = [
+        'NumberServers = 4, 2',
+        'UsingServer2 = \'true\', \'false\'',
+        'ATMdomain = \'lmdz\'',
+        ]
+
+var test_irene_1797_test_axis_algo_user_params = [
+        'NumberServers = 2, 4',
+        'ATMdomain=\'lmdz\'',
+        'UsingServer2 = \'true\'',
+        ]
+
Index: /XIOS/trunk/xios_test_suite/TEST_SUITE/user_config.py
===================================================================
--- /XIOS/trunk/xios_test_suite/TEST_SUITE/user_config.py	(revision 1806)
+++ /XIOS/trunk/xios_test_suite/TEST_SUITE/user_config.py	(revision 1806)
@@ -0,0 +1,56 @@
+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")
+
+	
+	for folder in test_list:
+		f.write("                   COMMAND cat "+folder+"/report.txt >> report.txt\n")
+		f.write("                   COMMAND cat "+folder+"/report.html >> report.html\n")
+	
+	f.write("                   )\n\n")
+	f.close
+	
+	print >> sys.stderr, 0
+	sys.exit()
+
+if __name__== "__main__":
+  main()
