def test_submit_script(self): """ Test the creation of a simple submission script. """ from aiida.scheduler.datastructures import JobTemplate from aiida.common.datastructures import CodeInfo, code_run_modes s = SlurmScheduler() job_tmpl = JobTemplate() job_tmpl.shebang = '#!/bin/bash' job_tmpl.uuid = str(uuid.uuid4()) job_tmpl.job_resource = s.create_job_resource(num_machines=1, num_mpiprocs_per_machine=1) job_tmpl.max_wallclock_seconds = 24 * 3600 code_info = CodeInfo() code_info.cmdline_params = ["mpirun", "-np", "23", "pw.x", "-npool", "1"] code_info.stdin_name = 'aiida.in' job_tmpl.codes_info = [code_info] job_tmpl.codes_run_mode = code_run_modes.SERIAL submit_script_text = s.get_submit_script(job_tmpl) self.assertTrue( submit_script_text.startswith('#!/bin/bash') ) self.assertTrue( '#SBATCH --no-requeue' in submit_script_text ) self.assertTrue( '#SBATCH --time=1-00:00:00' in submit_script_text ) self.assertTrue( '#SBATCH --nodes=1' in submit_script_text ) self.assertTrue( "'mpirun' '-np' '23' 'pw.x' '-npool' '1'" + \ " < 'aiida.in'" in submit_script_text )
def test_submit_script(self): """ Test the creation of a simple submission script. """ from aiida.scheduler.datastructures import JobTemplate from aiida.common.datastructures import CodeInfo, code_run_modes s = LsfScheduler() job_tmpl = JobTemplate() job_tmpl.shebang = '#!/bin/bash' job_tmpl.uuid = str(uuid.uuid4()) job_tmpl.job_resource = s.create_job_resource(tot_num_mpiprocs=2, parallel_env='b681e480bd.cern.ch') job_tmpl.max_wallclock_seconds = 24 * 3600 code_info = CodeInfo() code_info.cmdline_params = ["mpirun", "-np", "2", "pw.x", "-npool", "1"] code_info.stdin_name = 'aiida.in' job_tmpl.codes_info = [code_info] job_tmpl.codes_run_mode = code_run_modes.SERIAL submit_script_text = s.get_submit_script(job_tmpl) self.assertTrue( submit_script_text.startswith('#!/bin/bash') ) self.assertTrue( '#BSUB -rn' in submit_script_text ) self.assertTrue( '#BSUB -W 24:00' in submit_script_text ) self.assertTrue( '#BSUB -n 2' in submit_script_text ) self.assertTrue( "'mpirun' '-np' '2' 'pw.x' '-npool' '1'" + \ " < 'aiida.in'" in submit_script_text )
def test_submit_script(self): """ Test to verify if scripts works fine with default options """ from aiida.scheduler.datastructures import JobTemplate from aiida.common.datastructures import CodeInfo, code_run_modes s = TorqueScheduler() job_tmpl = JobTemplate() job_tmpl.shebang = '#!/bin/bash' job_tmpl.job_resource = s.create_job_resource(num_machines=1, num_mpiprocs_per_machine=1) job_tmpl.uuid = str(uuid.uuid4()) job_tmpl.max_wallclock_seconds = 24 * 3600 code_info = CodeInfo() code_info.cmdline_params = ["mpirun", "-np", "23", "pw.x", "-npool", "1"] code_info.stdin_name = 'aiida.in' job_tmpl.codes_info = [code_info] job_tmpl.codes_run_mode = code_run_modes.SERIAL submit_script_text = s.get_submit_script(job_tmpl) self.assertTrue('#PBS -r n' in submit_script_text) self.assertTrue(submit_script_text.startswith('#!/bin/bash')) self.assertTrue('#PBS -l nodes=1:ppn=1,walltime=24:00:00' in submit_script_text) self.assertTrue("'mpirun' '-np' '23' 'pw.x' '-npool' '1'" + \ " < 'aiida.in'" in submit_script_text)
def test_submit_script_with_num_machines(self): """ Test to verify that script fails if we specify only num_machines. """ from aiida.scheduler.datastructures import JobTemplate scheduler = LsfScheduler() job_tmpl = JobTemplate() with self.assertRaises(TypeError): job_tmpl.job_resource = scheduler.create_job_resource( num_machines=1, num_mpiprocs_per_machine=1, )
def test_submit_script_with_num_cores_per_mpiproc(self): """ Test to verify if scripts works fine if we pass only num_cores_per_mpiproc value """ from aiida.scheduler.datastructures import JobTemplate from aiida.common.datastructures import CodeInfo, code_run_modes scheduler = SlurmScheduler() job_tmpl = JobTemplate() job_tmpl.shebang = '#!/bin/bash' job_tmpl.job_resource = scheduler.create_job_resource( num_machines=1, num_mpiprocs_per_machine=1, num_cores_per_mpiproc=24) job_tmpl.uuid = str(uuid.uuid4()) job_tmpl.max_wallclock_seconds = 24 * 3600 code_info = CodeInfo() code_info.cmdline_params = [ "mpirun", "-np", "23", "pw.x", "-npool", "1" ] code_info.stdin_name = 'aiida.in' job_tmpl.codes_info = [code_info] job_tmpl.codes_run_mode = code_run_modes.SERIAL submit_script_text = scheduler.get_submit_script(job_tmpl) self.assertTrue('#SBATCH --no-requeue' in submit_script_text) self.assertTrue('#SBATCH --time=1-00:00:00' in submit_script_text) self.assertTrue('#SBATCH --nodes=1' in submit_script_text) self.assertTrue('#SBATCH --ntasks-per-node=1' in submit_script_text) self.assertTrue('#SBATCH --cpus-per-task=24' in submit_script_text) self.assertTrue("'mpirun' '-np' '23' 'pw.x' '-npool' '1'" + \ " < 'aiida.in'" in submit_script_text)
def test_submit_script_with_num_cores_per_machine(self): """ Test to verify if script works fine if we specify only num_cores_per_machine value. """ from aiida.scheduler.datastructures import JobTemplate from aiida.common.datastructures import CodeInfo, code_run_modes s = PbsproScheduler() job_tmpl = JobTemplate() job_tmpl.job_resource = s.create_job_resource( num_machines=1, num_mpiprocs_per_machine=2, num_cores_per_machine=24 ) job_tmpl.uuid = str(uuid.uuid4()) job_tmpl.max_wallclock_seconds = 24 * 3600 code_info = CodeInfo() code_info.cmdline_params = ["mpirun", "-np", "23", "pw.x", "-npool", "1"] code_info.stdin_name = 'aiida.in' job_tmpl.codes_info = [code_info] job_tmpl.codes_run_mode = code_run_modes.SERIAL submit_script_text = s.get_submit_script(job_tmpl) self.assertTrue('#PBS -r n' in submit_script_text) self.assertTrue(submit_script_text.startswith('#!/bin/bash')) self.assertTrue('#PBS -l select=1:mpiprocs=2' in submit_script_text) # Note: here 'num_cores_per_machine' should NOT override the mpiprocs self.assertTrue("'mpirun' '-np' '23' 'pw.x' '-npool' '1'" + " < 'aiida.in'" in submit_script_text)
def test_submit_script_with_num_cores_per_machine_and_mpiproc2(self): """ Test to verify if scripts works fine if we pass num_cores_per_machine and num_cores_per_mpiproc wrong values. It should fail in check: res.num_cores_per_mpiproc * res.num_mpiprocs_per_machine = res.num_cores_per_machine """ from aiida.scheduler.datastructures import JobTemplate scheduler = PbsproScheduler() job_tmpl = JobTemplate() with self.assertRaises(ValueError): job_tmpl.job_resource = scheduler.create_job_resource( num_machines=1, num_mpiprocs_per_machine=1, num_cores_per_machine=24, num_cores_per_mpiproc=23)
def test_submit_script_bad_shebang(self): """ Test to verify if scripts works fine with default options """ from aiida.scheduler.datastructures import JobTemplate from aiida.common.datastructures import CodeInfo, code_run_modes scheduler = PbsproScheduler() code_info = CodeInfo() code_info.cmdline_params = [ "mpirun", "-np", "23", "pw.x", "-npool", "1" ] code_info.stdin_name = 'aiida.in' for (shebang, expected_first_line) in ((None, '#!/bin/bash'), ("", ""), ("NOSET", '#!/bin/bash')): job_tmpl = JobTemplate() if shebang == "NOSET": pass else: job_tmpl.shebang = shebang job_tmpl.job_resource = scheduler.create_job_resource( num_machines=1, num_mpiprocs_per_machine=1) job_tmpl.codes_info = [code_info] job_tmpl.codes_run_mode = code_run_modes.SERIAL submit_script_text = scheduler.get_submit_script(job_tmpl) # This tests if the implementation correctly chooses the default: self.assertEquals( submit_script_text.split('\n')[0], expected_first_line)
def test_submit_script(self): from aiida.scheduler.datastructures import JobTemplate sge = SgeScheduler() job_tmpl = JobTemplate() job_tmpl.job_resource = sge.create_job_resource(parallel_env="mpi8", tot_num_mpiprocs=16) job_tmpl.working_directory = "/home/users/dorigm7s/test" job_tmpl.submit_as_hold = None job_tmpl.rerunnable = None job_tmpl.email = None job_tmpl.email_on_started = None job_tmpl.email_on_terminated = None job_tmpl.job_name = "BestJobEver" job_tmpl.sched_output_path = None job_tmpl.sched_join_files = None job_tmpl.queue_name = "FavQ.q" job_tmpl.priority = None job_tmpl.max_wallclock_seconds = "3600" # "23:59:59" job_tmpl.job_environment = { "HOME": "/home/users/dorigm7s/", "WIENROOT": "$HOME:/WIEN2k" } submit_script_text = sge._get_submit_script_header(job_tmpl) self.assertTrue( '#$ -wd /home/users/dorigm7s/test' in submit_script_text) self.assertTrue('#$ -N BestJobEver' in submit_script_text) self.assertTrue('#$ -q FavQ.q' in submit_script_text) self.assertTrue('#$ -l h_rt=01:00:00' in submit_script_text) # self.assertTrue( 'export HOME=/home/users/dorigm7s/' # in submit_script_text ) self.assertTrue( "# ENVIRONMENT VARIABLES BEGIN ###" in submit_script_text) self.assertTrue( "export HOME='/home/users/dorigm7s/'" in submit_script_text) self.assertTrue( "export WIENROOT='$HOME:/WIEN2k'" in submit_script_text)