Example #1
0
    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 )
Example #2
0
    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 )
Example #3
0
    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)
Example #4
0
    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,
            )
Example #5
0
    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)
Example #6
0
    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)
Example #7
0
    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)
Example #8
0
    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)
Example #9
0
    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)