mcell3r_slurm_run_range.py 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. #!/usr/bin/env python
  2. import sys
  3. import os
  4. import math
  5. if __name__ == '__main__':
  6. if (len(sys.argv)<5):
  7. print ('\nUsage: %s seed_list_spec seeds_per_node rules_file mdl_file\n' % (sys.argv[0]))
  8. print ('\n Example: %s "1:100:2" 8 Scene.mdlr_rules.xml Scene.main.mdl\n' % (sys.argv[0]))
  9. print (' This would submit mcell jobs to simulate Scene.main.mdl')
  10. print (' using seeds 1 through 100 in steps of 2,')
  11. print (' with 8 individual simulations running concurrently in each job \n\n')
  12. sys.exit()
  13. else:
  14. seed_list_spec = sys.argv[1]
  15. seeds_per_node = int(sys.argv[2])
  16. rules_file = sys.argv[3]
  17. mdl_file = sys.argv[4]
  18. seed_list = []
  19. seed_list_toks = seed_list_spec.split(',')
  20. for seed_list_tok in seed_list_toks:
  21. seed_range_toks = seed_list_tok.split(':')
  22. if (len(seed_range_toks) > 1):
  23. if (len(seed_range_toks) == 2):
  24. seed_list.extend(range(int(seed_range_toks[0]),int(seed_range_toks[1])+1))
  25. else:
  26. seed_list.extend(range(int(seed_range_toks[0]),int(seed_range_toks[1])+1,int(seed_range_toks[2])))
  27. else:
  28. seed_list.append(int(seed_list_tok))
  29. # For mcell3r:
  30. mcell_exec = '$HOME/bin/mcell3.5/mcell3r.py'
  31. mcell_cmd = '%s -s $seed -r %s -m %s' % (mcell_exec,rules_file,mdl_file)
  32. # template without loading optional modules
  33. # job_script_template = '%s; for seed in ${seeds[@]}; do { %s & }; done; wait;'
  34. # template including loading optional modules
  35. job_script_template = 'module load python3/3.6.4; %s; for seed in ${seeds[@]}; do { %s & }; done; wait;'
  36. job_name_template = 'mcell_%04d_%04d'
  37. sbatch_option_template = '--nodes=1 --ntasks=%d --mem-per-cpu=5800 --time=48:00:00 -J %s'
  38. for start_i in range(0,len(seed_list),seeds_per_node):
  39. end_i = start_i + seeds_per_node - 1
  40. if end_i > len(seed_list)-1:
  41. end_i = len(seed_list)-1
  42. seed_chunk = 'seeds=('
  43. for seed in seed_list[start_i:end_i+1]:
  44. seed_chunk = seed_chunk + ' ' + str(seed)
  45. seed_chunk = seed_chunk + ' )'
  46. job_script = job_script_template % (seed_chunk, mcell_cmd)
  47. job_name = job_name_template % (seed_list[start_i], seed_list[end_i])
  48. sbatch_options = sbatch_option_template % (seeds_per_node, job_name)
  49. cmd = "sbatch %s --wrap='%s'" % (sbatch_options, job_script)
  50. print(cmd)
  51. os.system(cmd)