Source code for jarvis.db.lammps_to_xml

"""Module to generate XML file for LAMMPS calculation."""
import numpy as np
from jarvis.core.atoms import get_supercell_dims
from jarvis.db.jsonutils import loadjson
from jarvis.analysis.structure.spacegroup import Spacegroup3D
from jarvis.core.utils import stringdict_to_xml

try:
    # For reference link purposes only, hence kept local
    mp_jv = loadjson("/rk2/knc6/DB/MP/mp_jv_id.json")
except Exception:
    pass


[docs]def get_jvid(mp=""): """Get JARVIS-ID for MPID.""" jvid = "" try: jvid = "'" + ",".join(mp_jv[mp]) + "'" except Exception as exp: print("No JID", exp) pass return jvid
[docs]def basic_data(data={}, source="JARVIS-FF-LAMMPS"): """Get basic data for table.""" info = {} info["id"] = data["jid"] info["source_folder"] = data["source_folder"] info["tmp_source_folder"] = "'" + data["source_folder"] + "'" info["tmp_id"] = "'" + data["jid"] + "'" ref = data["source_folder"].split("/")[-1].split("@")[1].split("_")[0] info["ref"] = "'" + ref + "'" info["jvid"] = get_jvid(ref) final_atoms = data["bulk_data"]["final_str"] initial_atoms = data["bulk_data"]["initial_str"] info["formula"] = final_atoms.composition.reduced_formula info["tmp_formula"] = "'" + final_atoms.composition.reduced_formula + "'" info["elements"] = ",".join(final_atoms.uniq_species) info["tmp_elements"] = "'" + ",".join(final_atoms.uniq_species) + "'" info["number_uniq_species"] = len(final_atoms.uniq_species) info["data_source"] = source info["tmp_data_source"] = "'" + source + "'" info["pair_style"] = data["bulk_data"]["pair_style"] info["pair_coeff"] = data["bulk_data"]["pair_coeff"] # info["pair_coeff"] = ( # '<a href="http://www.ctcms.nist.gov/~knc6/DOWNLOADS/' # + data["bulk_data"]["pair_coeff"] # + '.zip">' # + data["bulk_data"]["pair_coeff"] # + "</a>" # ) info["energy_per_atom"] = round( float(data["bulk_data"]["energy_per_atom"]), 3 ) info["pressure"] = round(float(data["bulk_data"]["system_pressure"]), 3) initial_spg = Spacegroup3D(initial_atoms) final_spg = Spacegroup3D(final_atoms) info["initial_spacegroup_number"] = initial_spg.space_group_number info["initial_spacegroup_symbol"] = initial_spg.space_group_symbol info["initial_pointgroup_symbol"] = initial_spg.point_group_symbol info["initial_crystal_system"] = initial_spg.crystal_system initial_lat_params = initial_atoms.lattice.parameters info["initial_a"] = round(initial_lat_params[0], 2) info["initial_b"] = round(initial_lat_params[1], 2) info["initial_c"] = round(initial_lat_params[2], 2) info["initial_alpha"] = round(initial_lat_params[3], 2) info["initial_beta"] = round(initial_lat_params[4], 2) info["initial_gamma"] = round(initial_lat_params[5], 2) info["initial_density"] = round(initial_atoms.density, 3) dim = get_supercell_dims(final_atoms) info["xyz"] = ( '"' + str(final_atoms.make_supercell_matrix(dim).get_xyz_string).replace( "\n", "\\n" ) + '"' ) info["final_str"] = ( '"' + str(final_atoms.get_string()).replace("\n", "\\n") + '"' ) info["initial_str"] = ( '"' + str(initial_atoms.get_string()).replace("\n", "\\n") + '"' ) final_lat_params = final_atoms.lattice.parameters info["final_a"] = round(final_lat_params[0], 2) info["final_b"] = round(final_lat_params[1], 2) info["final_c"] = round(final_lat_params[2], 2) info["final_alpha"] = round(final_lat_params[3], 2) info["final_beta"] = round(final_lat_params[4], 2) info["final_gamma"] = round(final_lat_params[5], 2) info["final_density"] = round(final_atoms.density, 3) info["final_spacegroup_number"] = final_spg.space_group_number info["final_spacegroup_symbol"] = final_spg.space_group_symbol info["final_pointgroup_symbol"] = final_spg.point_group_symbol info["final_crystal_system"] = final_spg.crystal_system et = "" # print(data["bulk_data"]["elastic_tensor"]["raw_et_tensor"]) try: if data["bulk_data"]["elastic_tensor"] != "": cij = np.round( (data["bulk_data"]["elastic_tensor"]["raw_et_tensor"]), 2 ) et = ( '<cij>"' + ";".join( [",".join(map(str, cij[:, i])) for i in range(0, 6)] ) + '"</cij>' ) except Exception as exp: print("Cannot obtain elastic tensor data.", info["source_folder"], exp) pass info["elastic_tensor"] = et vacancy_line = "" if len(data["vacancy_info"]) != 0: for i in data["vacancy_info"]: vacancy_line += i[0] + "," + i[1] + "," + str(round(i[2], 3)) + ";" info["vacancy_info"] = '"' + vacancy_line + '"' surf_line = "" if len(data["surface_info"]) != 0: for i in data["surface_info"]: surf_line += i[0] + "," + str(round(i[1], 3)) + ";" info["surface_info"] = '"' + surf_line + '"' phonon_band_line = "" try: # Band frequencies = data["band_frequencies"] distances = data["band_distances"] labels = data["band_labels"] label_points = data["band_label_points"] tmp = "" for i in range(np.array(frequencies).shape[1]): tmp += ",".join(map(str, np.array(frequencies)[:, i])) + ";" phonon_band_line += ( "<phonon_bandstructure_distances>'" + ",".join(map(str, distances)) + "'</phonon_bandstructure_distances>" ) phonon_band_line += ( "<phonon_bandstructure_frequencies>'" + tmp + "'</phonon_bandstructure_frequencies>" ) phonon_band_line += ( "<phonon_bandstructure_labels>'" + ",".join(map(str, labels)) + "'</phonon_bandstructure_labels>" ) phonon_band_line += ( "<phonon_bandstructure_label_points>'" + ",".join(map(str, label_points)) + "'</phonon_bandstructure_label_points>" ) except Exception as exp: print("Cannot obtain phonon band data.", exp) # Comment until 4 MB text size error info["phonon_band_line"] = phonon_band_line phonon_dos_line = "" try: freq = data["dos_freq"] pdos = data["dos_intensity"] phonon_dos_line += ( "<phonon_dos_frequencies>'" + ",".join(map(str, freq)) + "'</phonon_dos_frequencies>" ) phonon_dos_line += ( "<phonon_dos_intensity>'" + ",".join(map(str, pdos)) + "'</phonon_dos_intensity>" ) except Exception: print("Cannot obtain phonon dod data.") pass info["phonon_dos_line"] = phonon_dos_line return info
[docs]def write_xml(data={}, filename="temp.xml"): """Write XML file.""" basic = basic_data(data) # name = data["jid"] + ".xml" f = open(filename, "w") basic_xml = stringdict_to_xml(basic) line = "" line = '<?xml version="1.0" encoding="UTF-8"?>\n' line += '<?xml-stylesheet type="text/xsl" ' line += 'href="jarvisff.xsl"?>\n' line += "<basic_info>" line += basic_xml line += "</basic_info>" f.write(line) f.close()
""" if __name__ == "__main__": from jarvis.io.lammps.outputs import parse_material_calculation_folder fold = '/rk2/knc6/JARVIS-FF/ALLOY8/ Mishin-Ni-Al-2009.eam.alloy_nist/bulk@mp-23_fold' x = parse_material_calculation_folder(fold) write_xml(x) print('src',x["source_folder"].split('/')[-1].split('@')[1].split('_')[0]) """