Index: /XIOS/dev/dev_trunk_omp/GENERIC_TESTCASE/check.py
===================================================================
--- /XIOS/dev/dev_trunk_omp/GENERIC_TESTCASE/check.py	(revision 1770)
+++ /XIOS/dev/dev_trunk_omp/GENERIC_TESTCASE/check.py	(revision 1771)
@@ -9,4 +9,5 @@
 from default_param import *
 from user_param import *     
+
 # load default_param first, variables defines in user_param will overwrite the default value 
 
@@ -184,8 +185,10 @@
 		configName = "config_default"
 
-	check_result=False
-
 
 	if not os.path.exists(configName):
+
+		
+		
+
 		os.mkdir(configName)
 		print blue("\n    ****************************************************************")
@@ -201,4 +204,5 @@
 		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/')
@@ -212,4 +216,5 @@
 		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>")	
@@ -226,5 +231,6 @@
 						OSinfo(cmd)	
 				
-				h.write("test for "+lpurple("all NC files")+"     \t"+yellow('INITIALIZED')+"\n")		
+				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        ****************************************")
@@ -239,4 +245,5 @@
 
 				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        ****************************************")
@@ -248,4 +255,6 @@
 		l.write("<br>")
 		h.close()
+		l.close()
+		preport.close()
 		#generate job scripts
 		hostname=os.getenv('machine_name')
@@ -263,4 +272,7 @@
 
 	else:    
+		
+
+
 		print blue("\n    ********************************************************")
 		print blue("    * Directory " + repr(configName) + " already exists")
@@ -285,4 +297,5 @@
 		h=open("report.txt", "a+")
 		l=open("report.html", "a+")
+		preport=open("../plein_report.txt", "a+")
 
 
@@ -303,4 +316,5 @@
 						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        ****************************************")
@@ -312,5 +326,6 @@
 							for gline in g:
 								if gline.strip().startswith("0") or ":" in gline :
-									h.write("test for "+lpurple(thisfile)+"      \t"+green('PASSED')+"\n")		
+									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        ****************************************")
@@ -318,5 +333,6 @@
 									print green("\n        ****************************************")
 								else:
-									h.write("test for "+lpurple(thisfile)+"     \t"+red('FAILED')+"\n")		
+									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        **************************************************")
@@ -347,5 +363,6 @@
 
 				if os.stat("diff.txt").st_size==0:
-					h.write("test for "+lpurple(line)+"     \t"+green('PASSED')+"\n")		
+					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        ****************************************")
@@ -358,4 +375,5 @@
 						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        ****************************************")
@@ -363,5 +381,6 @@
 							print green("\n        ****************************************")
 						else:
-							h.write("test for "+lpurple(line)+"     \t"+red('FAILED')+"\n")		
+							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        **************************************************")
@@ -389,4 +408,6 @@
 		l.write("<br>")
 		h.close()
+		l.close()
+		preport.close()
 
 		if not os.path.exists('current_run'):
