Beispiel #1
0
def _get_atoms(filename, topology, unit_style, type_list):
    """Function to parse the atom information in the LAMMPS data file
    """
    with open(filename, 'r') as lammps_file:
        for i, line in enumerate(lammps_file):
            if 'atoms' in line.split():
                n_atoms = int(line.split()[0])
            if 'Atoms' in line.split():
                break
    atom_lines = open(filename, 'r').readlines()[i+2:i+n_atoms+2]
    for line in atom_lines:
        atom_line = line.split()
        atom_type = atom_line[2]
        charge = u.unyt_quantity(float(atom_line[3]), get_units(unit_style)['charge'])
        coord = u.angstrom * u.unyt_array([
            float(atom_line[4]),
            float(atom_line[5]),
            float(atom_line[6])])
        site = Site(
            charge=charge,
            position=coord,
            atom_type=type_list[int(atom_type)-1]
            )
        element = element_by_mass(site.atom_type.mass.value)
        site.name = element.name
        site.element = element
        topology.add_site(site)

    topology.update_sites()

    return topology
Beispiel #2
0
    def test_setters_and_getters(self):
        site = Site(name='Lithium', element=Lithium, charge=1, mass=6.941)

        assert site.name == 'Lithium'
        assert site.element == Lithium
        assert site.charge == 1 * u.elementary_charge
        assert site.mass == 6.941 * u.gram / u.mol

        site.name = 'Sulfur'
        site.element = Sulfur
        site.charge = -1
        site.mass = 32.065

        assert site.name == 'Sulfur'
        assert site.element == Sulfur
        assert site.charge == -1 * u.elementary_charge
        assert site.mass == 32.065 * u.gram / u.mol

        site.element, site.charge, site.mass = None, None, None
        assert site.element is None
        assert site.charge is None
        assert site.mass is None