diff --git a/bfps/_code.py b/bfps/_code.py
index 594421603a860931de6184155e1928c25cbb1767..020952bc4cb615c932e76d8a8a02f7f5f7c8a493 100644
--- a/bfps/_code.py
+++ b/bfps/_code.py
@@ -320,16 +320,35 @@ class _code(_base):
         script_file.write('# @ output = ' + os.path.join(self.work_dir, out_file) + '\n')
         script_file.write('# @ job_type = parallel\n')
         script_file.write('# @ node_usage = not_shared\n')
-        script_file.write('# @ resources = ConsumableCpus(1)\n')
+
+
+        if self.host_info['environment'] == '16node':
+            nb_cpus_per_node = 16
+        if self.host_info['environment'] == '20node':
+            nb_cpus_per_node = 20
+
+        try:
+            nb_process_per_node = int(os.environ['NB_PROC_PER_NODE'])
+        except :
+           nb_process_per_node=nb_cpus_per_node
+        print('nb_process_per_node = {} (NB_PROC_PER_NODE)'.format(nb_process_per_node))
+        
+        nb_cpus_per_task=int(nb_cpus_per_node/nb_process_per_node)
+
+        if nb_cpus_per_task*nb_process_per_node != nb_cpus_per_node:
+            raise Exception('nb cpus {} should be devided per nb proce per node {}(NB_PROC_PER_NODE)'.format(nb_cpus_per_node, nb_process_per_node))
+
+        nb_tasks_per_node = int(nb_cpus_per_node/nb_cpus_per_task)
+        number_of_nodes = int((nprocesses+nb_process_per_node-1)/nb_process_per_node)
+
+        first_node_tasks = nprocesses - (number_of_nodes-1)*nb_process_per_node
+
+        script_file.write('# @ resources = ConsumableCpus({})\n'.format(nb_cpus_per_task))
         script_file.write('# @ network.MPI = sn_all,not_shared,us\n')
         script_file.write('# @ wall_clock_limit = {0}:{1:0>2d}:00\n'.format(hours, minutes))
         assert(type(self.host_info['environment']) != type(None))
-        if self.host_info['environment'] == '16node':
-            tasks_per_node = 16
-            number_of_nodes = int(math.ceil((nprocesses*1.0/16)))
         script_file.write('# @ node = {0}\n'.format(number_of_nodes))
-        script_file.write('# @ tasks_per_node = {0}\n'.format(tasks_per_node))
-        first_node_tasks = nprocesses - (number_of_nodes-1)*tasks_per_node
+        script_file.write('# @ tasks_per_node = {0}\n'.format(nb_process_per_node))
         if (first_node_tasks > 0):
             script_file.write('# @ first_node_tasks = {0}\n'.format(first_node_tasks))
         script_file.write('# @ queue\n')
@@ -374,17 +393,36 @@ class _code(_base):
         script_file.write('# @ job_type = parallel\n')
         script_file.write('# @ node_usage = not_shared\n')
         script_file.write('#\n')
+
+
         if self.host_info['environment'] == '16node':
-            tasks_per_node = 16
-            number_of_nodes = int(math.ceil((nprocesses*1.0/16)))
-        first_node_tasks = nprocesses - (number_of_nodes-1)*tasks_per_node
+            nb_cpus_per_node = 16
+        if self.host_info['environment'] == '20node':
+            nb_cpus_per_node = 20
+
+        try:
+            nb_process_per_node = int(os.environ['NB_PROC_PER_NODE'])
+        except :
+           nb_process_per_node=nb_cpus_per_node
+        print('nb_process_per_node = {} (NB_PROC_PER_NODE)'.format(nb_process_per_node))
+        
+        nb_cpus_per_task=int(nb_cpus_per_node/nb_process_per_node)
+
+        if nb_cpus_per_task*nb_process_per_node != nb_cpus_per_node:
+            raise Exception('nb cpus {} should be devided per nb proce per node {}(NB_PROC_PER_NODE)'.format(nb_cpus_per_node, nb_process_per_node))
+
+        nb_tasks_per_node = int(nb_cpus_per_node/nb_cpus_per_task)
+        number_of_nodes = int((nprocesses+nb_process_per_node-1)/nb_process_per_node)
+
+        first_node_tasks = nprocesses - (number_of_nodes-1)*nb_process_per_node
+
         for job in range(njobs):
             script_file.write('# @ step_name = {0}.$(stepid)\n'.format(self.simname))
-            script_file.write('# @ resources = ConsumableCpus(1)\n')
+            script_file.write('# @ resources = ConsumableCpus({})\n'.format(nb_cpus_per_task))
             script_file.write('# @ network.MPI = sn_all,not_shared,us\n')
             script_file.write('# @ wall_clock_limit = {0}:{1:0>2d}:00\n'.format(hours, minutes))
             script_file.write('# @ node = {0}\n'.format(number_of_nodes))
-            script_file.write('# @ tasks_per_node = {0}\n'.format(tasks_per_node))
+            script_file.write('# @ tasks_per_node = {0}\n'.format(nb_tasks_per_node))
             if (first_node_tasks > 0):
                 script_file.write('# @ first_node_tasks = {0}\n'.format(first_node_tasks))
             script_file.write('# @ queue\n')