Index: /XIOS/dev/dev_trunk_omp/GENERIC_TESTCASE/generate_table.py
===================================================================
--- /XIOS/dev/dev_trunk_omp/GENERIC_TESTCASE/generate_table.py	(revision 1771)
+++ /XIOS/dev/dev_trunk_omp/GENERIC_TESTCASE/generate_table.py	(revision 1771)
@@ -0,0 +1,347 @@
+import os
+import sys
+import array as arr
+import collections
+
+from collections import Counter
+
+
+def filename_list_generator(file_to_open):
+    word = ""
+    with open(file_to_open, "r") as file:
+        file.read(0)
+        for line in file:
+            for word in line.split(" "):
+                if word.endswith(".nc") or word.endswith("_nc_files"):
+                    yield word
+                    break
+
+def configname_list_generator(file_to_open):
+    word = ""
+    with open(file_to_open, "r") as file:
+        file.read(0)
+        for line in file:
+            for word in line.split(" "):
+                if "config_" in word:
+                    yield word
+                    break
+
+def foldername_list_generator(file_to_open):
+    word = ""
+    
+    with open(file_to_open, "r") as file:
+        file.read(0)
+        for line in file:
+            for word in line.split(" "):
+                if word.startswith("test_"):
+                    yield word
+                    break
+
+def result_list_generator(file_to_open):
+    word = ""
+    with open(file_to_open, "r") as file:
+        file.read(0)
+        for line in file:
+            for word in line.split(" "):
+                if word == '-1' or word == '0' or word == '1':
+                    yield(word)
+                    break
+                
+             
+
+def main():
+
+    if os.path.exists('plein_report.txt') :
+        file_to_open="plein_report.txt"
+    else :
+        file_to_open="plein_report_example.txt"
+
+    folderlist=[]
+    for x in foldername_list_generator(file_to_open):
+        folderlist.append(x)
+
+    configlist=[]
+    for x in configname_list_generator(file_to_open):
+        configlist.append(x)
+    
+    filelist=[]
+    for x in filename_list_generator(file_to_open):
+        filelist.append(x)
+
+    resultlist=[]
+    for x in result_list_generator(file_to_open):
+        resultlist.append(x)
+
+    total_records = len(resultlist)
+
+    c = Counter(folderlist)
+    nb_level1 = len(c)
+    
+    my_struncture = dict()
+
+    for i in range(nb_level1):
+        my_key1 = list(c.keys())[i] # algo_name
+        my_struncture.update({my_key1 : dict()})
+        min_range=-1
+        for index in range(total_records) :
+            if my_key1 == folderlist[index] :
+                if min_range == -1 :
+                    min_range = index
+                    max_range = index
+                else :
+                    max_range = index
+        cc = Counter(configlist[min_range: max_range+1])
+        nb_level2 = len(cc)        
+        
+        for j in range(nb_level2) :
+            my_key2 = list(cc.keys())[j] #config_name
+            my_struncture[my_key1].update({my_key2:dict()})
+            min_range = -1
+            for index in range(total_records) :
+                if my_key2 == configlist[index] :
+                    if min_range == -1 :
+                        min_range = index
+                        max_range = index
+                    else :
+                        max_range = index
+
+            ccc = Counter(filelist[min_range: max_range+1])
+            nb_level3 = len(ccc)            
+
+            for k in range(nb_level3) :
+                my_key3 = list(ccc.keys())[k] #filename
+                
+                min_range = -1
+                for index in range(total_records) :
+                    if my_key3 == filelist[index] :
+                        if min_range == -1 :
+                            min_range = index
+                            max_range = index
+                        else :
+                            max_range = index
+                my_struncture[my_key1][my_key2].update({my_key3:resultlist[min_range]})
+
+
+
+    nb_algo = len(my_struncture)
+
+    for x in range(nb_algo) :
+        algo_name = list(my_struncture.keys())[x]
+        nb_config = len(my_struncture[algo_name])
+        for y in range(nb_config) :
+            config_name = list(my_struncture[algo_name].keys())[y]
+            nb_file = len(my_struncture[algo_name][config_name])
+
+    
+    algo_names=list(my_struncture.keys())
+
+    nb_files = [0]*nb_algo
+    nb_configs = [0]*nb_algo
+
+    for x in range(nb_algo) :
+        nb_files[x] = len(my_struncture[list(my_struncture.keys())[x]][list(my_struncture[list(my_struncture.keys())[x]].keys())[0]])
+        nb_configs[x] = len(my_struncture[list(my_struncture.keys())[x]])
+
+    
+    level1_answer=1
+    level2_answer=[1]*nb_algo
+
+    level3_answer = [[]]*nb_algo
+    for x in range(nb_algo) :
+        level3_answer[x] = [1]*nb_configs[x]
+
+    level4_answer = [[[]]]*nb_algo
+    for x in range(nb_algo) :
+        level4_answer[x] = [[]]*nb_configs[x]
+        for y in range(nb_configs[x]) :
+            level4_answer[x][y] = [1]*nb_files[x]
+            for z in range(nb_files[x]) :
+                x_dict = my_struncture
+                y_dict = x_dict[list(x_dict.keys())[x]]
+                z_dict = y_dict[list(y_dict.keys())[y]]
+                level4_answer[x][y][z] = int(z_dict[list(z_dict.keys())[z]])
+
+    index=0
+    for x in range(nb_algo):
+        for y in range(len(level3_answer[x])):
+            for z in range(len(level4_answer[x][y])):
+                level3_answer[x][y] = min(level4_answer[x][y][z], level3_answer[x][y])
+            index+=1
+
+    index=0
+    for x in range(len(level2_answer)):
+        for y in range(len(level3_answer[x])):
+            level2_answer[x] = min(level2_answer[x], level3_answer[x][y])
+        index+=1
+
+    for x in range(len(level2_answer)):
+        level1_answer = min(level1_answer, level2_answer[x])
+
+    ans_dict = {-1: 'Failed', 0: 'Initialized', 1: 'Passed'}
+
+    algo_list = list(my_struncture.keys())
+
+
+    config_list=[]
+    for x in range(nb_algo) :
+        my_list = list(my_struncture[list(my_struncture.keys())[x]].keys())
+        for y in range(len(my_list)) :
+            config_list.append(my_list[y])
+
+
+    file_list=[]
+    for x in range(nb_algo) :
+        l = list(my_struncture.keys())[x]
+        ll = list(my_struncture[l].keys())[0]
+        lll = list(my_struncture[l][ll].keys())
+        for y in range(len(lll)) :
+            file_list.append(lll[y])
+
+    
+    old_config_list=config_list[:]
+    for x in range(len(config_list)) :
+        word = config_list[x]
+        new_word=''
+        for i in range(len(word)) :
+            if word[i]=="@" :
+                new_word = word[i+1:]
+                break
+        # old_config_list.append(new_word)
+        old_config_list[x]=new_word
+        word = new_word.replace("config_", "CONFIG: ")
+        new_word = word.replace("_", " ")
+        config_list[x] = new_word
+
+
+    for x in range(len(file_list)) :
+        word = file_list[x]
+        new_word=''
+        for i in range(len(word)) :
+            if word[i]=="@" :
+                new_word = word[i+1:]
+                break
+        file_list[x] = new_word
+
+    for x in range(len(file_list)) :
+        word = file_list[x]
+        new_word=''
+        for i in range(len(word)) :
+            if word[i]=="@" :
+                new_word = word[i+1:]
+                break
+        file_list[x] = new_word
+
+
+    f=open("xios_table.html", "w")
+    f.write("<html>\n")
+    f.write("<head>\n")
+    f.write("</head>\n")
+    f.write("<body>\n")
+    f.write("   <table id=\"xiostable\">\n")
+    f.write("       <thead></thead>\n")
+    f.write("       <tfoot></tfoot>\n")
+    f.write("       <tbody>\n")
+    f.write("           <tr class=\"level0\" style=\"background-color:#85c1e9;font-size:1em;\" >\n")
+    f.write("               <td>src : "+file_to_open+"</tb>\n")
+    f.write("               <td></td>\n")
+    f.write("               <td></td>\n")
+    f.write("               <td></td>\n")
+    f.write("               <td></td>\n")
+    f.write("               <td></td>\n")
+    f.write("               <td></td>\n")
+    f.write("               <td></td>\n")
+    f.write("           </tr>\n")
+    f.write("           <tr class=\"level1\" style=\"background-color:#85c1e9;font-size:1.6em;\" >\n")
+    f.write("               <td>XIOS Unit tests <span id=\"icon_level1_1\" onclick=\"level1_unfold();\" style=\"display:inline\">&#128317;</span>\n")
+    f.write("                                   <span id=\"icon_level1_2\" onclick=\"level1_fold();\" style=\"display:none\">&#128316;</span></td>\n")
+    f.write("               <td></td>\n")
+    f.write("               <td></td>\n")
+    f.write("               <td></td>\n")
+    f.write("               <td style=\"border-left: 0px\" class=\"testanswer\">"+ ans_dict[level1_answer]+"</td>\n")
+    f.write("               <td></td>\n")
+    f.write("               <td></td>\n")
+    f.write("               <td></td>\n")
+    f.write("           </tr>\n")
+        
+    
+    x_offset = 0
+    y_offset = 0
+    for x in range(nb_algo):
+        f.write("           <tr class=\"level2\" data-algo-type=\""+algo_list[x]+"\" style=\"display:none;background-color:#aed6f1;font-size:1.4em;\">\n")
+        f.write("               <td></td>\n")
+        f.write("               <td>"+algo_list[x]+" <span id=\"icon_level2_"+algo_list[x]+"_1\" onClick=\"level2_unfold(\'"+algo_list[x]+"\');\" style=\"display:inline\">&#128317;</span>\n")
+        f.write("                                    <span id=\"icon_level2_"+algo_list[x]+"_2\" onClick=\"level2_fold(\'"+algo_list[x]+"\');\" style=\"display:none\">&#128316;</span></td>\n")
+        f.write("               <td><div class=\"dropdown\"><button class=\"dropbtn\">&#128270;</button>\n")
+        f.write("               <div class=\"dropdown-content\">\n")
+        f.write("               <a href=\"#\" onclick=\"show_param_"+algo_list[x]+"()\">show user_params.def</a>\n")
+        f.write("               </div></div></td>\n")
+        f.write("               <td> </td>\n")
+        f.write("               <td> </td>\n")
+        f.write("               <td class=\"testanswer\">"+ans_dict[level2_answer[x]]+"</td>\n")
+        f.write("               <td> </td>\n")
+        f.write("               <td> </td>\n")
+        f.write("           </tr>\n")
+        
+        for y in range(nb_configs[x]):
+            f.write("           <tr class=\"level3_"+algo_list[x]+"\" data-algoconfig-type=\""+algo_list[x]+"_"+old_config_list[y_offset]+"\" style=\"display:none;background-color:#d6eaf8;font-size:1.2em;\">\n")
+            f.write("               <td></td>\n")
+            f.write("               <td></td>\n")
+            f.write("               <td>"+config_list[y_offset]+" <span id=\"icon_level3_"+algo_list[x]+"_"+old_config_list[y_offset]+"_1\" onClick=\"level3_unfold(\'"+algo_list[x]+"_"+old_config_list[y_offset]+"\');\" style=\"display:inline\">&#128317;</span>\n")
+            f.write("                                             <span id=\"icon_level3_"+algo_list[x]+"_"+old_config_list[y_offset]+"_2\" onClick=\"level3_fold(\'"+algo_list[x]+"_"+old_config_list[y_offset]+"\');\" style=\"display:none\">&#128316;</span></td>\n")
+            f.write("               <td><div class=\"dropdown\"><button class=\"dropbtn\">&#128270;</button>\n")
+            f.write("               <div class=\"dropdown-content\">\n")
+            f.write("               <a href=\"#\" onclick=\"show_param_"+algo_list[x]+"_config("+repr(old_config_list[y_offset])+")\">show all_param.def</a>\n")
+            f.write("               <a href=\"#\" onclick=\"show_user_param_"+algo_list[x]+"_config("+repr(old_config_list[y_offset])+")\">show user_param.def</a>\n")
+            f.write("               </div></div></td>\n")
+            y_position=y_offset
+            y_offset+=1
+            f.write("               <td></td>\n")
+            f.write("               <td></td>\n")
+            f.write("               <td class=\"testanswer\">"+ ans_dict[level3_answer[x][y]]+"</td>\n")
+            f.write("               <td></td>\n")
+            f.write("           </tr>\n")
+
+            for z in range(nb_files[x]):
+                f.write("           <tr class=\"level4_"+algo_list[x]+"_"+old_config_list[y_position]+"\" style=\"display:none;background-color:#ebf5fb;\">\n")
+                f.write("               <td></td>\n")
+                f.write("               <td></td>\n")
+                f.write("               <td></td>\n")
+                f.write("               <td>"+file_list[x_offset+z]+"</td>\n")
+                f.write("               <td></td>\n")
+                f.write("               <td></td>\n")
+                f.write("               <td></td>\n")
+                f.write("               <td class=\"testanswer\">"+ ans_dict[level4_answer[x][y][z]]+"</td>\n")
+                f.write("            </tr>\n")
+
+        x_offset = x_offset+nb_files[x]
+    
+    f.write("       </tbody>\n")
+    f.write("   </table>\n")
+    f.write("<script>\n")
+    f.write("   var ans = document.getElementsByClassName('testanswer')\n")
+    f.write("   for (var i = 0; i < ans.length; i++) {\n")
+    f.write("       var cell = ans[i]\n")
+    f.write("       if (cell.textContent == 'Passed') {\n")
+    f.write("           cell.classList.add('green') }\n")
+    f.write("       else if (cell.textContent == 'Failed') {\n")
+    f.write("           cell.classList.add('red') }\n")
+    f.write("       else if (cell.textContent == 'Initialized') {\n")
+    f.write("           cell.classList.add('goldenrod') }\n")
+    f.write("   }\n")
+
+    f.write("\n\n")
+   
+    f.write("</script>\n")
+
+    f.write("</body>\n")
+    f.write("</html>\n")
+
+
+
+    f.close()
+
+    
+if __name__== "__main__":
+  main()
+
+
Index: /XIOS/dev/dev_trunk_omp/GENERIC_TESTCASE/graph.html
===================================================================
--- /XIOS/dev/dev_trunk_omp/GENERIC_TESTCASE/graph.html	(revision 1771)
+++ /XIOS/dev/dev_trunk_omp/GENERIC_TESTCASE/graph.html	(revision 1771)
@@ -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/GENERIC_TESTCASE/job_jz.sh
===================================================================
--- /XIOS/dev/dev_trunk_omp/GENERIC_TESTCASE/job_jz.sh	(revision 1770)
+++ /XIOS/dev/dev_trunk_omp/GENERIC_TESTCASE/job_jz.sh	(revision 1771)
@@ -6,6 +6,6 @@
 #SBATCH --hint=nomultithread
 #SBATCH -t 00:10:00              # Temps elapsed maximum d'exÃ©cution
