コード例 #1
0
ファイル: vasp_tasks_src.py プロジェクト: gmatteo/abiflows
def createVaspSRCFireworks(vasp_input_set, task_helper, task_type, control_procedure,
                           custodian_handlers, max_restarts, src_cleaning, task_index, spec,
                           setup_spec_update=None, run_spec_update=None):
    # Make a full copy of the spec
    if spec is None:
        spec = {}
    spec = copy.deepcopy(spec)
    spec['_add_launchpad_and_fw_id'] = True
    spec['_add_fworker'] = True
    # Initialize the SRC task_index
    if task_index is not None:
        src_task_index = SRCTaskIndex.from_any(task_index)
    else:
        src_task_index = SRCTaskIndex.from_string(task_type)
    spec['SRC_task_index'] = src_task_index

    # SetupTask
    setup_spec = copy.deepcopy(spec)
    # Remove any initial queue_adapter_update from the spec
    setup_spec.pop('queue_adapter_update', None)

    setup_spec = set_short_single_core_to_spec(setup_spec)
    setup_spec['_preserve_fworker'] = True
    setup_spec['_pass_job_info'] = True
    setup_spec.update({} if setup_spec_update is None else setup_spec_update)
    setup_task = VaspSetupTask(vasp_input_set=vasp_input_set, deps=None, task_helper=task_helper, task_type=task_type)
    setup_fw = Firework(setup_task, spec=setup_spec, name=src_task_index.setup_str)

    # RunTask
    run_spec = copy.deepcopy(spec)
    run_spec['SRC_task_index'] = src_task_index
    run_spec['_preserve_fworker'] = True
    run_spec['_pass_job_info'] = True
    run_spec.update({} if run_spec_update is None else run_spec_update)
    run_task = VaspRunTask(control_procedure=control_procedure, task_helper=task_helper, task_type=task_type,
                           custodian_handlers=custodian_handlers)
    run_fw = Firework(run_task, spec=run_spec, name=src_task_index.run_str)

    # ControlTask
    control_spec = copy.deepcopy(spec)
    control_spec = set_short_single_core_to_spec(control_spec)
    control_spec['SRC_task_index'] = src_task_index
    control_spec['_allow_fizzled_parents'] = True
    control_task = VaspControlTask(control_procedure=control_procedure, manager=None, max_restarts=max_restarts,
                                   src_cleaning=src_cleaning, task_helper=task_helper)
    control_fw = Firework(control_task, spec=control_spec, name=src_task_index.control_str)

    links_dict = {setup_fw.fw_id: [run_fw.fw_id],
                  run_fw.fw_id: [control_fw.fw_id]}
    return {'setup_fw': setup_fw, 'run_fw': run_fw, 'control_fw': control_fw, 'links_dict': links_dict,
            'fws': [setup_fw, run_fw, control_fw]}
