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]}
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]}
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, 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 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] }