-#SBATCH -o Test_client.out     # Nom du fichier de sortie
-#SBATCH -e Test_client.err     # Nom du fichier d'erreur
+#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
@@ -37,4 +37,6 @@
 # python user_config.py
 
+rm -f plein_report.txt
+
 rm -f setup.sh
 touch setup.sh
@@ -44,5 +46,5 @@
   cp setup.py ${i%%/}      
   cp run_sub_test.sh ${i%%/}      
-  echo "bash -c \"cd " ${i%%/} " && python setup.py\" ">> setup.sh
+  echo "bash -c \"cd " ${i%%/} " && python setup.py \" ">> setup.sh
   echo "echo \"setup.py called from " ${i%%/} "\"">> setup.sh
 done
@@ -60,9 +62,9 @@
 
 cmake .
-#ctest -V 
-ctest --output-on-failure
+ctest -V 
+#ctest --output-on-failure
 make report
 
-echo "Generic testcase report" | mailx -s "report" -a report.html yushan.wang@lsce.ipsl.fr
+#echo "Generic testcase report" | mailx -s "report" -a report.html yushan.wang@lsce.ipsl.fr
 
 rm -f test_*/setup.py
@@ -80,3 +82,3 @@
 #srun --mpi=pmi2 ../bin/test_client.exe
 