コード例 #2
0
def createVaspSRCFireworks(vasp_input_set, task_helper, task_type, control_procedure,
                           custodian_handlers, max_restarts, src_cleaning, task_index, spec,
                           setup_spec_update=None, run_spec_update=None):
    # Make a full copy of the spec
    if spec is None:
        spec = {}
    spec = copy.deepcopy(spec)
    spec['_add_launchpad_and_fw_id'] = True
    spec['_add_fworker'] = True
    # Initialize the SRC task_index
    if task_index is not None:
        src_task_index = SRCTaskIndex.from_any(task_index)
    else:
        src_task_index = SRCTaskIndex.from_string(task_type)
    spec['SRC_task_index'] = src_task_index

    # SetupTask
    setup_spec = copy.deepcopy(spec)
    # Remove any initial queue_adapter_update from the spec
    setup_spec.pop('queue_adapter_update', None)

    setup_spec = set_short_single_core_to_spec(setup_spec)
    setup_spec['_preserve_fworker'] = True
    setup_spec['_pass_job_info'] = True
    setup_spec.update({} if setup_spec_update is None else setup_spec_update)
    setup_task = VaspSetupTask(vasp_input_set=vasp_input_set, deps=None, task_helper=task_helper, task_type=task_type)
    setup_fw = Firework(setup_task, spec=setup_spec, name=src_task_index.setup_str)

    # RunTask
    run_spec = copy.deepcopy(spec)
    run_spec['SRC_task_index'] = src_task_index
    run_spec['_preserve_fworker'] = True
    run_spec['_pass_job_info'] = True
    run_spec.update({} if run_spec_update is None else run_spec_update)
    run_task = VaspRunTask(control_procedure=control_procedure, task_helper=task_helper, task_type=task_type,
                           custodian_handlers=custodian_handlers)
    run_fw = Firework(run_task, spec=run_spec, name=src_task_index.run_str)

    # ControlTask
    control_spec = copy.deepcopy(spec)
    control_spec = set_short_single_core_to_spec(control_spec)
    control_spec['SRC_task_index'] = src_task_index
    control_spec['_allow_fizzled_parents'] = True
    control_task = VaspControlTask(control_procedure=control_procedure, manager=None, max_restarts=max_restarts,
                                   src_cleaning=src_cleaning, task_helper=task_helper)
    control_fw = Firework(control_task, spec=control_spec, name=src_task_index.control_str)

    links_dict = {setup_fw.fw_id: [run_fw.fw_id],
                  run_fw.fw_id: [control_fw.fw_id]}
    return {'setup_fw': setup_fw, 'run_fw': run_fw, 'control_fw': control_fw, 'links_dict': links_dict,
            'fws': [setup_fw, run_fw, control_fw]}
コード例 #3
0
def createSRCFireworksOld(task_class, task_input, SRC_spec, initialization_info, wf_task_index_prefix, current_task_index=1,
                          handlers=None, validators=None,
                          deps=None, task_type=None, queue_adapter_update=None):
    SRC_spec = copy.deepcopy(SRC_spec)
    SRC_spec['initialization_info'] = initialization_info
    SRC_spec['_add_launchpad_and_fw_id'] = True
    SRC_spec['SRCScheme'] = True
    prefix_allowed_chars = ['-']
    prefix_test_string = str(wf_task_index_prefix)
    for allowed_char in prefix_allowed_chars:
        prefix_test_string = prefix_test_string.replace(allowed_char, "")
    if not prefix_test_string.isalnum():
        raise ValueError('wf_task_index_prefix should only contain letters '
                         'and the following characters : {}'.format(prefix_test_string))
    SRC_spec['wf_task_index_prefix'] = wf_task_index_prefix

    # Remove any initial queue_adapter_update from the spec
    SRC_spec.pop('queue_adapter_update', None)
    if queue_adapter_update is not None:
        SRC_spec['queue_adapter_update'] = queue_adapter_update

    # Setup (Autoparal) run
    SRC_spec_setup = copy.deepcopy(SRC_spec)
    SRC_spec_setup = set_short_single_core_to_spec(SRC_spec_setup)
    SRC_spec_setup['wf_task_index'] = '_'.join(['setup', wf_task_index_prefix, str(current_task_index)])
    setup_task = task_class(task_input, is_autoparal=True, use_SRC_scheme=True, deps=deps, task_type=task_type)
    setup_fw = Firework(setup_task, spec=SRC_spec_setup, name=SRC_spec_setup['wf_task_index'])
    # Actual run of simulation
    SRC_spec_run = copy.deepcopy(SRC_spec)
    SRC_spec_run['wf_task_index'] = '_'.join(['run', wf_task_index_prefix, str(current_task_index)])
    run_task = task_class(task_input, is_autoparal=False, use_SRC_scheme=True, deps=deps, task_type=task_type)
    run_fw = Firework(run_task, spec=SRC_spec_run, name=SRC_spec_run['wf_task_index'])
    # Check memory firework
    SRC_spec_check = copy.deepcopy(SRC_spec)
    SRC_spec_check = set_short_single_core_to_spec(SRC_spec_check)
    SRC_spec_check['wf_task_index'] = '_'.join(['check', wf_task_index_prefix, str(current_task_index)])
    check_task = CheckTask(handlers=handlers, validators=validators)
    SRC_spec_check['_allow_fizzled_parents'] = True
    check_fw = Firework(check_task, spec=SRC_spec_check, name=SRC_spec_check['wf_task_index'])
    links_dict = {setup_fw.fw_id: [run_fw.fw_id],
                  run_fw.fw_id: [check_fw.fw_id]}
    return {'setup_fw': setup_fw, 'run_fw': run_fw, 'check_fw': check_fw, 'links_dict': links_dict,
            'fws': [setup_fw, run_fw, check_fw]}
