def _snl_to_spec(snl, enforce_gga=False): spec = {} incar_enforce = {'NPAR': 2} structure = snl.structure mpvis = MPGGAVaspInputSet(user_incar_settings=incar_enforce) if enforce_gga else MPVaspInputSet(user_incar_settings=incar_enforce) incar = mpvis.get_incar(structure) poscar = mpvis.get_poscar(structure) kpoints = mpvis.get_kpoints(structure) potcar = mpvis.get_potcar(structure) spec['vasp'] = {} spec['vasp']['incar'] = incar.to_dict spec['vasp']['poscar'] = poscar.to_dict spec['vasp']['kpoints'] = kpoints.to_dict spec['vasp']['potcar'] = potcar.to_dict # Add run tags of pseudopotential spec['run_tags'] = spec.get('run_tags', [potcar.functional]) spec['run_tags'].extend(potcar.symbols) # Add run tags of +U u_tags = ['%s=%s' % t for t in zip(poscar.site_symbols, incar.get('LDAUU', [0] * len(poscar.site_symbols)))] spec['run_tags'].extend(u_tags) spec['_dupefinder'] = DupeFinderVasp().to_dict() spec['vaspinputset_name'] = mpvis.__class__.__name__ spec['task_type'] = 'GGA+U optimize structure (2x)' if spec['vasp'][ 'incar'].get('LDAU', False) else 'GGA optimize structure (2x)' return spec
def _snl_to_spec(snl, enforce_gga=False, parameters=None): parameters = parameters if parameters else {} parameters['boltztrap'] = parameters.get('boltztrap', True) # by default run boltztrap spec = {'parameters': parameters} incar_enforce = {'NPAR': 2} if 'exact_structure' in parameters and parameters['exact_structure']: structure = snl.structure else: structure = snl.structure.get_primitive_structure() mpvis = MPGGAVaspInputSet( user_incar_settings=incar_enforce) if enforce_gga else MPVaspInputSet( user_incar_settings=incar_enforce) incar = mpvis.get_incar(structure) poscar = mpvis.get_poscar(structure) kpoints = mpvis.get_kpoints(structure) potcar = mpvis.get_potcar(structure) spec['vasp'] = {} spec['vasp']['incar'] = incar.as_dict() spec['vasp']['poscar'] = poscar.as_dict() spec['vasp']['kpoints'] = kpoints.as_dict() spec['vasp']['potcar'] = potcar.as_dict() # Add run tags of pseudopotential spec['run_tags'] = spec.get('run_tags', [potcar.functional]) spec['run_tags'].extend(potcar.symbols) # Add run tags of +U u_tags = [ '%s=%s' % t for t in zip(poscar.site_symbols, incar.get('LDAUU', [0] * len(poscar.site_symbols))) ] spec['run_tags'].extend(u_tags) # add user run tags if 'run_tags' in parameters: spec['run_tags'].extend(parameters['run_tags']) del spec['parameters']['run_tags'] # add exact structure run tag automatically if we have a unique situation if 'exact_structure' in parameters and parameters[ 'exact_structure'] and snl.structure != snl.structure.get_primitive_structure( ): spec['run_tags'].extend('exact_structure') spec['_dupefinder'] = DupeFinderVasp().to_dict() spec['vaspinputset_name'] = mpvis.__class__.__name__ spec['task_type'] = 'GGA+U optimize structure (2x)' if spec['vasp'][ 'incar'].get('LDAU', False) else 'GGA optimize structure (2x)' return spec
def _snl_to_spec(snl, enforce_gga=False, parameters=None): parameters = parameters if parameters else {} spec = {'parameters': parameters} incar_enforce = {'NPAR': 2} if 'exact_structure' in parameters and parameters['exact_structure']: structure = snl.structure else: structure = snl.structure.get_primitive_structure() mpvis = MPGGAVaspInputSet(user_incar_settings=incar_enforce) if enforce_gga else MPVaspInputSet(user_incar_settings=incar_enforce) incar = mpvis.get_incar(structure) poscar = mpvis.get_poscar(structure) kpoints = mpvis.get_kpoints(structure) potcar = mpvis.get_potcar(structure) spec['vasp'] = {} spec['vasp']['incar'] = incar.to_dict spec['vasp']['poscar'] = poscar.to_dict spec['vasp']['kpoints'] = kpoints.to_dict spec['vasp']['potcar'] = potcar.to_dict # Add run tags of pseudopotential spec['run_tags'] = spec.get('run_tags', [potcar.functional]) spec['run_tags'].extend(potcar.symbols) # Add run tags of +U u_tags = ['%s=%s' % t for t in zip(poscar.site_symbols, incar.get('LDAUU', [0] * len(poscar.site_symbols)))] spec['run_tags'].extend(u_tags) # add user run tags if 'run_tags' in parameters: spec['run_tags'].extend(parameters['run_tags']) del spec['parameters']['run_tags'] # add exact structure run tag automatically if we have a unique situation if 'exact_structure' in parameters and parameters['exact_structure'] and snl.structure != snl.structure.get_primitive_structure(): spec['run_tags'].extend('exact_structure') spec['_dupefinder'] = DupeFinderVasp().to_dict() spec['vaspinputset_name'] = mpvis.__class__.__name__ spec['task_type'] = 'GGA+U optimize structure (2x)' if spec['vasp'][ 'incar'].get('LDAU', False) else 'GGA optimize structure (2x)' return spec
def _snl_to_spec(snl, enforce_gga=False): spec = {} incar_enforce = {'NPAR': 2} structure = snl.structure mpvis = MPGGAVaspInputSet( user_incar_settings=incar_enforce) if enforce_gga else MPVaspInputSet( user_incar_settings=incar_enforce) incar = mpvis.get_incar(structure) poscar = mpvis.get_poscar(structure) kpoints = mpvis.get_kpoints(structure) potcar = mpvis.get_potcar(structure) spec['vasp'] = {} spec['vasp']['incar'] = incar.to_dict spec['vasp']['poscar'] = poscar.to_dict spec['vasp']['kpoints'] = kpoints.to_dict spec['vasp']['potcar'] = potcar.to_dict # Add run tags of pseudopotential spec['run_tags'] = spec.get('run_tags', [potcar.functional]) spec['run_tags'].extend(potcar.symbols) # Add run tags of +U u_tags = [ '%s=%s' % t for t in zip(poscar.site_symbols, incar.get('LDAUU', [0] * len(poscar.site_symbols))) ] spec['run_tags'].extend(u_tags) spec['_dupefinder'] = DupeFinderVasp().to_dict() spec['vaspinputset_name'] = mpvis.__class__.__name__ spec['task_type'] = 'GGA+U optimize structure (2x)' if spec['vasp'][ 'incar'].get('LDAU', False) else 'GGA optimize structure (2x)' return spec
def _snl_to_spec(snl, enforce_gga=True): spec = {} mpvis = MPGGAVaspInputSet() if enforce_gga else MPVaspInputSet() structure = snl.structure spec['vasp'] = {} spec['vasp']['incar'] = mpvis.get_incar(structure).to_dict spec['vasp']['incar']['NPAR'] = 2 spec['vasp']['poscar'] = mpvis.get_poscar(structure).to_dict spec['vasp']['kpoints'] = mpvis.get_kpoints(structure).to_dict spec['vasp']['potcar'] = mpvis.get_potcar(structure).to_dict spec['_dupefinder'] = DupeFinderVasp().to_dict() spec['_priority'] = 2 # TODO: restore category # spec['_category'] = 'Materials Project' spec['vaspinputset_name'] = mpvis.__class__.__name__ spec['task_type'] = 'GGA+U optimize structure (2x)' if spec['vasp'][ 'incar'].get('LDAU', False) else 'GGA optimize structure (2x)' spec.update(_get_metadata(snl)) return spec
def structure_to_wf(structure): """ This method starts with a Structure object and creates a Workflow object The workflow has two steps - a structure relaxation and a static run :param structure: :return: """ fws = [] # list of FireWorks to run connections = defaultdict(list) # dependencies between FireWorks # generate VASP input objects for 1st VASP run - this is put in the FW spec mpvis = MPGGAVaspInputSet(user_incar_settings={'NPAR': 2}) incar = mpvis.get_incar(structure) poscar = mpvis.get_poscar(structure) kpoints = mpvis.get_kpoints(structure) potcar = mpvis.get_potcar(structure) # serialize the VASP input objects to the FW spec spec = {} spec['vasp'] = {} spec['vasp']['incar'] = incar.as_dict() spec['vasp']['poscar'] = poscar.as_dict() spec['vasp']['kpoints'] = kpoints.as_dict() spec['vasp']['potcar'] = potcar.as_dict() spec['vaspinputset_name'] = mpvis.__class__.__name__ spec['task_type'] = 'GGA optimize structure (2x) example' # set up the custodian that we want to run jobs = VaspJob.double_relaxation_run('', gzipped=False) for j in jobs: # turn off auto npar, it doesn't work for >1 node j.auto_npar = False handlers = [VaspErrorHandler(), FrozenJobErrorHandler(), MeshSymmetryErrorHandler(), NonConvergingErrorHandler()] c_params = {'jobs': [j.as_dict() for j in jobs], 'handlers': [h.as_dict() for h in handlers], 'max_errors': 5} custodiantask = VaspCustodianTaskEx(c_params) # 1st Firework - run GGA optimize structure # VaspWriterTask - write input files (INCAR, POSCAR, KPOINTS, POSCAR) based on spec # CustodianTaskEx - run VASP within a custodian tasks = [VaspWriterTask(), custodiantask] fws.append(Firework(tasks, spec, name=get_name(structure, spec['task_type']), fw_id=1)) # 2nd Firework - insert previous run into DB spec = {'task_type': 'VASP db insertion example'} fws.append( Firework([VaspToDBTaskEx()], spec, name=get_name(structure, spec['task_type']), fw_id=2)) connections[1] = [2] # 3rd Firework - static run. # VaspCopyTask - copy output from previous run to this directory # SetupStaticRunTask - override old parameters for static run # CustodianTaskEx - run VASP within a custodian spec = {'task_type': 'GGA static example'} copytask = VaspCopyTask({'use_CONTCAR': True, 'skip_CHGCAR': True}) setuptask = SetupStaticRunTask() custodiantask = VaspCustodianTaskEx({'jobs': [VaspJob('', auto_npar=False).as_dict()], 'handlers': [h.as_dict() for h in handlers], 'max_errors': 5}) fws.append(Firework([copytask, setuptask, custodiantask], spec, name=get_name(structure, spec['task_type']), fw_id=3)) connections[2] = [3] # 4th Firework - insert previous run into DB spec = {'task_type': 'VASP db insertion example'} fws.append( Firework([VaspToDBTaskEx()], spec, name=get_name(structure, spec['task_type']), fw_id=4)) connections[3] = [4] return Workflow(fws, connections, name=get_slug(structure.formula))
def structure_to_wf(structure): """ This method starts with a Structure object and creates a Workflow object The workflow has two steps - a structure relaxation and a static run :param structure: :return: """ fws = [] # list of FireWorks to run connections = defaultdict(list) # dependencies between FireWorks # generate VASP input objects for 1st VASP run - this is put in the FW spec mpvis = MPGGAVaspInputSet(user_incar_settings={'NPAR': 2}) incar = mpvis.get_incar(structure) poscar = mpvis.get_poscar(structure) kpoints = mpvis.get_kpoints(structure) potcar = mpvis.get_potcar(structure) # serialize the VASP input objects to the FW spec spec = {} spec['vasp'] = {} spec['vasp']['incar'] = incar.to_dict spec['vasp']['poscar'] = poscar.to_dict spec['vasp']['kpoints'] = kpoints.to_dict spec['vasp']['potcar'] = potcar.to_dict spec['vaspinputset_name'] = mpvis.__class__.__name__ spec['task_type'] = 'GGA optimize structure (2x) example' # set up the custodian that we want to run jobs = VaspJob.double_relaxation_run('', gzipped=False) for j in jobs: # turn off auto npar, it doesn't work for >1 node j.auto_npar = False handlers = [VaspErrorHandler(), FrozenJobErrorHandler(), MeshSymmetryErrorHandler(), NonConvergingErrorHandler()] c_params = {'jobs': [j.to_dict for j in jobs], 'handlers': [h.to_dict for h in handlers], 'max_errors': 5} custodiantask = VaspCustodianTaskEx(c_params) # 1st FireWork - run GGA optimize structure # VaspWriterTask - write input files (INCAR, POSCAR, KPOINTS, POSCAR) based on spec # CustodianTaskEx - run VASP within a custodian tasks = [VaspWriterTask(), custodiantask] fws.append(FireWork(tasks, spec, name=get_name(structure, spec['task_type']), fw_id=1)) # 2nd FireWork - insert previous run into DB spec = {'task_type': 'VASP db insertion example'} fws.append( FireWork([VaspToDBTaskEx()], spec, name=get_name(structure, spec['task_type']), fw_id=2)) connections[1] = [2] # 3rd FireWork - static run. # VaspCopyTask - copy output from previous run to this directory # SetupStaticRunTask - override old parameters for static run # CustodianTaskEx - run VASP within a custodian spec = {'task_type': 'GGA static example'} copytask = VaspCopyTask({'use_CONTCAR': True, 'skip_CHGCAR': True}) setuptask = SetupStaticRunTask() custodiantask = VaspCustodianTaskEx({'jobs': [VaspJob('', auto_npar=False).to_dict], 'handlers': [h.to_dict for h in handlers], 'max_errors': 5}) fws.append(FireWork([copytask, setuptask, custodiantask], spec, name=get_name(structure, spec['task_type']), fw_id=3)) connections[2] = [3] # 4th FireWork - insert previous run into DB spec = {'task_type': 'VASP db insertion example'} fws.append( FireWork([VaspToDBTaskEx()], spec, name=get_name(structure, spec['task_type']), fw_id=4)) connections[3] = [4] return Workflow(fws, connections, name=get_slug(structure.formula))