def load_species_mnte_dummy_fe(vasp : Vasp, structure): # See vasp/functional.py: elementName, fileName, max or min oxidation state pseudoDir = '$PSEUDO_DIR' vasp.add_specie = "Te", pseudoDir + "/Te" vasp.add_specie = "Mn", pseudoDir + "/Mn_pv" vasp.add_specie = "Fe", pseudoDir + "/Mn_pv" return(vasp)
def set_ncore_auto(vasp: Vasp, structure=None): vasp.npar = None try: vasp.add_keyword('ncore', int(os.environ['PBS_NUM_PPN'])) except: vasp.add_keyword('ncore', int(os.environ['SLURM_CPUS_ON_NODE'])) return vasp
def set_kpar_per_node(vasp: Vasp, structure=None): try: nodes = int(os.environ['PBS_NUM_NODES']) except: nodes = int(os.environ['SLURM_JOB_NUM_NODES']) vasp.add_keyword('kpar', nodes) return vasp
def set_333(vasp: Vasp, structure=None): x = 3 y = 3 z = 3 packing = 'Gamma' vasp.kpoints = "Gamma_Mesh\n0\n{}\n{} {} {}".format(packing, x, y, z) vasp.add_keyword('auto_gamma', False) return vasp
def set_gamma(vasp: Vasp, structure=None): x = 1 y = 1 z = 1 packing = 'Gamma' vasp.kpoints = "Gamma_Mesh\n0\n{}\n{} {} {}".format(packing, x, y, z) vasp.ismear = 0 vasp.add_keyword('kpar', 1) return vasp
def set_algo_normal_optimal_converge(vasp: Vasp, structure=None): ''' :param vasp: Vasp :param structure: :return: ''' vasp.algo = "Normal" vasp.add_keyword('nsim', 1) return vasp
def set_kpoint(vasp: Vasp, structure): lengths = [ sum([x**2 for x in structure.cell.transpose()[i]])**(1 / 2) for i in range(3) ] # using distance formula to get vector lengths kpoints = [math.ceil(min(lengths) / x * kpoint) for x in lengths ] # scaling number of kpoints for shorter vectors packing = 'Gamma' vasp.kpoints = "Gamma_Mesh\n0\n{}\n{} {} {}".format( packing, kpoints[0], kpoints[1], kpoints[2]) vasp.ediff = convergence_value / 1000 return vasp
def vibrations_disp(vasp: Vasp, structure: Structure): vasp.ibrion = 5 vasp.istart = 1 vasp.icharg = 1 vasp.nelmin = 3 vasp.nsw = 1 vasp.potim = 0.015 vasp.ediff = 1e-8 vasp.add_keyword('iopt', 0) return vasp
def get_eigen(vasp: Vasp, structure=None): # Start vasp.istart = 1 vasp.icharg = 1 # Electronic vasp.prec = "Accurate" vasp.nelm = 200 vasp.ediff = 1e-5 vasp.nelmdl = 0 # Ionic vasp.nsw = 5000 vasp.ediffg = -0.05 # Output vasp.lwave = True vasp.lcharg = True return vasp
def set_441(vasp: Vasp, structure=None): x = 4 y = 4 z = 1 packing = 'Gamma' vasp.kpoints = "Gamma_Mesh\n0\n{}\n{} {} {}".format(packing, x, y, z) return vasp
def full_converge(vasp: Vasp, structure=None): # Start vasp.istart = 1 vasp.icharg = 1 # Electronic vasp.prec = "Accurate" vasp.nelm = 200 vasp.ediff = 1e-6 vasp.nelmdl = 0 # Ionic vasp.nsw = 5000 vasp.ediffg = -0.02 # Output vasp.lwave = True vasp.lcharg = True return vasp
def set_kpoints_auto_20(vasp: Vasp, structure=None): x = 20 packing = 'Auto' vasp.kpoints = "Automatic\n0\n{}\n{}".format(packing, x) kpoint_str = vasp.kpoints.split('\n')[3] kpoints = [int(x) for x in kpoint_str.split()] if len(kpoints) > 1: num_kpoints = kpoints[0] * kpoints[1] * kpoints[2] else: density = kpoints[0] num_kpoints = math.ceil( density / np.linalg.norm(structure.cell[:, 0])) * math.ceil( density / np.linalg.norm(structure.cell[:, 1])) * math.ceil( density / np.linalg.norm(structure.cell[:, 2])) if num_kpoints < 4: vasp.ismear = 0 return vasp
def set_algo_normal(vasp: Vasp, structure=None): ''' :param vasp: Vasp :param structure: :return: ''' vasp.algo = "Normal" return vasp
def set_nospin(vasp: Vasp, structure=None): ''' :param vasp: Vasp :param structure: :return: ''' vasp.ispin = 1 return vasp
def cell_relax(vasp: Vasp, structure=None): vasp.isif = 3 vasp.ibrion = 1 vasp.potim = 0.4 vasp.ediffg = -0.005 vasp.add_keyword('iopt', 0) return vasp
def scan(vasp: Vasp, structure=None): vasp.add_keyword('metagga', 'SCAN') vasp.add_keyword('lhfcalc', False) vasp.algo = 'Normal' vasp.ldau = False no_U(vasp, structure) return vasp
def set_kpar_by_core(vasp: Vasp, structure=None): try: np = int(os.environ['PBS_NP']) except: np = int(os.environ['SLURM_NTASKS']) atoms = len(structure) if np / atoms > 1: kpar = math.ceil(np / math.sqrt(atoms)) print(vasp.kpoints) print(vasp.kpoints) print(vasp.kpoints) print(vasp.kpoints) print(vasp.kpoints) kpoint_str = vasp.kpoints.split('\n')[3] kpoints = [int(x) for x in kpoint_str.split()] num_kpoints = kpoints[0] * kpoints[1] * kpoints[2] while kpar > 1: if (num_kpoints % kpar == 0) and (np % kpar == 0): vasp.add_keyword('kpar', kpar) return vasp else: kpar = kpar - 1 vasp.add_keyword('kpar', 1) return vasp
def load_species(vasp : Vasp, structure): # See vasp/functional.py: elementName, fileName, max or min oxidation state pseudoDir = '$PSEUDO_DIR' vasp.add_specie = "Zn", pseudoDir + "/Zn" vasp.add_specie = "O", pseudoDir + "/O" vasp.add_specie = "Al", pseudoDir + "/Al" vasp.add_specie = "Cd", pseudoDir + "/Cd" vasp.add_specie = "Te", pseudoDir + "/Te" vasp.add_specie = "Ga", pseudoDir + "/Ga" vasp.add_specie = "As", pseudoDir + "/As" vasp.add_specie = "In", pseudoDir + "/In" vasp.add_specie = "P", pseudoDir + "/P" vasp.add_specie = "Te", pseudoDir + "/Te" vasp.add_specie = "Bi", pseudoDir + "/Bi_d" vasp.add_specie = "Mn_+", pseudoDir + "/Mn_pv" vasp.add_specie = "Mn_-", pseudoDir + "/Mn_pv" return(vasp)
def set_kpar_auto(vasp: Vasp, structure=None): try: nodes = int(os.environ['PBS_NUM_NODES']) procs = int(os.environ['PBS_NP']) except: nodes = int(os.environ['SLURM_JOB_NUM_NODES']) procs = int(os.environ['SLURM_NTASKS']) atoms = len(structure) if procs / atoms > 1: kpar = math.ceil(procs / atoms) * 2 print(vasp.kpoints) print(vasp.kpoints) print(vasp.kpoints) print(vasp.kpoints) print(vasp.kpoints) kpoint_str = vasp.kpoints.split('\n')[3] kpoints = [int(x) for x in kpoint_str.split()] if len(kpoints) > 1: num_kpoints = kpoints[0] * kpoints[1] * kpoints[2] else: density = kpoints[0] num_kpoints = math.ceil( density / np.linalg.norm(structure.cell[:, 0])) * math.ceil( density / np.linalg.norm(structure.cell[:, 1])) * math.ceil( density / np.linalg.norm(structure.cell[:, 2])) while kpar > 1: if num_kpoints % kpar == 0 and nodes % kpar == 0: vasp.add_keyword('kpar', kpar) vasp.npar = int(nodes / kpar) return vasp else: kpar = kpar - 1 vasp.add_keyword('kpar', 1) vasp.npar = int(nodes) return vasp
def set_900(vasp: Vasp, structure=None): vasp.encut = 900 return vasp
def set_850(vasp: Vasp, structure=None): vasp.encut = 850 return vasp
def set_npar_1(vasp: Vasp, structure=None): vasp.npar = 1 return vasp
def set_ncore_12(vasp: Vasp, structure=None): vasp.npar = None vasp.add_keyword('ncore', 12) return vasp
def tetrahedron(vasp: Vasp, structure=None): vasp.ismear = -5 return vasp
def set_npar_2(vasp: Vasp, structure=None): vasp.npar = 2 return vasp
def set_dos(vasp: Vasp, structure=None): vasp.algo = 'None' return vasp
def ggau(vasp: Vasp, structure=None): vasp.add_keyword('metagga', None) vasp.add_keyword('lhfcalc', False) vasp.algo = 'Normal' vasp.ldau = True return vasp
def set_algo_damp025(vasp: Vasp, structure=None): vasp.algo = "Damped" vasp.add_keyword('time', 0.25) return vasp
def no_hse06(vasp: Vasp, structure=None): vasp.add_keyword('lhfcalc', False) vasp.algo = 'Normal' vasp.ldau = True return vasp
def hse06(vasp: Vasp, structure=None): vasp.nelmdl = 0 vasp.nelm = 1000 vasp.add_keyword('lhfcalc', True) vasp.precfock = 'Fast' vasp.add_keyword('hfscreen', 0.2) vasp.algo = 'All' vasp.npar = None vasp.ldau = False vasp.lwave = True vasp.lcharg = True vasp.ismear = 0 vasp.add_keyword('metagga', False) vasp.add_keyword('ncore', 8) return vasp