コード例 #4
0
    def __init__(self,
                 neb_vasp_input_set,
                 spec,
                 neb_terminals,
                 relax_terminals=True,
                 n_insert=1,
                 n_nebs=3,
                 relax_vasp_input_set=None,
                 initial_neb_structures=None,
                 climbing_image=True):
        user_incar_settings = {'NPAR': 4, 'ISIF': 0, 'SIGMA': 0.2, 'ISMEAR': 0}
        if n_nebs < 1:
            raise ValueError('Minimum one NEB ...')
        if relax_terminals and initial_neb_structures is not None:
            raise ValueError(
                'Cannot relax terminals and start from initial NEB structures')
        # Initializes fws list and links_dict
        fws = []
        links_dict = {}

        if 'additional_controllers' in spec:
            additional_controllers = spec['additional_controllers']
            spec.pop('additional_controllers')
        else:
            additional_controllers = [
                WalltimeController(),
                MemoryController(),
                VaspXMLValidatorController()
            ]

        # Control procedure
        control_procedure = ControlProcedure(
            controllers=additional_controllers)

        # First NEB
        gen_neb_spec = spec.copy()
        if relax_terminals:
            gen_neb_spec['terminal_start'] = None
            gen_neb_spec['terminal_end'] = None
        else:
            gen_neb_spec['terminal_start'] = neb_terminals[0]
            gen_neb_spec['terminal_end'] = neb_terminals[1]

        # gen_neb_spec['structures'] = neb_terminals
        gen_neb_spec = set_short_single_core_to_spec(gen_neb_spec)

        terminal_start_relax_task_type = 'MPRelaxVasp-start'
        terminal_end_relax_task_type = 'MPRelaxVasp-end'
        terminal_start_task_type = None
        terminal_end_task_type = None
        if relax_terminals:
            terminal_start_task_type = terminal_start_relax_task_type
            terminal_end_task_type = terminal_end_relax_task_type
        gen_neb_task = GenerateNEBRelaxationTask(
            n_insert=n_insert,
            user_incar_settings=user_incar_settings,
            climbing_image=climbing_image,
            task_index='neb1',
            terminal_start_task_type=terminal_start_task_type,
            terminal_end_task_type=terminal_end_task_type)
        gen_neb_fw = Firework([gen_neb_task],
                              spec=gen_neb_spec,
                              name='gen-neb1')
        fws.append(gen_neb_fw)

        if relax_terminals:
            # Start terminal
            relax_task_helper = MPRelaxTaskHelper()
            vis_start = relax_vasp_input_set(
                neb_terminals[0], user_incar_settings=user_incar_settings)
            start_src_fws = createVaspSRCFireworks(
                vasp_input_set=vis_start,
                task_helper=relax_task_helper,
                task_type=terminal_start_relax_task_type,
                control_procedure=control_procedure,
                custodian_handlers=[],
                max_restarts=10,
                src_cleaning=None,
                task_index=None,
                spec=None,
                setup_spec_update=None,
                run_spec_update=None)
            fws.extend(start_src_fws['fws'])
            links_dict_update(links_dict=links_dict,
                              links_update=start_src_fws['links_dict'])
            linkupdate = {start_src_fws['control_fw'].fw_id: gen_neb_fw.fw_id}
            links_dict_update(links_dict=links_dict, links_update=linkupdate)

            # End terminal

            vis_end = relax_vasp_input_set(
                neb_terminals[1], user_incar_settings=user_incar_settings)
            end_src_fws = createVaspSRCFireworks(
                vasp_input_set=vis_end,
                task_helper=relax_task_helper,
                task_type=terminal_end_relax_task_type,
                control_procedure=control_procedure,
                custodian_handlers=[],
                max_restarts=10,
                src_cleaning=None,
                task_index=None,
                spec=None,
                setup_spec_update=None,
                run_spec_update=None)
            fws.extend(end_src_fws['fws'])
            links_dict_update(links_dict=links_dict,
                              links_update=end_src_fws['links_dict'])
            linkupdate = {end_src_fws['control_fw'].fw_id: gen_neb_fw.fw_id}
            links_dict_update(links_dict=links_dict, links_update=linkupdate)

        if n_nebs > 1:
            for ineb in range(2, n_nebs + 1):
                prev_gen_neb_fw = gen_neb_fw
                gen_neb_spec = spec.copy()
                gen_neb_spec['structures'] = None
                gen_neb_spec = set_short_single_core_to_spec(gen_neb_spec)
                gen_neb_task = GenerateNEBRelaxationTask(
                    n_insert=n_insert,
                    user_incar_settings=user_incar_settings,
                    climbing_image=climbing_image,
                    task_index='neb{:d}'.format(ineb),
                    prev_neb_task_type='neb{:d}'.format(ineb - 1),
                    terminal_start_task_type=terminal_start_task_type,
                    terminal_end_task_type=terminal_end_task_type)
                gen_neb_fw = Firework([gen_neb_task],
                                      spec=gen_neb_spec,
                                      name='gen-neb{:d}'.format(ineb))
                fws.append(gen_neb_fw)
                linkupdate = {prev_gen_neb_fw.fw_id: gen_neb_fw.fw_id}
                links_dict_update(links_dict=links_dict,
                                  links_update=linkupdate)
                if relax_terminals:
                    linkupdate = {
                        start_src_fws['control_fw'].fw_id: gen_neb_fw.fw_id
                    }
                    links_dict_update(links_dict=links_dict,
                                      links_update=linkupdate)
                    linkupdate = {
                        end_src_fws['control_fw'].fw_id: gen_neb_fw.fw_id
                    }
                    links_dict_update(links_dict=links_dict,
                                      links_update=linkupdate)

        if climbing_image:
            wfname = "MPcNEBRelaxFWWorkflowSRC"
        else:
            wfname = "MPcNEBRelaxFWWorkflowSRC"
        self.wf = Workflow(fireworks=fws,
                           links_dict=links_dict,
                           metadata={
                               'workflow_class': self.workflow_class,
                               'workflow_module': self.workflow_module
                           },
                           name=wfname)
