Source code for vasp_input
#!/usr/bin/env python
#"""Writen by Niraj K. Nepal, Ph.D.
"""This script will download vasp input files from materials project database.
Script is run within 'download-input' bash script."""
import os
import sys
import warnings
from pymatgen.io.vasp.sets import MPRelaxSet
from pymatgen.symmetry.analyzer import SpacegroupAnalyzer
from cif_to_gsinput import pos_to_kpt
from write_potcar import poscar2potcar
from htepc import MpConnect
from check_json import config
# To ignore all warnings
warnings.filterwarnings("ignore")
[docs]
def vasp_input(mpid,compound):
"""
Download VASP input files from the Materials Project.
Downloads INCAR, POSCAR, POTCAR, and KPOINTS inside Rmpid-compound/relax folder.
Updates 'mpid.in' with entry number, mpid, and compound name.
Parameters:
- mpid (str): Materials ID.
- compound (str): Compound name.
"""
input_data = config()
obj = MpConnect()
obj.setting(mpid)
obj.download()
if not os.path.isdir("input_cif"):
os.mkdir("input_cif")
if os.path.isfile("{}.cif".format(mpid)):
os.system("mv {}.cif input_cif/".format(mpid))
#obtain vasp inputs from MPRelaxSet
structure = SpacegroupAnalyzer(obj.structure, symprec=0.1).get_primitive_standard_structure()
relax_set = MPRelaxSet(structure=structure)
#create a folder with structures
if not os.path.isdir("R{}-{}".format(mpid,compound)):
os.mkdir("R{}-{}".format(mpid,compound))
if not os.path.isdir("R{}-{}/relax".format(mpid,compound)):
os.mkdir("R{}-{}/relax".format(mpid,compound))
relax_set.write_input(output_dir="R{}-{}/relax".format(mpid,compound))
relax_set.poscar.write_file("R{}-{}/relax/POSCAR".format(mpid,compound))
if os.path.isfile("config.json"):
os.system("cp config.json R{}-{}/relax/".format(mpid,compound))
os.chdir("R{}-{}/relax/".format(mpid,compound))
poscar2potcar()
os.chdir("../../")
if os.path.isfile("config.json") or os.path.isfile("../../config.json"):
d = input_data['download']
evenkpt = d['inp']['evenkpt']
kptden = input_data['kptden']
if evenkpt:
print("Even kpoint mesh is utilized\n")
pos_to_kpt("R{}-{}/relax/POSCAR".format(mpid,compound),kptden,True)
else:
pos_to_kpt("R{}-{}/relax/POSCAR".format(mpid,compound),kptden)
os.system("mv KPOINTS R{}-{}/relax/".format(mpid,compound))
if not os.path.isfile('mpid.in'):
entry = 0
with open("mpid.in", "w") as write_mpid:
write_mpid.write("v{}".format(entry+1) + " " + obj.mpid + " " + compound + "\n")
else:
with open('mpid.in', 'r') as read_mpid:
lines = read_mpid.readlines()
entry = len(lines)
new_mpid = mpid + " "
if not any(new_mpid in line for line in lines):
with open("mpid.in", "a") as write_mpid:
write_mpid.write("v{}".format(entry+1) + " " + obj.mpid + " " + compound + "\n")
[docs]
def main():
"""
main function
"""
mpid = sys.argv[1]
compound = sys.argv[2]
vasp_input(mpid,compound)
if __name__ == "__main__":
main()