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')
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)
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)
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')