def test_metal_ceramic_interface(): m1 = get_jid_data(jid="JVASP-816", dataset="dft_3d")["atoms"] m2 = get_jid_data(jid="JVASP-32", dataset="dft_3d")["atoms"] mat_Al = Atoms.from_dict(m1) mat_Al2O3 = Atoms.from_dict(m2) from jarvis.analysis.defects.surface import Surface mat1 = Surface(atoms=mat_Al, indices=[1, 1, 1], layers=3).make_surface() mat2 = Surface(atoms=mat_Al2O3, indices=[0, 0, 1], layers=1).make_surface() combined = make_interface( film=mat1, # .center_around_origin(), max_area=500, max_area_ratio_tol=0.09, ltol=0.01, apply_strain=True, subs=mat2, # .center_around_origin(), )["interface"] print(combined) # from ase.lattice.surface import surface # from pymatgen.io.ase import AseAtomsAdaptor # from pymatgen.symmetry.analyzer import SpacegroupAnalyzer # from pymatgen.io.vasp.inputs import Poscar # mat_cvn = SpacegroupAnalyzer(mat_Al.pymatgen_converter()).get_conventional_standard_structure() # ase_atoms = AseAtomsAdaptor().get_atoms(mat_cvn) # ase_slab = surface(ase_atoms, [1,1,1], 3) # ase_slab.center(vacuum=18, axis=2) # slab_pymatgen = AseAtomsAdaptor().get_structure(ase_slab) # slab_pymatgen.sort() # print (Poscar(slab_pymatgen)) # print () # print () print(mat1.center_around_origin().get_string(cart=False))
def test_zur(): m1 = get_jid_data("JVASP-664")["atoms"] m2 = get_jid_data("JVASP-652")["atoms"] s1 = Atoms.from_dict(m1) s2 = Atoms.from_dict(m2) info = make_interface(film=s1, subs=s2) combined = info["interface"] assert ( round(info["mismatch_u"], 3), round(info["mismatch_angle"], 3), ) == ( -0.041, 0.0, )
def get_2d_hetero_jids(jid1="JVASP-664", jid2="JVASP-52"): from jarvis.db.figshare import get_jid_data m1 = get_jid_data(jid1)["atoms"] m2 = get_jid_data(jid2)["atoms"] mat1 = Atoms.from_dict(m1) mat2 = Atoms.from_dict(m2) vac = max(mat1.lattice_mat[2][2], mat2.lattice_mat[2][2]) combined = make_interface( film=mat1.center_around_origin(), max_area=400, max_area_ratio_tol=0.09, ltol=0.05, atol=0.1, subs=mat2.center_around_origin(), )["interface"] return combined
def test_conv_method(): plt.switch_backend("agg") a = Atoms.from_dict(get_jid_data("JVASP-667")["atoms"]) c = crop_square(a) # c = a.make_supercell_matrix([2, 2, 1]) p = STEMConv(atoms=c).simulate_surface()
def test_graph(): from jarvis.core.atoms import Atoms from jarvis.db.figshare import get_jid_data atoms = Atoms.from_poscar(test_pos) g = Graph.atom_dgl_multigraph(atoms=atoms, atom_features="cgcnn") atoms = Atoms.from_dict(get_jid_data("JVASP-664")["atoms"]) feature_sets = ("atomic_number", "basic", "cfid", "cgcnn") for i in feature_sets: g = Graph.atom_dgl_multigraph(atoms=atoms, atom_features=i) g = Graph.atom_dgl_multigraph(atoms=atoms, atom_features=i) print(i, g) batch = prepare_dgl_batch(torch.tensor([1, 1])) batch = prepare_line_graph_batch(torch.tensor([1, 1, 1])) g = Graph.from_atoms(atoms=atoms, features="atomic_number") gnx = g.to_networkx() g = Graph.from_atoms(atoms=atoms, features="atomic_number") g = Graph.from_atoms(atoms=atoms, features="atomic_fraction") g = Graph.from_atoms( atoms=atoms, features="basic", get_prim=True, zero_diag=True, node_atomwise_angle_dist=True, node_atomwise_rdf=True, ) g = Graph.from_atoms( atoms=atoms, features="cfid", get_prim=True, zero_diag=True, node_atomwise_angle_dist=True, node_atomwise_rdf=True, ) g = Graph.from_atoms( atoms=atoms, features="atomic_number", get_prim=True, zero_diag=True, node_atomwise_angle_dist=True, node_atomwise_rdf=True, ) g = Graph.from_atoms(atoms=atoms, features="basic") g = Graph.from_atoms( atoms=atoms, features=["Z", "atom_mass", "max_oxid_s"] ) g = Graph.from_atoms(atoms=atoms, features="cfid", max_cut=10000) print(g) d = g.to_dict() g = Graph.from_dict(d) num_nodes = g.num_nodes num_edges = g.num_edges print(num_nodes, num_edges) assert num_nodes == 48 assert num_edges == 2256 assert (g.adjacency_matrix.shape) == (48, 48)
def test_magnetism_setup(): from jarvis.db.figshare import get_jid_data atoms = Atoms.from_dict( get_jid_data(jid="JVASP-78681", dataset="dft_3d")["atoms"] ) mag = MagneticOrdering(atoms) symm_list, ss = mag.get_minimum_configs(min_configs=3) assert len(symm_list) == 3 assert ss.num_atoms == 8 mag_atoms = mag.get_mag_ions() assert mag_atoms == ["Mn"] tc = mag.tc_mean_field() assert round(tc["Tc"], 2) == round(3868.17, 2)
def test_magnetism_setup(): from jarvis.db.figshare import get_jid_data from jarvis.core.atoms import get_supercell_dims atoms = Atoms.from_dict( get_jid_data(jid="JVASP-78681", dataset="dft_3d")["atoms"] ) dim = get_supercell_dims(atoms) print("dim=", dim) dim = [2, 2, 2] symm_list, ss = get_unique_magnetic_structures( atoms, supercell_dim=dim, magnetic_ions=["Mn"] ) print("dim=", dim, len(symm_list)) assert len(symm_list)==5 assert ss.num_atoms == 16
def test_graph(): from jarvis.core.atoms import Atoms from jarvis.db.figshare import get_jid_data atoms = Atoms.from_dict(get_jid_data("JVASP-664")["atoms"]) g = Graph.from_atoms(atoms=atoms, features="atomic_number") g = Graph.from_atoms( atoms=atoms, features="basic", get_prim=True, zero_diag=True, node_atomwise_angle_dist=True, node_atomwise_rdf=True, ) g = Graph.from_atoms( atoms=atoms, features="cfid", get_prim=True, zero_diag=True, node_atomwise_angle_dist=True, node_atomwise_rdf=True, ) g = Graph.from_atoms( atoms=atoms, features="atomic_number", get_prim=True, zero_diag=True, node_atomwise_angle_dist=True, node_atomwise_rdf=True, ) g = Graph.from_atoms(atoms=atoms, features="basic") g = Graph.from_atoms(atoms=atoms, features=["Z", "atom_mass", "max_oxid_s"]) g = Graph.from_atoms(atoms=atoms, features="cfid") print(g) d = g.to_dict() g = Graph.from_dict(d) num_nodes = g.num_nodes num_edges = g.num_edges print(num_nodes, num_edges) assert num_nodes == 48 assert num_edges == 2304 assert (g.adjacency_matrix.shape) == (48, 48)
def test_basic_atoms(): box = [[2.715, 2.715, 0], [0, 2.715, 2.715], [2.715, 0, 2.715]] coords = [[0, 0, 0], [0.25, 0.2, 0.25]] elements = ["Si", "Si"] Si = Atoms(lattice_mat=box, coords=coords, elements=elements) dim = get_supercell_dims(Si) assert dim == [3, 3, 3] polar = Si.check_polar Si.props = ["a", "a"] vac_pad = VacuumPadding(Si) den_2d = round(vac_pad.get_effective_2d_slab().density, 2) den_0d = round(vac_pad.get_effective_molecule().density, 2) den_lll_red = round(Si.get_lll_reduced_structure().density, 2) strng = Si.get_string() scell_nat = Si.make_supercell([2, 2, 2]).num_atoms scell_nat2 = Si.make_supercell_matrix([[2, 0, 0], [0, 2, 0], [0, 0, 2]]).num_atoms # print("scell_nat,scell_nat2", scell_nat, scell_nat2) # print(Si.make_supercell([2, 2, 2])) # print() # print(Si.make_supercell_matrix([[2, 0, 0], [0, 2, 0], [0, 0, 2]])) com = round(Si.get_center_of_mass()[0], 3) rem = (Si.make_supercell([2, 2, 2]).remove_site_by_index(site=0)).num_atoms prim = Si.get_primitive_atoms print(prim.cart_coords) assert round(prim.cart_coords[0][0], 2) == round(4.37815150, 2) # print ('raw_distance_matrix', prim.raw_distance_matrix) # print ('raw_distance_matrix', Si.raw_distance_matrix) # print ('distance_matrix', Si.pymatgen_converter().distance_matrix) assert round(prim.raw_distance_matrix[0][1], 2) == round(4.42386329832851, 2) print(prim.raw_angle_matrix) d = Si.to_dict() new_at = Atoms.from_dict(d) angs_a = d["angles"][0] Si_2_den = Atoms( lattice_mat=d["lattice_mat"], coords=d["coords"], elements=d["elements"], ).density Si_xyz = Si.get_xyz_string Si.write_xyz(filename="atoms.xyz") tmp = Atoms.from_xyz(filename="atoms.xyz") cmd = 'rm atoms.xyz' os.system(cmd) Si.center_around_origin() # print ('scell_nat', Si_2) assert ( round(Si.volume, 2), Si.atomic_numbers, Si.num_atoms, Si.frac_coords[0][0], Si.cart_coords[0][0], round(Si.density, 2), Si.spacegroup(), Si.pymatgen_converter() != {}, polar, Si.props[0], den_2d, den_0d, round(Si.packing_fraction, 2), Si.composition.to_dict(), strng != "", den_lll_red, scell_nat, com, rem, angs_a, round(Si_2_den, 2), ) == ( 40.03, [14, 14], 2, 0, 0.0, 2.33, "C2/m (12)", True, False, "a", 0.35, 0.01, 0.28, { "Si": 2 }, True, 2.33, 16, 0.679, 15, 60.0, 2.33, ) cc = Si.center() cc = Si.center(axis=[0, 0, 1]) m1 = Atoms.from_dict(get_jid_data("JVASP-6640")["atoms"]) assert m1.check_polar == True print("Strain test") print(m1) m1.apply_strain(0.1) print(m1) assert m1.lattice_mat[2][2] == 32.8717576 m1.apply_strain([0, 0, 0.1]) assert m1.lattice_mat[2][2] == 36.158933360000006 filename = "atoms.cif" m1.write_cif(filename) a = Atoms.from_cif(filename) filename = "POSCAR" m1.write_poscar(filename) m2 = Atoms.from_poscar(filename) filename = "atoms.xyz" m1.write_xyz(filename) m3 = Atoms.from_xyz(filename) cmd = "rm atoms.xyz POSCAR atoms.cif" os.system(cmd)
from jarvis.tasks.lammps.lammps import LammpsJob, JobFactory from jarvis.core.atoms import Atoms from jarvis.db.figshare import get_jid_data from jarvis.analysis.structure.spacegroup import Spacegroup3D # atoms = Atoms.from_poscar('POSCAR') # Get Aluminum FCC tmp_dict = get_jid_data(jid="JVASP-816", dataset="dft_3d")["atoms"] atoms = Atoms.from_dict(tmp_dict) # Get conventional cell spg = Spacegroup3D(atoms) cvn_atoms = spg.conventional_standard_structure ff = "/users/knc6/Software/LAMMPS/lammps-master/potentials/Al_zhou.eam.alloy" mod = "/users/knc6/Software/Devs/jarvis/jarvis/tasks/lammps/templates/inelast.mod" cmd = "/users/knc6/Software/LAMMPS/lammps-master/src/lmp_serial<in.main>out" parameters = { "pair_style": "eam/alloy", "pair_coeff": ff, "atom_style": "charge", "control_file": mod, } # Test LammpsJob lmp = LammpsJob(atoms=cvn_atoms, parameters=parameters, lammps_cmd=cmd, jobname="Test").runjob() # Test high-throughput job_fact = JobFactory(pair_style="eam/alloy", name="my_first_lammps_run") job_fact.all_props_eam_alloy(atoms=cvn_atoms, ff_path=ff, lammps_cmd=cmd)
from jarvis.db.figshare import data, get_jid_data from jarvis.core.atoms import Atoms, crop_square from jarvis.io.prismatic.inputs import write_prismatic_xyz a = Atoms.from_dict(get_jid_data("JVASP-667")["atoms"]) def test_inputs(): c = crop_square(a) lines = write_prismatic_xyz(c)