-
+python generate_table.py
Index: /XIOS/dev/dev_trunk_omp/GENERIC_TESTCASE/plein_report_example.txt
===================================================================
--- /XIOS/dev/dev_trunk_omp/GENERIC_TESTCASE/plein_report_example.txt	(revision 1771)
+++ /XIOS/dev/dev_trunk_omp/GENERIC_TESTCASE/plein_report_example.txt	(revision 1771)
@@ -0,0 +1,38 @@
+test_domain_algo domain_algo@config_UsingSrv2=true_NbServers=2_ATMdomain=lmdz domain_algo@UsingSrv2=true_NbServers=2_ATMdomain=lmdz@atm_output.nc 1 
+test_domain_algo domain_algo@config_UsingSrv2=true_NbServers=2_ATMdomain=lmdz domain_algo@UsingSrv2=true_NbServers=2_ATMdomain=lmdz@atm_output_expand.nc 1 
+test_domain_algo domain_algo@config_UsingSrv2=true_NbServers=2_ATMdomain=lmdz domain_algo@UsingSrv2=true_NbServers=2_ATMdomain=lmdz@atm_output_extract.nc 1 
+test_domain_algo domain_algo@config_UsingSrv2=true_NbServers=2_ATMdomain=lmdz domain_algo@UsingSrv2=true_NbServers=2_ATMdomain=lmdz@atm_output_interpolate.nc 1 
+test_domain_algo domain_algo@config_UsingSrv2=true_NbServers=2_ATMdomain=lmdz domain_algo@UsingSrv2=true_NbServers=2_ATMdomain=lmdz@atm_output_zoom.nc 1 
+test_domain_algo domain_algo@config_UsingSrv2=true_NbServers=4_ATMdomain=lmdz domain_algo@UsingSrv2=true_NbServers=4_ATMdomain=lmdz@atm_output.nc 1 
+test_domain_algo domain_algo@config_UsingSrv2=true_NbServers=4_ATMdomain=lmdz domain_algo@UsingSrv2=true_NbServers=4_ATMdomain=lmdz@atm_output_expand.nc 1 
+test_domain_algo domain_algo@config_UsingSrv2=true_NbServers=4_ATMdomain=lmdz domain_algo@UsingSrv2=true_NbServers=4_ATMdomain=lmdz@atm_output_extract.nc 1 
+test_domain_algo domain_algo@config_UsingSrv2=true_NbServers=4_ATMdomain=lmdz domain_algo@UsingSrv2=true_NbServers=4_ATMdomain=lmdz@atm_output_interpolate.nc 1 
+test_domain_algo domain_algo@config_UsingSrv2=true_NbServers=4_ATMdomain=lmdz domain_algo@UsingSrv2=true_NbServers=4_ATMdomain=lmdz@atm_output_zoom.nc 1 
+test_domain_algo domain_algo@config_UsingSrv2=false_NbServers=2_ATMdomain=lmdz domain_algo@UsingSrv2=false_NbServers=2_ATMdomain=lmdz@atm_output.nc 1 
+test_domain_algo domain_algo@config_UsingSrv2=false_NbServers=2_ATMdomain=lmdz domain_algo@UsingSrv2=false_NbServers=2_ATMdomain=lmdz@atm_output_expand.nc 1 
+test_domain_algo domain_algo@config_UsingSrv2=false_NbServers=2_ATMdomain=lmdz domain_algo@UsingSrv2=false_NbServers=2_ATMdomain=lmdz@atm_output_extract.nc 1 
+test_domain_algo domain_algo@config_UsingSrv2=false_NbServers=2_ATMdomain=lmdz domain_algo@UsingSrv2=false_NbServers=2_ATMdomain=lmdz@atm_output_interpolate.nc 1 
+test_domain_algo domain_algo@config_UsingSrv2=false_NbServers=2_ATMdomain=lmdz domain_algo@UsingSrv2=false_NbServers=2_ATMdomain=lmdz@atm_output_zoom.nc 1 
+test_domain_algo domain_algo@config_UsingSrv2=false_NbServers=4_ATMdomain=lmdz domain_algo@UsingSrv2=false_NbServers=4_ATMdomain=lmdz@atm_output.nc 1 
+test_domain_algo domain_algo@config_UsingSrv2=false_NbServers=4_ATMdomain=lmdz domain_algo@UsingSrv2=false_NbServers=4_ATMdomain=lmdz@atm_output_expand.nc 1 
+test_domain_algo domain_algo@config_UsingSrv2=false_NbServers=4_ATMdomain=lmdz domain_algo@UsingSrv2=false_NbServers=4_ATMdomain=lmdz@atm_output_extract.nc 1 
+test_domain_algo domain_algo@config_UsingSrv2=false_NbServers=4_ATMdomain=lmdz domain_algo@UsingSrv2=false_NbServers=4_ATMdomain=lmdz@atm_output_interpolate.nc 1 
+test_domain_algo domain_algo@config_UsingSrv2=false_NbServers=4_ATMdomain=lmdz domain_algo@UsingSrv2=false_NbServers=4_ATMdomain=lmdz@atm_output_zoom.nc 1 
+test_scalar_algo scalar_algo@config_UsingSrv2=false_NbServers=2_ATMdomain=lmdz scalar_algo@UsingSrv2=false_NbServers=2_ATMdomain=lmdz@atm_output.nc 1 
+test_scalar_algo scalar_algo@config_UsingSrv2=false_NbServers=2_ATMdomain=lmdz scalar_algo@UsingSrv2=false_NbServers=2_ATMdomain=lmdz@atm_output_zoom.nc 1 
+test_scalar_algo scalar_algo@config_UsingSrv2=false_NbServers=4_ATMdomain=lmdz scalar_algo@UsingSrv2=false_NbServers=4_ATMdomain=lmdz@atm_output.nc 1 
+test_scalar_algo scalar_algo@config_UsingSrv2=false_NbServers=4_ATMdomain=lmdz scalar_algo@UsingSrv2=false_NbServers=4_ATMdomain=lmdz@atm_output_zoom.nc 1 
+test_scalar_algo scalar_algo@config_UsingSrv2=true_NbServers=2_ATMdomain=lmdz scalar_algo@UsingSrv2=true_NbServers=2_ATMdomain=lmdz@atm_output.nc 1 
+test_scalar_algo scalar_algo@config_UsingSrv2=true_NbServers=2_ATMdomain=lmdz scalar_algo@UsingSrv2=true_NbServers=2_ATMdomain=lmdz@atm_output_zoom.nc 1 
+test_scalar_algo scalar_algo@config_UsingSrv2=true_NbServers=4_ATMdomain=lmdz scalar_algo@UsingSrv2=true_NbServers=4_ATMdomain=lmdz@atm_output.nc 1 
+test_scalar_algo scalar_algo@config_UsingSrv2=true_NbServers=4_ATMdomain=lmdz scalar_algo@UsingSrv2=true_NbServers=4_ATMdomain=lmdz@atm_output_zoom.nc 1 
+test_function function@config_UsingSrv2=true_NbServers=4_ATMdomain=lmdz function@UsingSrv2=true_NbServers=4_ATMdomain=lmdz@atm_output.nc 1 
+test_function function@config_UsingSrv2=true_NbServers=2_ATMdomain=lmdz function@UsingSrv2=true_NbServers=2_ATMdomain=lmdz@atm_output.nc 1 
+test_function function@config_UsingSrv2=false_NbServers=4_ATMdomain=lmdz function@UsingSrv2=false_NbServers=4_ATMdomain=lmdz@atm_output.nc 1 
+test_function function@config_UsingSrv2=false_NbServers=2_ATMdomain=lmdz function@UsingSrv2=false_NbServers=2_ATMdomain=lmdz@atm_output.nc 1 
+test_axis_algo axis_algo@config_UsingSrv2=true_NbServers=2_ATMdomain=lmdz axis_algo@UsingSrv2=true_NbServers=2_ATMdomain=lmdz@atm_output_zoom.nc 1 
+test_axis_algo axis_algo@config_UsingSrv2=true_NbServers=4_ATMdomain=lmdz axis_algo@UsingSrv2=true_NbServers=4_ATMdomain=lmdz@atm_output_zoom.nc 1 
+test_grid_algo grid_algo@config_UsingSrv2=false_NbServers=2_ATMdomain=lmdz grid_algo@UsingSrv2=false_NbServers=2_ATMdomain=lmdz@atm_output.nc 1 
+test_grid_algo grid_algo@config_UsingSrv2=false_NbServers=2_ATMdomain=lmdz grid_algo@UsingSrv2=false_NbServers=2_ATMdomain=lmdz@atm_output_zoom.nc 1 
+test_grid_algo grid_algo@config_UsingSrv2=false_NbServers=4_ATMdomain=lmdz grid_algo@UsingSrv2=false_NbServers=4_ATMdomain=lmdz@atm_output.nc 1 
+test_grid_algo grid_algo@config_UsingSrv2=false_NbServers=4_ATMdomain=lmdz grid_algo@UsingSrv2=false_NbServers=4_ATMdomain=lmdz@atm_output_zoom.nc 1 
Index: /XIOS/dev/dev_trunk_omp/GENERIC_TESTCASE/run_sub_test.sh
===================================================================
--- /XIOS/dev/dev_trunk_omp/GENERIC_TESTCASE/run_sub_test.sh	(revision 1770)
+++ /XIOS/dev/dev_trunk_omp/GENERIC_TESTCASE/run_sub_test.sh	(revision 1771)
@@ -34,4 +34,5 @@
 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 ]