コード例 #5
0
    def __init__(self, neb_vasp_input_set, spec, neb_terminals, relax_terminals=True, n_insert=1, n_nebs=3,
                 relax_vasp_input_set=None, initial_neb_structures=None, climbing_image=True, sort_structure=False,
                 neb_optimizer=None, neb_optimizing_procedure=None):
        user_incar_settings = {'NPAR': 4, 'ISIF': 0, 'SIGMA': 0.2, 'ISMEAR': 0, 'EDIFF': 5.0e-05}
        neb_user_incar_settings = {'NPAR': 4, 'ISIF': 0, 'SIGMA': 0.2, 'ISMEAR': 0, 'EDIFF': 5.0e-05, 'NSW': 25}
        if n_nebs < 1:
            raise ValueError('Minimum one NEB ...')
        if relax_terminals and initial_neb_structures is not None:
            raise ValueError('Cannot relax terminals and start from initial NEB structures')
        # Initializes fws list and links_dict
        fws = []
        links_dict = {}

        if 'additional_controllers' in spec:
            additional_controllers = spec['additional_controllers']
            spec.pop('additional_controllers')
        else:
            additional_controllers = [WalltimeController(), MemoryController(), VaspXMLValidatorController()]

        # Control procedure
        control_procedure = ControlProcedure(controllers=additional_controllers)

        # First NEB
        gen_neb_spec = spec.copy()
        if relax_terminals:
            gen_neb_spec['terminal_start'] = None
            gen_neb_spec['terminal_end'] = None
        else:
            gen_neb_spec['terminal_start'] = neb_terminals[0]
            gen_neb_spec['terminal_end'] = neb_terminals[1]

        # gen_neb_spec['structures'] = neb_terminals
        gen_neb_spec = set_short_single_core_to_spec(gen_neb_spec)

        terminal_start_relax_task_type = 'MPRelaxVasp-start'
        terminal_end_relax_task_type = 'MPRelaxVasp-end'
        terminal_start_task_type = None
        terminal_end_task_type = None
        if relax_terminals:
            terminal_start_task_type = terminal_start_relax_task_type
            terminal_end_task_type = terminal_end_relax_task_type
        gen_neb_task = GenerateNEBRelaxationTask(n_insert=n_insert, user_incar_settings=neb_user_incar_settings,
                                                 climbing_image=climbing_image, task_index='neb1',
                                                 terminal_start_task_type=terminal_start_task_type,
                                                 terminal_end_task_type=terminal_end_task_type,
                                                 neb_optimizer=neb_optimizer,
                                                 neb_optimizing_procedure=neb_optimizing_procedure)
        gen_neb_fw = Firework([gen_neb_task], spec=gen_neb_spec, name='gen-neb1')
        fws.append(gen_neb_fw)

        if relax_terminals:
            # Start terminal
            relax_task_helper = MPRelaxTaskHelper()
            vis_start = relax_vasp_input_set(neb_terminals[0], user_incar_settings=user_incar_settings,
                                             sort_structure=sort_structure)
            start_src_fws = createVaspSRCFireworks(vasp_input_set=vis_start, task_helper=relax_task_helper,
                                                   task_type=terminal_start_relax_task_type,
                                                   control_procedure=control_procedure,
                                                   custodian_handlers=[], max_restarts=10, src_cleaning=None,
                                                   task_index=None,
                                                   spec=None,
                                                   setup_spec_update=None, run_spec_update=None)
            fws.extend(start_src_fws['fws'])
            links_dict_update(links_dict=links_dict, links_update=start_src_fws['links_dict'])
            linkupdate = {start_src_fws['control_fw'].fw_id: gen_neb_fw.fw_id}
            links_dict_update(links_dict=links_dict,
                              links_update=linkupdate)

            # End terminal
            vis_end = relax_vasp_input_set(neb_terminals[1], user_incar_settings=user_incar_settings,
                                           sort_structure=sort_structure)
            end_src_fws = createVaspSRCFireworks(vasp_input_set=vis_end, task_helper=relax_task_helper,
                                                 task_type=terminal_end_relax_task_type,
                                                 control_procedure=control_procedure,
                                                 custodian_handlers=[], max_restarts=10, src_cleaning=None,
                                                 task_index=None,
                                                 spec=None,
                                                 setup_spec_update=None, run_spec_update=None)
            fws.extend(end_src_fws['fws'])
            links_dict_update(links_dict=links_dict, links_update=end_src_fws['links_dict'])
            linkupdate = {end_src_fws['control_fw'].fw_id: gen_neb_fw.fw_id}
            links_dict_update(links_dict=links_dict,
                              links_update=linkupdate)

        if n_nebs > 1:
            for ineb in range(2, n_nebs+1):
                prev_gen_neb_fw = gen_neb_fw
                gen_neb_spec = spec.copy()
                gen_neb_spec['structures'] = None
                gen_neb_spec = set_short_single_core_to_spec(gen_neb_spec)
                gen_neb_task = GenerateNEBRelaxationTask(n_insert=n_insert,
                                                         user_incar_settings=neb_user_incar_settings,
                                                         climbing_image=climbing_image,
                                                         task_index='neb{:d}'.format(ineb),
                                                         prev_neb_task_type='neb{:d}'.format(ineb-1),
                                                         terminal_start_task_type=terminal_start_task_type,
                                                         terminal_end_task_type=terminal_end_task_type,
                                                         neb_optimizer=neb_optimizer,
                                                         neb_optimizing_procedure=neb_optimizing_procedure)
                gen_neb_fw = Firework([gen_neb_task], spec=gen_neb_spec, name='gen-neb{:d}'.format(ineb))
                fws.append(gen_neb_fw)
                linkupdate = {prev_gen_neb_fw.fw_id: gen_neb_fw.fw_id}
                links_dict_update(links_dict=links_dict,
                                  links_update=linkupdate)
                if relax_terminals:
                    linkupdate = {start_src_fws['control_fw'].fw_id: gen_neb_fw.fw_id}
                    links_dict_update(links_dict=links_dict,
                                      links_update=linkupdate)
                    linkupdate = {end_src_fws['control_fw'].fw_id: gen_neb_fw.fw_id}
                    links_dict_update(links_dict=links_dict,
                                      links_update=linkupdate)

        if climbing_image:
            wfname = "MPcNEBRelaxFWWorkflowSRC"
        else:
            wfname = "MPcNEBRelaxFWWorkflowSRC"
        self.wf = Workflow(fireworks=fws, links_dict=links_dict,
                           metadata={'workflow_class': self.workflow_class,
                                     'workflow_module': self.workflow_module},
                           name=wfname)
