Пример #1
0
def test_atoms_fmt():
    Mol = Molecule()
    # standard: bohr:
    assert Mol.getFmt() == 'bohr'
    assert float_equal(Mol.getCellDim(), 1)
    assert vec_equal(Mol.getVec(), ((1, 0, 0), (0, 1, 0), (0, 0, 1)))
    Mol.newAtom('C', (1, 1, 1))
    assert atom_equal(Mol.getAtom(0), ('C', (1, 1, 1)))
    # transition to angstrom:
    Mol.setFmt("angstrom", scale=True)
    assert Mol.getFmt() == 'angstrom'
    Mol.setCellDim(1)
    assert float_equal(Mol.getCellDim(), 1)
    assert atom_equal(Mol.getAtom(0, fmt="angstrom"), ('C', (1, 1, 1)))
    Mol.setCellDim(2.5, scale=True, fmt='angstrom')
    Mol.newAtom('C', (2.5, 2.5, 2.5), fmt='angstrom')
    for at in Mol.getAtoms():
        assert atom_equal(at, ('C', (2.5, 2.5, 2.5)))
    Mol.setVec(((2, 0, 0), (0, 2, 0), (0, 0, 2)), scale=True)
    assert vec_equal(Mol.getVec(), ((2, 0, 0), (0, 2, 0), (0, 0, 2)))
    Mol.newAtom('C', (5, 5, 5), fmt='angstrom')
    Mol.newAtom('C', (2, 2, 2), fmt='alat')
    Mol.newAtom('C', (1, 1, 1), fmt='crystal')
    for at in Mol.getAtoms():
        assert atom_equal(at, ('C', (5, 5, 5)))
    for at in Mol.getAtoms(fmt='alat'):
        assert atom_equal(at, ('C', (2, 2, 2)))
    for at in Mol.getAtoms(fmt='crystal'):
        assert atom_equal(at, ('C', (1, 1, 1)))
    # scale back down to bohr
    Mol.setCellDim(2.5, scale=True, fmt='bohr')
    for at in Mol.getAtoms(fmt='bohr'):
        assert atom_equal(at, ('C', (5, 5, 5)))
    Mol.setFmt('alat', scale=True)
    for at in Mol.getAtoms(fmt='bohr'):
        assert atom_equal(at, ('C', (12.5, 12.5, 12.5)))
    Mol.setFmt('crystal', scale=True)
    for at in Mol.getAtoms(fmt='bohr'):
        assert atom_equal(at, ('C', (62.5, 62.5, 62.5)))
    assert vec_equal(Mol.getCenter(), (2.5, 2.5, 2.5))
    assert vec_equal(Mol.getCenter(com=True), (62.5, 62.5, 62.5))