Exemplo n.º 1
0
    def __init__(self, vasp_input_set, spec):
        # 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 = ControlProcedure(
            controllers=additional_controllers)
        task_helper = MPRelaxTaskHelper()
        task_type = task_helper.task_type
        src_fws = createVaspSRCFireworks(vasp_input_set=vasp_input_set,
                                         task_helper=task_helper,
                                         task_type=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(src_fws['fws'])
        links_dict_update(links_dict=links_dict,
                          links_update=src_fws['links_dict'])

        self.wf = Workflow(fireworks=fws,
                           links_dict=links_dict,
                           metadata={
                               'workflow_class': self.workflow_class,
                               'workflow_module': self.workflow_module
                           },
                           name='MPRelaxFWWorkflowSRC')
Exemplo n.º 2
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)
Exemplo n.º 3
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)
Exemplo n.º 4
0
    def __init__(self, vasp_input_set, spec, relaxation_type='IONS_SHAPE_VOLUME',
                 relaxation_strategy=DEFAULT_RELAXATION_STRATEGY):
        vasp_input_set.user_incar_settings.update(relaxation_type_to_vasp_variables[relaxation_type])
        # 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 = ControlProcedure(controllers=additional_controllers)
        task_helper = MPRelaxTaskHelper()

        if relaxation_strategy == self.DEFAULT_RELAXATION_STRATEGY:
            if relaxation_type in ['NONE', 'IONS']:
                task_type = task_helper.task_type
            else:
                task_type = '{}-1'.format(task_helper.task_type)

            src_fws = createVaspSRCFireworks(vasp_input_set=vasp_input_set, task_helper=task_helper, task_type=task_type,
                                             control_procedure=control_procedure,
                                             custodian_handlers=[], max_restarts=10, src_cleaning=None, task_index=None,
                                             spec=spec,
                                             setup_spec_update=None, run_spec_update=None)
            fws.extend(src_fws['fws'])
            links_dict_update(links_dict=links_dict, links_update=src_fws['links_dict'])

            if relaxation_type not in ['NONE', 'IONS']:
                task_type2 = '{}-2'.format(task_helper.task_type)
                src_fws2 = createVaspSRCFireworks(vasp_input_set=vasp_input_set, task_helper=task_helper,
                                                  task_type=task_type2,
                                                  control_procedure=control_procedure,
                                                  custodian_handlers=[], max_restarts=10, src_cleaning=None,
                                                  task_index=None,
                                                  spec=spec,
                                                  setup_spec_update=None, run_spec_update=None,
                                                  deps={task_type: '@final_structure'})
                fws.extend(src_fws2['fws'])
                links_dict_update(links_dict=links_dict, links_update=src_fws2['links_dict'])
                linkupdate = {src_fws['control_fw'].fw_id: src_fws2['setup_fw'].fw_id}
                links_dict_update(links_dict=links_dict,
                                  links_update=linkupdate)
        else:
            if relaxation_strategy == self.IMPROVED_RELAXATION_STRATEGY:
                steps = [{'user_incar_settings': {'ENCUT': '$VALUE=300.0_float'},
                          'user_kpoints_settings': {'reciprocal_density': '$FORMULA=0.6*$FINAL_int'}},
                         {'user_incar_settings': {'ENCUT': '$FORMULA=0.8*$FINAL_float'},
                          'user_kpoints_settings': {'reciprocal_density': '$FORMULA=0.8*$FINAL_int'}},
                         {},
                         {}
                         ]
            elif isinstance(relaxation_strategy, (list, tuple)):
                steps = relaxation_strategy
            else:
                raise ValueError('Wrong value for relaxation_strategy')

            deps = None
            prev_src_fws = None
            for istep, step in enumerate(steps):
                task_type = '{}-{:d}'.format(task_helper.task_type, istep+1)
                vis = self._modify_vasp_input_set(vasp_input_set, step)
                src_fws = createVaspSRCFireworks(vasp_input_set=vis, task_helper=task_helper,
                                                 task_type=task_type,
                                                 control_procedure=control_procedure,
                                                 custodian_handlers=[], max_restarts=10, src_cleaning=None,
                                                 task_index=None,
                                                 spec=spec,
                                                 setup_spec_update=None, run_spec_update=None, deps=deps)
                fws.extend(src_fws['fws'])
                links_dict_update(links_dict=links_dict, links_update=src_fws['links_dict'])
                if prev_src_fws is not None:
                    linkupdate = {prev_src_fws['control_fw'].fw_id: src_fws['setup_fw'].fw_id}
                    links_dict_update(links_dict=links_dict,
                                      links_update=linkupdate)
                deps = {task_type: '@final_structure'}
                prev_src_fws = src_fws

        self.wf = Workflow(fireworks=fws, links_dict=links_dict,
                           metadata={'workflow_class': self.workflow_class,
                                     'workflow_module': self.workflow_module},
                           name='MPRelaxFWWorkflowSRC')