def __init__(self, spec, neb_label, from_images=True, user_incar_settings=None, user_kpoints_settings=None, additional_cust_args=None, **kwargs): """ Args: spec (dict): Specification of the job to run. neb_label (str): "1", "2"..., label neb run. from_images (bool): Set True to initialize from image structures, False starting from relaxed endpoint structures. user_incar_settings (dict): Additional INCAR settings. user_kpoints_settings (dict): Additional KPOINTS settings. additional_cust_args (dict): Other kwargs that are passed to RunVaspCustodian. \*\*kwargs: Other kwargs that are passed to Firework.__init__. """ assert neb_label.isdigit() and int(neb_label) >= 1 label = "neb{}".format(neb_label) sort_tol = spec["sort_tol"] d_img = spec["d_img"] interpolation_type = spec["interpolation_type"] # Task 1: Write NEB input sets user_incar_settings = user_incar_settings or {} user_kpoints_settings = user_kpoints_settings or {} additional_cust_args = additional_cust_args or {} if from_images: write_neb_task = WriteNEBFromImages(neb_label=neb_label, user_incar_settings=user_incar_settings, user_kpoints_settings=user_kpoints_settings) else: # from endpoints write_neb_task = WriteNEBFromEndpoints( user_incar_settings=user_incar_settings, user_kpoints_settings=user_kpoints_settings, sort_tol=sort_tol, d_img=d_img, interpolation_type=interpolation_type) # Task 2: Run NEB using Custodian cust_args = {"job_type": "neb", "gzip_output": False, "handler_group": "no_handler"} cust_args.update(additional_cust_args) run_neb_task = RunVaspCustodian(vasp_cmd=">>vasp_cmd<<", gamma_vasp_cmd=">>gamma_vasp_cmd<<", **cust_args) # Task 3, 4: Transfer and PassCalcLocs tasks = [write_neb_task, run_neb_task, TransferNEBTask(label=label), PassCalcLocs(name=label)] super(NEBFW, self).__init__(tasks, spec=spec, name=label, **kwargs)
def __init__(self, spec, label, user_incar_settings=None, user_kpoints_settings=None, additional_cust_args=None, **kwargs): """ Args: spec (dict): Specification of the job to run. label (str): "parent", "ep0" or "ep1" vasp_input_set (VaspInputSet): Input set to use. user_kpoints_settings (dict): Additional KPOINTS settings. additional_cust_args (dict): Other kwargs that are passed to RunVaspCustodian. \*\*kwargs: Other kwargs that are passed to Firework.__init__. """ # Get structure from spec assert label in ["parent", "ep0", "ep1"] structure_dict = spec[label] structure = Structure.from_dict(structure_dict) user_incar_settings = user_incar_settings or {} user_kpoints_settings = user_kpoints_settings or {} additional_cust_args = additional_cust_args or {} # Task 1: Write input sets if label == 'parent': vasp_input_set = MITRelaxSet(structure, user_incar_settings=user_incar_settings, user_kpoints_settings=user_kpoints_settings) else: # label == "ep0" or "ep1" from pymatgen_diffusion.neb.io import MVLCINEBEndPointSet vasp_input_set = MVLCINEBEndPointSet(structure, user_incar_settings=user_incar_settings, user_kpoints_settings=user_kpoints_settings) write_ep_task = WriteVaspFromIOSet(structure=structure, vasp_input_set=vasp_input_set) # Task 2: Run VASP using Custodian cust_args = {"job_type": "normal", "gzip_output": False, "handler_group": "no_handler"} cust_args.update(additional_cust_args) run_vasp = RunVaspCustodian(vasp_cmd=">>vasp_cmd<<", gamma_vasp_cmd=">>gamma_vasp_cmd<<", **cust_args) # Task 3, 4: Transfer and PassCalLocs tasks = [write_ep_task, run_vasp, TransferNEBTask(label=label), PassCalcLocs(name=label)] super(NEBRelaxationFW, self).__init__(tasks, spec=spec, name=label, **kwargs)