Пример #1
0
def run(lastres=[]):
    results = []

    # Hirshfeld ----------------------------------------

    if 1:

        hd = HirshfeldDensity(calc)

        # check for the number of electrons
        expected = [
            [None, 10],
            [[0, 1, 2], 10],
            [[1, 2], 2],
            [[0], 8],
        ]
        #expected = [[[0, 2], 9], ]
        #expected = [[None, 10], ]
        for gridrefinement in [1, 2, 4]:
            #Test for all gridrefinements for get_all_electron_density
            parprint('grid refinement', gridrefinement)
            for result in expected:
                indicees, result = result
                full, gd = hd.get_density(indicees, gridrefinement)
                parprint('indicees', indicees, end=': ')
                parprint('result, expected:', gd.integrate(full), result)
                if gridrefinement < 4:
                    #The highest level of gridrefinement gets wrong electron numbers
                    equal(gd.integrate(full), result, 1.e-8)
                else:
                    equal(gd.integrate(full), result, 1.e-4)

        hp = HirshfeldPartitioning(calc)
        vr = hp.get_effective_volume_ratios()
        parprint('Hirshfeld:', vr)
        if len(lastres):
            equal(vr, lastres.pop(0), 1.e-10)
        results.append(vr)

    # Wigner-Seitz ----------------------------------------

    if 1:
        ws = WignerSeitz(calc.density.finegd, mol, calc)

        vr = ws.get_effective_volume_ratios()
        parprint('Wigner-Seitz:', vr)
        if len(lastres):
            equal(vr, lastres.pop(0), 1.e-10)
        results.append(vr)

    return results
Пример #2
0
def run(lastres=[]):
    results = []

    # Hirshfeld ----------------------------------------

    if 1:

        hd = HirshfeldDensity(calc)

        # check for the number of electrons
        expected = [[None, 10],
                    [[0, 1, 2], 10],
                    [[1, 2], 2],
                    [[0], 8],
                    ]
        #expected = [[[0, 2], 9], ]
        #expected = [[None, 10], ]
        for gridrefinement in [1, 2, 4]:
            #Test for all gridrefinements for get_all_electron_density
            parprint('grid refinement', gridrefinement)
            for result in expected:
                indicees, result = result
                full, gd = hd.get_density(indicees, gridrefinement)
                parprint('indicees', indicees, end=': ') 
                parprint('result, expected:', gd.integrate(full), result)
                if gridrefinement < 4:
                    #The highest level of gridrefinement gets wrong electron numbers
                    equal(gd.integrate(full), result, 1.e-8)
                else:
                    equal(gd.integrate(full), result, 1.e-5)

        hp = HirshfeldPartitioning(calc)
        vr = hp.get_effective_volume_ratios()
        parprint('Hirshfeld:', vr)
        if len(lastres):
            equal(vr, lastres.pop(0), 1.e-10)
        results.append(vr)

    # Wigner-Seitz ----------------------------------------

    if 1:
        ws = WignerSeitz(calc.density.finegd, mol, calc)

        vr = ws.get_effective_volume_ratios()
        parprint('Wigner-Seitz:', vr)
        if len(lastres):
            equal(vr, lastres.pop(0), 1.e-10)
        results.append(vr)

    return results
Пример #3
0
    # split the structures
    s1 = ss.find_connected(0)
    s2 = ss.find_connected(-1)
    assert len(ss) == len(s1) + len(s2)

    c = GPAW(xc='PBE', h=h, nbands=-6,
             occupations=FermiDirac(width=0.1), txt=None)
    cdf = GPAW(xc='vdW-DF', h=h, nbands=-6, occupations=FermiDirac(width=0.1),
               txt=None)

    for s in [s1, s2, ss]:
        s.set_calculator(c)
        s.minimal_box(box, h=h)
        Energy['PBE'].append(s.get_potential_energy())
        cc = vdWTkatchenko09prl(HirshfeldPartitioning(c),
                                vdWradii(s.get_chemical_symbols(), 'PBE'))
        s.set_calculator(cc)
        Energy['TS09'].append(s.get_potential_energy())

        s.set_calculator(cdf)
        Energy['vdW-DF'].append(s.get_potential_energy())

    parprint('Coupled cluster binding energy',
             -data[molecule]['interaction energy CC'] * 1000, 'meV')
    for xc in ['PBE', 'vdW-DF', 'TS09']:
        ene = Energy[xc]
