def wan(calc): centers = [([0.125, 0.125, 0.125], 0, 1.5), ([0.125, 0.625, 0.125], 0, 1.5), ([0.125, 0.125, 0.625], 0, 1.5), ([0.625, 0.125, 0.125], 0, 1.5)] w = Wannier(4, calc, nbands=4, verbose=False, initialwannier=centers) w.localize() x = w.get_functional_value() centers = (w.get_centers(1) * k) % 1 c = (centers - 0.125) * 2 #print w.get_radii() # broken! XXX assert abs(c.round() - c).max() < 0.03 c = c.round().astype(int).tolist() c.sort() assert c == [[0, 0, 0], [0, 0, 1], [0, 1, 0], [1, 0, 0]] if 0: from ase.visualize import view from ase import Atoms watoms = calc.atoms + Atoms(symbols='X4', scaled_positions=centers, cell=calc.atoms.cell) view(watoms) return x
def test_get_centers(): # Rough test on the position of the Wannier functions' centers gpaw = pytest.importorskip('gpaw') calc = gpaw.GPAW(gpts=(32, 32, 32), nbands=4, txt=None) atoms = molecule('H2', calculator=calc) atoms.center(vacuum=3.) atoms.get_potential_energy() wanf = Wannier(nwannier=2, calc=calc, initialwannier='bloch') centers = wanf.get_centers() com = atoms.get_center_of_mass() assert np.abs(centers - [com, com]).max() < 1e-4