Index: /XIOS/dev/dev_trunk_omp/GENERIC_TESTCASE/user_config.py
===================================================================
--- /XIOS/dev/dev_trunk_omp/GENERIC_TESTCASE/user_config.py	(revision 1770)
+++ /XIOS/dev/dev_trunk_omp/GENERIC_TESTCASE/user_config.py	(revision 1771)
@@ -42,7 +42,9 @@
 	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
Index: /XIOS/dev/dev_trunk_omp/GENERIC_TESTCASE/xios-style.css
===================================================================
--- /XIOS/dev/dev_trunk_omp/GENERIC_TESTCASE/xios-style.css	(revision 1771)
+++ /XIOS/dev/dev_trunk_omp/GENERIC_TESTCASE/xios-style.css	(revision 1771)
@@ -0,0 +1,205 @@
+body
+{
+    font-family: Helvetica, sans-serif;
+}
+nav
+{
+    /* float:left; */
+    width:300px;
+    /* border:2px solid black; */
+    /* display: inline-block; */
+    vertical-align: top;
+}
+
+section
+{
+    clear: both;
+    border:2px solid blue;
+    margin-top:50px;
+    /* display: inline-block; */
+    vertical-align: top;
+}
+
+a
+{
+    display:block;
+}
+
+strong
+{
+    background-color:red;/* Fond rouge */
+    color:yellow;/* Texte de couleur jaune */
+    /* position: relative;
+    left: 55px;
+    top: 10px; */
+}
+
+#xiosinfo
+{
+    color: black;
+    padding-left: 20px; 
+    font-weight: bold;
+}
+
+#xiosinfotable
+{
+    margin-left: 20px;
+    margin-bottom: 10px;
+    color: red;
+}
+
+em
+{
+    font-weight: bold;
+    font-size: 1.3em;
+    text-align: right;
+}
+
+#navborder
+{
+    border: solid 2px black;
+    margin: 5px;
+}
+
+footer
+{
+    background-color: rgb(189, 184, 184);
+    border-width: medium;
+    border-style: dashed;
+    border-radius: 10px;
+    position: fixed;
+    bottom: 10px;
+    right: 10px;
+    
+}
+
+
+td
+{
+    /* border: solid 1px black; */
+}
+
+h1, h2
+{
+    text-align: center;
+}
+
+#xiostable
+{
+    /* font-size: large; */
+    font-weight: bolder;
+    margin: 20px;
+    border-collapse: collapse;
+}
+
+button.btn.add::before {
+    font-family: fontAwesome;
+    content: "\f067\00a0";
+  }
+
+
+
+textarea
+{
+    width: 500px;
+}
+
+:required
+{
+    background-color:rgb(212, 0, 255);
+}
+
+.testanswer.green
+{
+    color: green;
+}
+
+.testanswer.red
+{
+    color: red;
+}
+
+.testanswer.goldenrod
+{
+    color: goldenrod;
+}
+
+.fold {
+	background: -webkit-linear-gradient(top, #e5e5e5, #ccc);
+	padding: 10px;
+	width: 280px;
+	height: 80px;
+	color: #999;
+	-webkit-transition: all 0.3s linear;
+	-moz-transition: all 0.3s linear;
+	transition: all 0.3s linear;
+}
+
+.unfolder { display: none; }
+
+.toggle-label {
+	display: inline-block;
+	cursor: pointer;
+	font-size: 11px;
+	border-radius: 5px;
+	padding: 5px;
+}
+.unfold-icon, .fold-icon {
+  color: #999;
+  /* fixed width to stop the icon from wiggling */
+  width: 10px;
+  display: inline-block;
+}
+.unfolder ~ .fold {
+  display: none;
+}
+.unfolder ~ label .fold-icon {
+  display: none;
+}
+
+.unfolder:checked ~ .fold {
+  display: block;
+}
+.unfolder:checked ~ label .fold-icon {
+  display: inline-block;
+}
+.unfolder:checked ~ label .unfold-icon {
+  display: none;
+}
+
+.dropbtn {
+    background-color:transparent;
+    /* color: black;
+    padding: 16px;
+    font-size: 16px;*/
+    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 .dropdown-content {display: block;}
+  
+  .dropdown:hover .dropbtn {background-color:#2e86c1;}
+
Index: /XIOS/dev/dev_trunk_omp/GENERIC_TESTCASE/xios_report.html
===================================================================
--- /XIOS/dev/dev_trunk_omp/GENERIC_TESTCASE/xios_report.html	(revision 1771)
+++ /XIOS/dev/dev_trunk_omp/GENERIC_TESTCASE/xios_report.html	(revision 1771)
@@ -0,0 +1,423 @@
+<!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="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
+        <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet"/>
+        <script>
+            $(document).ready(function()
+            {
+                $('#content').load("xios_table.html");
+                $('#content2').load("xios_table2.html");
+                $('#txtcont').load("report.html");
+            });
+        </script>
+
+<script>
+    function mytoggle() {
+     if( document.getElementById("hidelevel_1").style.display=='none' ){
+       document.getElementById("hidelevel_1").style.display = 'table-row'; // set to table-row instead of an empty string
+     }else{
+       document.getElementById("hidelevel_1").style.display = 'none';
+     }
+    }
+
+    function level1_unfold() {
+        var ans = document.getElementsByClassName('level2')
+        for (var i = 0; i < ans.length; i++) {
+            var cell = ans[i]
+            cell.style.display = 'table-row';
+            document.getElementById("icon_level1_1").style.display='none';
+            document.getElementById("icon_level1_2").style.display='inline';
+        }
+    }
+
+    function level1_fold() {
+        var ans = document.getElementsByClassName('level2')
+        for (var i = 0; i < ans.length; i++) {
+            var cell = ans[i]
+            cell.style.display = 'none';
+            document.getElementById("icon_level1_2").style.display='none';
+            document.getElementById("icon_level1_1").style.display='inline';
+            algoType = cell.getAttribute("data-algo-type");
+            level2_fold(algoType)
+        }
+    }
+
+
+
+    function level2_unfold(algo_name) {
+        var ans = document.getElementsByClassName('level3_'+algo_name)
+        for (var i = 0; i < ans.length; i++) {
+            var cell = ans[i]
+            cell.style.display = 'table-row';
+            document.getElementById("icon_level2_"+algo_name+"_1").style.display='none';
+            document.getElementById("icon_level2_"+algo_name+"_2").style.display='inline';
+        }
+        
+    }
+
+    function level2_fold(algo_name) {
+        var ans = document.getElementsByClassName('level3_'+algo_name)
+        for (var i = 0; i < ans.length; i++) {
+            var cell = ans[i]
+            cell.style.display = 'none';
+            document.getElementById("icon_level2_"+algo_name+"_2").style.display='none';
+            document.getElementById("icon_level2_"+algo_name+"_1").style.display='inline';
+            algoconfigType = cell.getAttribute("data-algoconfig-type");
+            level3_fold(algoconfigType)
+        }
+        
+    }
+
+
+
+    function level3_unfold(algo_config_name) {
+        var ans = document.getElementsByClassName('level4_'+algo_config_name)
+        for (var i = 0; i < ans.length; i++) {
+            var cell = ans[i]
+            cell.style.display = 'table-row';
+            document.getElementById("icon_level3_"+algo_config_name+"_1").style.display='none';
+            document.getElementById("icon_level3_"+algo_config_name+"_2").style.display='inline';
+        }
+    }
+
+    function level3_fold(algo_config_name) {
+        var ans = document.getElementsByClassName('level4_'+algo_config_name)
+        for (var i = 0; i < ans.length; i++) {
+            var cell = ans[i]
+            cell.style.display = 'none';
+            document.getElementById("icon_level3_"+algo_config_name+"_2").style.display='none';
+            document.getElementById("icon_level3_"+algo_config_name+"_1").style.display='inline';
+        }
+    }
+</script>
+
+
+    </head>
+    <body>
+        <header>
+            <h1>XIOS Unit Tests Report Web Page</h1>
+            <h2>(still under construction ... ...)</h2>
+        </header>
+        <nav>
+            <div id="navborder">
+                <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</a></li>
+                    <li><a href="plein_report.txt" target="_blank">Plein Text Report</a>(0:initialized 1:passed -1:failed)</li>
+                </ul> 
+            </div>
+        
+            <div id="navborder">
+                <p id="xiosinfo">Informatin of XIOS source:</p>
+                <table id="xiosinfotable">
+                    <tr>
+                        <td>Branch</td> 
+                        <td><em>trunk</em></td>
+                    </tr>
+                    <tr>
+                        <td>Revision</td>    
+                        <td><em>1740</em></td>
+                    </tr>
+                    <tr>
+                        <td>Machine</td>    
+                        <td><em>Juliot-Curie</em></td>
+                    </tr>
+                    <tr>
+                        <td>Architecture</td>     
+                        <td><em>X86_IRENE</em></td>
+                    </tr>
+                    <tr>
+                        <td>Compile mode</td>     
+                        <td><em>prod</em></td>
+                    </tr>
+                </table> 
+            </div>
+        </nav> 
+        <section>
+            <h3 style="margin-left:25px;">If your FireFox browser does not show the result table, try the following steps:</h3>
+            <ol>
+                <li>open <text style="font-weight: bold;">about:config</text> in the browser.</li>
+                <li>Search <text style="font-weight: bold;">security.fileuri.strict_origin_policy</text>.</li>
+                <li>Change the value to <text style="font-weight: bold;">false</text>.</li>
+            </ol>
+
+            <h2>Results of unit tests</h2>
+
+            <!-- <div>
+                <input type="checkbox" id="toggle" class="unfolder"/> 
+                <label for="toggle" class="toggle-label"><span class="unfold-icon">&#9654;</span><span class="fold-icon">&#9660;</span> Title</label>
+                          
+                <div class="fold">
+                  Content
+                 </div>
+            </div> -->
+            
+
+            <div id="content"></div>
+            
+             
+            <!-- <table id="xiostable">
+                <thead></thead>
+                <tfoot></tfoot>
+                <tbody>
+                <tr>
+                    <td>XIOS Unit tests</td>
+                    <td colspan="3"></td>
+                    <td class="testanswer">Failed</td>
+                    <td> </td>
+                </tr>
+                <tr>
+                    <td rowspan="6"></td>
+                    <td>Scalar algorithms</td>
+                    <td ></td>
+                    <td class="testanswer">Passed</td>
+                    <td> </td>
+                    <td> <form method="post" action=action1.php><input type="submit" value="Show param.def"/></form></td>
+                </tr>
+                <tr>
+                    <td rowspan="2"></td>
+                    <td>configuration 1</td>
+                    <td class="testanswer">Initialized</td>
+                    <td> </td>
+                    <td> <form method="post" action=action2.php><input type="submit" value="Show param.def"/></form></td>
+                </tr>
+                
+                <tr>
+                    <td>configuration 2</td>
+                    <td class="testanswer">Passed</td>
+                    <td> </td>
+                    <td> <form method="post" action=action2.php><input type="submit" value="Show param.def"/></form></td>
+                </tr>
+                <tr>
+                    <td>Axis algorithms</td>
+                    <td></td>
+                    <td class="testanswer">Failed</td>
+                    <td> </td>
+                    <td> <form method="post" action=action1.php><input type="submit" value="Show param.def"/></form></td>
+                </tr>
+                <tr>
+                    <td rowspan="2"></td>
+                    <td>configuration 1</td>
+                    <td class="testanswer">Passed</td>
+                    <td> </td>
+                    <td> <form method="post" action=action2.php><input type="submit" value="Show param.def"/></form></td>
+                </tr>
+                <tr>
+                    <td>configuration 2</td>
+                    <td class="testanswer">Failed</td>
+                    <td> </td>
+                    <td> <form method="post" action=action2.php><input type="submit" value="Show param.def"/></form></td>
+                </tr>
+                </tbody>
+            </table> -->
+
+            <!-- <form method="post" action="traitement.php">
+                <label for="pseudo">Votre pseudo : </label>  
+                <input type="text" name="pseudo" id="pseudo" placeholder="Ex: Zozor"/>
+                <br/>
+                <label for="pass">Votre mot de passe : </label>
+                <input type="password" name="pass" id="pass"/>
+                <br/>
+                <label for="ameliorer">Votre commentaire :</br></label>
+                <textarea name="ameliorer" id="ameliorer" rows="5">
+                    AmÃ©liorer ton site ?!       
+                    Mais enfin ! Il est tellement gÃ©nialissime qu'il n'est pasnÃ©cessaire de l'amÃ©liorer !
+                </textarea>
+                </br>
+                <label for="number">Give a number : </label><input type="number" id="number" name="number" min="0" max="100" step="10"/>
+                </br>
+                <label for="email">Give an email : </label><input type="email" id="email" name="email"/>
+                </br>
+                <label for="url">Give an url : </label><input type="url" id="url" name="url"/>
+                </br>
+                <label for="range">Give another number : </label><input type="range" id="range" name="range" min="0" max="20" step="5"/>
+                </br>
+                <label for="color">Give a color : </label><input type="color" id="color" name="color"/>
+                </br>
+                <label for="date">Give a date : </label><input type="date" id="date" name="date"/>
+                </br>
+                <label for="time">Give a time : </label><input type="time" id="time" name="time"/>
+                </br>
+                <label for="week">Give a week : </label><input type="week" id="week" name="week"/>
+                </br>
+                <label for="month">Give a month : </label><input type="month" id="month" name="month"/>
+                </br>
+                <label for="datetime">Give a date and time : </label><input type="datetime" id="datetime" name="datetime"/>
+                </br>
+                <label for="datetime-local">Give a local date and time : </label><input type="datetime-local" id="datetime-local" name="datetime-local"/>
+                </br>
+                <label for="search">Give something to search : </label><input type="search" id="search" name="search"/>
+            </form> -->
+
+            <!-- <form method="post" action="action.php">
+                <p> Cochez les aliments que vous aimez manger :
+                    <br/>
+                    <input type="checkbox" name="frites" id="frites"/><label for="frites">Frites</label>
+                    <br/>
+                    <input type="checkbox" name="steak" id="steak"/><label for="steak">Steak hachÃ©</label>
+                    <br/>
+                    <input type="checkbox" name="epinards" id="epinards"/><label for="epinards">Epinards</label>
+                    <br/>
+                    <input type="checkbox" name="huitres" id="huitres" checked/><label for="huitres">Huitres</label>
+                </p>
+            </form> -->
+
+            <!-- <form method="post" action="action.php">
+                <p> Veuillez indiquer la tranche d'Ã¢ge dans laquelle vous vous situez :
+                    <br/>
+                    <input type="radio" name="age" value="moins15" id="moins15"/><label for="moins15">Moins de 15 ans</label>
+                    <br/>
+                    <input type="radio" name="age" value="medium15-25" id="medium15-25"/><label for="medium15-25">15-25 ans</label>
+                    <br/>
+                    <input type="radio" name="age" value="medium25-40" id="medium25-40"/><label for="medium25-40">25-40 ans</label>
+                    <br/>
+                    <input type="radio" name="age" value="plus40" id="plus40"/><label for="plus40">Encore plus vieux que Ã§a ?!</label>
+                </p>
+                <p> Sur quel continent habitez-vous ?
+                    <br/>
+                    <input type="radio" name="continent" value="europe" id="europe"/><label for="europe">Europe</label>
+                    <br/>
+                    <input type="radio" name="continent" value="afrique" id="afrique"/><label for="afrique">Afrique</label>
+                    <br/>
+                    <input type="radio" name="continent" value="asie" id="asie"/><label for="asie">Asie</label>
+                    <br/>
+                    <input type="radio" name="continent" value="amerique" id="amerique"/><label for="amerique">AmÃ©rique</label>
+                    <br/>
+                    <input type="radio" name="continent" value="australie" id="australie"/><label for="australie">Australie</label>
+                </p>
+            </form> -->
+
+            <!-- <form method="post" action="action.php">
+                <p><label for="pays">Dans quel pays habitez-vous ?</label>
+                    <br/>
+                    <select name="pays" id="pays">
+                        <optgroup label="Europe">
+                            <option value="espagne">Espagne</option>
+                            <option value="france" selected>France</option>
+                            <option value="italie">Italie</option>
+                            <option value="royaume-uni">Royaume-Uni</option>
+                        </optgroup>
+                        <optgroup label="AmÃ©rique">
+                            <option value="canada">Canada</option>
+                            <option value="etats-unis">Ãtats-Unis</option>
+                        </optgroup>
+                        <optgroup label="Asie">
+                            <option value="chine">Chine</option>
+                            <option value="japon">Japon</option>
+                        </optgroup>
+                    </select>
+                </p>
+            </form> -->
+
+            <!-- <form method="post" action="action.php">
+                <fieldset>
+                    <legend>Vos coordonnÃ©es</legend>
+                    <label for="nom">Quel est votre nom ?</label><input type="text" name="nom" id="nom" autofocus/>
+                    <label for="prenom">Quel est votre prÃ©nom ?</label><input type="text" name="prenom" id="prenom"/>
+                    <label for="email">Quel est votre e-mail ?</label><input type="email" name="email" id="email" required/>
+                </fieldset>
+                <fieldset>
+                    <legend>Votre souhait</legend>
+                    <p> Faites un souhait que vous voudriez voir exaucÃ© :
+                        <input type="radio" name="souhait" value="riche" id="riche"/><label for="riche">Etre riche</label>
+                        <input type="radio" name="souhait" value="celebre" id="celebre"/><label for="celebre">Etre cÃ©lÃšbre</label>
+                        <input type="radio" name="souhait" value="intelligent" id="intelligent"/><label for="intelligent">Etre <strong>encore</strong> plus intelligent</label>
+                        <input type="radio" name="souhait" value="autre" id="autre"/><label for="autre">Autre...</label>
+                    </p>
+                    <p><label for="precisions">Si "Autre", veuillez prÃ©ciser:</label>
+                        <textarea name="precisions" id="precisions" cols="40" rows="4"></textarea>
+                    </p>
+                </fieldset>
+                <fieldset>
+                    <input type="submit" value="Envoyer"/>
+                </fieldset>
+            </form> -->
+        
+            <!-- <div id="txtcont"></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>
+    function show_param_test_axis_algo() 
+    {
+        var myWindow = window.open("test_axis_algo/user_params.def", "", "width=400,height=400,left=1500,top=400");
+    }
+    function show_param_test_domain_algo() 
+    {
+        var myWindow = window.open("test_domain_algo/user_params.def", "", "width=400,height=400,left=1500,top=400");
+    }
+    function show_param_test_grid_algo() 
+    {
+        var myWindow = window.open("test_grid_algo/user_params.def", "", "width=400,height=400,left=1500,top=400");
+    }
+    function show_param_test_scalar_algo() 
+    {
+        var myWindow = window.open("test_scalar_algo/user_params.def", "", "width=400,height=400,left=1500,top=400");
+    }
+    function show_param_test_function() 
+    {
+        var myWindow = window.open("test_function/user_params.def", "", "width=400,height=400,left=1500,top=400");
+    }
+
+
+
+
+
+    function show_param_test_axis_algo_config(config_name) 
+    {
+        var myWindow = window.open("test_axis_algo/"+config_name+"/setup/all_param.def", "", "width=400,height=400,left=1500,top=400");
+    }
+    function show_param_test_domain_algo_config(config_name) 
+    {
+        var myWindow = window.open("test_domain_algo/"+config_name+"/setup/all_param.def", "", "width=400,height=400,left=1500,top=400");
+    }
+    function show_param_test_grid_algo_config(config_name) 
+    {
+        var myWindow = window.open("test_grid_algo/"+config_name+"/setup/all_param.def", "", "width=400,height=400,left=1500,top=400");
+    }
+    function show_param_test_scalar_algo_config(config_name) 
+    {
+        var myWindow = window.open("test_scalar_algo/"+config_name+"/setup/all_param.def", "", "width=400,height=400,left=1500,top=400");
+    }
+    function show_param_test_function_config(config_name) 
+    {
+        var myWindow = window.open("test_function/"+config_name+"/setup/all_param.def", "", "width=400,height=400,left=1500,top=400");
+    }
+
+
+
+    function show_user_param_test_axis_algo_config(config_name) 
+    {
+        var myWindow = window.open("test_axis_algo/"+config_name+"/setup/user_param.def", "", "width=400,height=400,left=1500,top=400");
+    }
+    function show_user_param_test_domain_algo_config(config_name) 
+    {
+        var myWindow = window.open("test_domain_algo/"+config_name+"/setup/user_param.def", "", "width=400,height=400,left=1500,top=400");
+    }
+    function show_user_param_test_grid_algo_config(config_name) 
+    {
+
+        var myWindow = window.open("test_grid_algo/"+config_name+"/setup/user_param.def", "", "width=400,height=400,left=1500,top=400");
+    }
+    function show_user_param_test_scalar_algo_config(config_name) 
+    {
+        var myWindow = window.open("test_scalar_algo/"+config_name+"/setup/user_param.def", "", "width=400,height=400,left=1500,top=400");
+    }
+    function show_user_param_test_function_config(config_name) 
+    {
+        var myWindow = window.open("test_function/"+config_name+"/setup/user_param.def", "", "width=400,height=400,left=1500,top=400");
+    }
+</script>