コード例 #6
0
def createSRCFireworksOld(task_class,
                          task_input,
                          SRC_spec,
                          initialization_info,
                          wf_task_index_prefix,
                          current_task_index=1,
                          handlers=None,
                          validators=None,
                          deps=None,
                          task_type=None,
                          queue_adapter_update=None):
    SRC_spec = copy.deepcopy(SRC_spec)
    SRC_spec['initialization_info'] = initialization_info
    SRC_spec['_add_launchpad_and_fw_id'] = True
    SRC_spec['SRCScheme'] = True
    prefix_allowed_chars = ['-']
    prefix_test_string = str(wf_task_index_prefix)
    for allowed_char in prefix_allowed_chars:
        prefix_test_string = prefix_test_string.replace(allowed_char, "")
    if not prefix_test_string.isalnum():
        raise ValueError(
            'wf_task_index_prefix should only contain letters '
            'and the following characters : {}'.format(prefix_test_string))
    SRC_spec['wf_task_index_prefix'] = wf_task_index_prefix

    # Remove any initial queue_adapter_update from the spec
    SRC_spec.pop('queue_adapter_update', None)
    if queue_adapter_update is not None:
        SRC_spec['queue_adapter_update'] = queue_adapter_update

    # Setup (Autoparal) run
    SRC_spec_setup = copy.deepcopy(SRC_spec)
    SRC_spec_setup = set_short_single_core_to_spec(SRC_spec_setup)
    SRC_spec_setup['wf_task_index'] = '_'.join(
        ['setup', wf_task_index_prefix,
         str(current_task_index)])
    setup_task = task_class(task_input,
                            is_autoparal=True,
                            use_SRC_scheme=True,
                            deps=deps,
                            task_type=task_type)
    setup_fw = Firework(setup_task,
                        spec=SRC_spec_setup,
                        name=SRC_spec_setup['wf_task_index'])
    # Actual run of simulation
    SRC_spec_run = copy.deepcopy(SRC_spec)
    SRC_spec_run['wf_task_index'] = '_'.join(
        ['run', wf_task_index_prefix,
         str(current_task_index)])
    run_task = task_class(task_input,
                          is_autoparal=False,
                          use_SRC_scheme=True,
                          deps=deps,
                          task_type=task_type)
    run_fw = Firework(run_task,
                      spec=SRC_spec_run,
                      name=SRC_spec_run['wf_task_index'])
    # Check memory firework
    SRC_spec_check = copy.deepcopy(SRC_spec)
    SRC_spec_check = set_short_single_core_to_spec(SRC_spec_check)
    SRC_spec_check['wf_task_index'] = '_'.join(
        ['check', wf_task_index_prefix,
         str(current_task_index)])
    check_task = CheckTask(handlers=handlers, validators=validators)
    SRC_spec_check['_allow_fizzled_parents'] = True
    check_fw = Firework(check_task,
                        spec=SRC_spec_check,
                        name=SRC_spec_check['wf_task_index'])
    links_dict = {
        setup_fw.fw_id: [run_fw.fw_id],
        run_fw.fw_id: [check_fw.fw_id]
    }
    return {
        'setup_fw': setup_fw,
        'run_fw': run_fw,
        'check_fw': check_fw,
        'links_dict': links_dict,
        'fws': [setup_fw, run_fw, check_fw]
    }