def write_structure(structure, filename): """ Write a structure to a file based on file extension. For example, anything ending in a "cif" is assumed to be a Crystallographic Information Format file. Supported formats include CIF, POSCAR, CSSR and pymatgen's JSON serialized structures. Args: structure (Structure/IStructure): Structure to write filename (str): A filename to write to. """ fname = os.path.basename(filename) if fnmatch(fname, "*.cif*"): writer = CifWriter(structure) elif fnmatch(fname, "POSCAR*") or fnmatch(fname, "CONTCAR*"): writer = Poscar(structure) elif fnmatch(fname.lower(), "*.cssr*"): writer = Cssr(structure) elif fnmatch(fname, "*.json*") or fnmatch(fname, "*.mson*"): with zopen(filename, "w") as f: json.dump(structure, f, cls=PMGJSONEncoder) return else: raise ValueError("Unrecognized file extension!") writer.write_file(filename)
def convert_fmt(args): iformat = args.input_format[0] oformat = args.output_format[0] filename = args.input_filename[0] out_filename = args.output_filename[0] try: if iformat == "smart": structure = read_structure(filename) if iformat == "POSCAR": p = Poscar.from_file(filename) structure = p.structure elif iformat == "CIF": r = CifParser(filename) structure = r.get_structures()[0] elif iformat == "CSSR": structure = Cssr.from_file(filename).structure if oformat == "smart": write_structure(structure, out_filename) elif oformat == "POSCAR": p = Poscar(structure) p.write_file(out_filename) elif oformat == "CIF": w = CifWriter(structure) w.write_file(out_filename) elif oformat == "CSSR": c = Cssr(structure) c.write_file(out_filename) elif oformat == "VASP": input_set = MPVaspInputSet() ts = TransformedStructure(structure, [], history=[{ "source": "file", "datetime": str(datetime.datetime.now()), "original_file": open(filename).read() }]) ts.write_vasp_input(input_set, output_dir=out_filename) elif oformat == "MITVASP": input_set = MITVaspInputSet() ts = TransformedStructure(structure, [], history=[{ "source": "file", "datetime": str(datetime.datetime.now()), "original_file": open(filename).read() }]) ts.write_vasp_input(input_set, output_dir=out_filename) except Exception as ex: print "Error converting file. Are they in the right format?" print str(ex)
parser.add_argument('-n', type=int, default=8, help='number of interpolated images') parser.add_argument('-chg', type=str, help='CHGCAR for pathFinder') arg = parser.parse_args() s1 = Poscar.from_file(arg.s1).structure s2 = Poscar.from_file(arg.s2).structure chg = Chgcar.from_file(arg.chg) relax_sites = [] for i, site in enumerate(s1.sites): if site.specie == Element(arg.e): relax_sites.append(i) pf = NEBPathfinder(s1, s2, relax_sites=relax_sites, v=ChgcarPotential(chg).get_v(), n_images=(3 * arg.n)) images = pf.images for i, image in enumerate(images): if i % 3 == 0: p = Poscar(image) directory = "0" + str(i / 3) if not os.path.exists(directory): os.makedirs(directory) p.write_file("{}/POSCAR".format(directory))
def main(api="", queryid=""): """Get VASP inputs for Materials Project structure Args: api <str>: Materials Project API key queryid <str>: Materials Project ID of the structure Returns: creates a folder named with that mpid, and including some VASP input files. """ if api == "": print "Must have an API key from materialsproject.org" return None if queryid == "": print "No MP structure ID given. Exiting." return None rest_adapter = MPRester(api) entries = list() proplist = list() proplist.append('pretty_formula') proplist.append('structure') proplist.append('potcar') proplist.append('material_id') myentry = rest_adapter.mpquery(criteria={'material_id': queryid}, properties=proplist) if len(myentry) == 0: print "Could not find entry for %s as material_id. Trying entry_id." % queryid myentry = rest_adapter.mpquery(criteria={'entry_id': queryid}, properties=proplist) if len(myentry) == 0: print "Could not find entry for %s" % queryid return None entries.extend(myentry) workdir = os.getcwd() from pymatgen.io.vaspio_set import MITVaspInputSet, MPVaspInputSet for entry in entries: mpvis = MPVaspInputSet() myname = str(entry['pretty_formula']) #print entry['structure'].composition #print entry['structure'].formula #myname = entry['pretty_formula'] myname = myname.replace("(", "_").replace(")", "_") myname = myname + "_" + entry['material_id'] os.mkdir(myname) os.chdir(myname) mystructure = entry['structure'] if mystructure.num_sites <= 10: mystructure.make_supercell([2, 2, 2]) #mystructure.perturb(0.01) incar = mpvis.get_incar(mystructure) incar.write_file("INCAR") potcar = mpvis.get_potcar(mystructure) potcar.write_file("POTCAR") #potcar_symbols = mpvis.get_potcar_symbols(mystructure) myposcar = Poscar(mystructure) mykpoints = mpvis.get_kpoints(mystructure) mykpoints.write_file("KPOINTS") myposcar.write_file("POSCAR") os.chdir(workdir)