#        print xc, 'energies', ene
        parprint(xc, 'binding energy',
                 (ene[0] + ene[1] - ene[2]) * 1000, 'meV')
Пример #4
0
"""Test Hirshfeld for spin/no spin consitency"""
from ase import Atom
from gpaw import GPAW
from ase.parallel import parprint
from gpaw.analyse.hirshfeld import HirshfeldPartitioning
from gpaw import FermiDirac
from gpaw.cluster import Cluster
from gpaw.test import equal

h = 0.25
box = 3

atoms = Cluster()
atoms.append(Atom('H'))
atoms.minimal_box(box)

volumes = []
for spinpol in [False, True]:
    calc = GPAW(h=h,
                occupations=FermiDirac(0.1, fixmagmom=True),
                experimental={'niter_fixdensity': 2},
                spinpol=spinpol)
    calc.calculate(atoms)
    volumes.append(HirshfeldPartitioning(calc).get_effective_volume_ratios())
parprint(volumes)
equal(volumes[0][0], volumes[1][0], 4e-9)
Пример #5
0
    hd = HirshfeldDensity(calc)

    # check for the number of electrons
    expected = [
        [None, 10],
        [[0, 1, 2], 10],
        [[1, 2], 2],
        [[0], 8],
    ]
    #expected = [[[0, 2], 9], ]
    #expected = [[None, 10], ]
    for result in expected:
        indicees, result = result
        full, gd = hd.get_density(indicees)
        parprint('indicees', indicees, end=': ')
        parprint('result, expected:', gd.integrate(full), result)
        equal(gd.integrate(full), result, 1.e-8)

    hp = HirshfeldPartitioning(calc)
    vr = hp.get_effective_volume_ratios()
    parprint('Hirshfeld:', vr)
#    equal(vr[1], vr[2], 1.e-3)

# Wigner-Seitz ----------------------------------------

if 1:
    ws = WignerSeitz(calc.density.finegd, mol, calc)

    vr = ws.get_effective_volume_ratios()
    parprint('Wigner-Seitz:', vr)
Пример #6
0
    equal(q_a.sum(), q, 0.03)
    return q_a


# spin unpolarized

if 1:
    out_traj = 'LiH.traj'
    out_txt = 'LiH.txt'

    cc = GPAW(h=h, xc='PBE', txt=out_txt)

    # this is needed to initialize txt output
    cc.initialize(s)

    hp = HirshfeldPartitioning(cc)
    c = vdWTkatchenko09prl(hp, vdWradii(s.get_chemical_symbols(), 'PBE'))
    s.set_calculator(c)
    E = s.get_potential_energy()
    F_ac = s.get_forces()
    s.write(out_traj)
    q_a = print_charge_and_check(hp)

    barrier()

    # test I/O, accuracy due to text output
    accuracy = 1.e-5
    for fname in [out_traj, out_txt]:
        print(fname)
        s_out = ase.io.read(fname)
        print(s_out.calc)
Пример #7
0
    hd = HirshfeldDensity(calc)

    # check for the number of electrons
    expected = [[None, 10],
                [[0, 1, 2], 10],
                [[1, 2], 2],
                [[0], 8],
                ]
    #expected = [[[0, 2], 9], ]
    #expected = [[None, 10], ]
    for result in expected:
        indicees, result = result
        full, gd = hd.get_density(indicees)
        parprint('indicees', indicees, end=': ') 
        parprint('result, expected:', gd.integrate(full), result)
        equal(gd.integrate(full), result, 1.e-8)

    hp = HirshfeldPartitioning(calc)
    vr = hp.get_effective_volume_ratios()
    parprint('Hirshfeld:', vr)
#    equal(vr[1], vr[2], 1.e-3)

# Wigner-Seitz ----------------------------------------

if 1:
    ws = WignerSeitz(calc.density.finegd, mol, calc)
    
    vr = ws.get_effective_volume_ratios()
    parprint('Wigner-Seitz:', vr)