예제 #1
0
a = 5.404
bulk = Atoms(symbols='Si8',
             positions=[(0, 0, 0),
                        (0, 0.5, 0.5),
                        (0.5, 0, 0.5),
                        (0.5, 0.5, 0),
                        (0.25, 0.25, 0.25),
                        (0.25, 0.75, 0.75),
                        (0.75, 0.25, 0.75),
                        (0.75, 0.75, 0.25)],
             pbc=True)
bulk.set_cell((a, a, a), scale_atoms=True)
n = 20

parameters = { 'gpts':(n,n,n),
               'nbands':8*3,
               'width':0.1,
               'kpts':(2,2,2),
               'usesymm':True,
               'xc':'GLLB'}
        

bulk.set_calculator(GPAW(**parameters))
E = bulk.get_potential_energy()
parameters['usesymm'] = False
bulk.set_calculator(GPAW(**parameters))
E2 = bulk.get_potential_energy()

equal(E, E2, 1e-3)

예제 #2
0
# This test takes approximately 0.4 seconds
from ase import *
from gpaw.utilities import equal
from gpaw import GPAW

a = 6.0
atoms = Atoms(
    [Atom('C', [a / 2 + 0.0234, a / 2 + 0.0345, a / 2 + 0.0456], magmom=2)],
    cell=(a, a, a))
calc = GPAW(nbands=6, h=0.2, hund=0, convergence={'eigenstates': 1e-11})
atoms.set_calculator(calc)
for i in range(3):
    f1, f2 = CheckForce(atoms, 0, i, 0.012)
    equal(f1, f2, 0.0022)
예제 #3
0
    g = Generator(atom, xcname='GLLB', scalarrel=False, nofiles=True)
    g.run(**parameters[atom])

setup_paths.insert(0, '.')

a = 5.404
bulk = Atoms(symbols='Si8',
             positions=[(0, 0, 0), (0, 0.5, 0.5), (0.5, 0, 0.5), (0.5, 0.5, 0),
                        (0.25, 0.25, 0.25), (0.25, 0.75, 0.75),
                        (0.75, 0.25, 0.75), (0.75, 0.75, 0.25)],
             pbc=True)
bulk.set_cell((a, a, a), scale_atoms=True)
n = 20

parameters = {
    'gpts': (n, n, n),
    'nbands': 8 * 3,
    'width': 0.1,
    'kpts': (2, 2, 2),
    'usesymm': True,
    'xc': 'GLLB'
}

bulk.set_calculator(GPAW(**parameters))
E = bulk.get_potential_energy()
parameters['usesymm'] = False
bulk.set_calculator(GPAW(**parameters))
E2 = bulk.get_potential_energy()

equal(E, E2, 1e-3)
예제 #4
0
파일: restart.py 프로젝트: yihsuanliu/gpaw
            e = fcc.get_potential_energy()
            calc.write(file_prefix + '.gpw')
            del calc, fcc

        for nhosts in nhostsread:
            file_prefix = 'Fe_%d_%1.1f_par%d' % (nkpt, magmom, nhosts)
            print '------ restart calculation  ', file_prefix, rank * 111111111
            calc = Calculator(file_prefix + '.gpw',
                              txt=file_prefix + '_restart.txt',
                              tolerance=1e-10)
            atoms = calc.get_atoms()
            atoms.positions[0] = (0, 0, -0.0001)
            erg = atoms.get_potential_energy()

            result = 'ok'
            equal(e, erg, 1e-4)

            niter = calc.niter
            tests.append((test, result, niter, nhosts))

del calc, atoms

for test in tests:
    print "%s ---- %10s --- %d ---- %d " % (test[0], test[1], test[2], test[3])

nhosts = 8
d = 2.0
if 1:
    a = 5.0
    O2 = Atoms([
        Atom('O', (0 + d, d, d), magmom=1),
예제 #5
0
from ase import *
from gpaw.utilities import equal
import numpy as np
from gpaw import GPAW
from gpaw.poisson import PoissonSolver

a = 2.7
bulk = Atoms('Li', pbc=True, cell=(a, a, a))
k = 4
g = 8
calc = GPAW(gpts=(g, g, g), kpts=(k, k, k), nbands=2,
                  poissonsolver=PoissonSolver(relax='GS'),
                  txt=None)
bulk.set_calculator(calc)
bulk.get_potential_energy()
ave_pot = np.sum(calc.hamiltonian.vHt_g.ravel()) / (2 * g)**3
equal(ave_pot, 0.0, 1e-8)

calc = GPAW(gpts=(g, g, g), kpts=(k, k, k), nbands=2,
                  poissonsolver=PoissonSolver(relax='J'),
                  txt=None)
bulk.set_calculator(calc)
bulk.get_potential_energy()
ave_pot = np.sum(calc.hamiltonian.vHt_g.ravel()) / (2 * g)**3
equal(ave_pot, 0.0, 1e-8)

예제 #6
0
    'X_PBE-C_PBE': -7.51091709464 * Hartree,  # 'PBE'
    'X_PBE_R-C_PBE': -7.5341232518 * Hartree,  # 'revPBE'
    'oldRPBE': -7.53943687939 * Hartree,  # 'oldRPBE'
    'PW91': -7.52300459704 * Hartree,  # 'PW91'
    'oldLDA': -7.3970905596 * Hartree,  # 'oldLDA'
    'LDA': -7.3970905596 * Hartree  # 'LDA'
}

a = 5.0
n = 24
li = Atoms([Atom('Li', (0.0, 0.0, 0.0), magmom=1.0)], cell=(a, a, a), pbc=True)

calc = GPAW(gpts=(n, n, n), nbands=1, xc='X_PBE-C_PBE')
li.set_calculator(calc)
e = li.get_potential_energy() + calc.get_reference_energy()
equal(e, -7.462 * Hartree, 0.056 * Hartree)
equal(e, reference_886['X_PBE-C_PBE'], tolerance)

calc.set(xc='X_PBE_R-C_PBE')
erev = li.get_potential_energy() + calc.get_reference_energy()
equal(erev, -7.487 * Hartree, 0.057 * Hartree)
equal(erev, reference_886['X_PBE_R-C_PBE'], tolerance)
equal(e - erev, 0.025 * Hartree, 0.002 * Hartree)

calc.set(xc='X-C_PW')
elda = li.get_potential_energy() + calc.get_reference_energy()
equal(elda, reference_886['X-C_PW'], tolerance)

calc.set(xc='RPBE')
erpbe = li.get_potential_energy() + calc.get_reference_energy()
equal(erpbe, reference_886['oldRPBE'], tolerance)
예제 #7
0
파일: resume.py 프로젝트: eojons/gpaw-scme
        parsizes_dc[8] = [(1,2,4),(1,4,2),(2,1,4),(2,2,2),(2,4,1),(4,1,2),(4,2,1)] #more

        if spinpol:
            ndomains = max(1, world.size//2)
        else:
            ndomains = world.size

        for pbc_c in pbcs_c:
            name_spin = 'spin%s' % (spinpol and 'polarized' or 'paired')
            name_pbc = 'pbc%d%d%d' % pbc_c[:]
            name = 'resume_%s_%s' % (name_spin, name_pbc)

            for parsize_c in parsizes_dc[ndomains]:
                calc = get_calc(name, spinpol, parsize_c, pbc_c)
                write('spinpol=%s, pbc=(%d,%d,%d), parsize=(%d,%d,%d): ' \
                       % ((spinpol,) + tuple(pbc_c) + tuple(parsize_c)))
                try:
                    E1 = calc.get_potential_energy()
                    calc.scf.reset()
                    calc.scf.niter_fixdensity = -1 #a hack!
                    calc.calculate(calc.atoms)
                    E2 = calc.get_potential_energy()
                except ValueError, e:
                    if e.message != 'Grid too small!':
                        raise e
                    write('ignored\n')
                else:
                    equal(E1, E2, 1e-4)
                    write('ok\n')

예제 #8
0
E_alone_neutral = Be_alone.get_potential_energy()
Be_aloneC.set_calculator(GPAW(h=0.3, charge=+1, nbands=1))
E_alone_charged = Be_aloneC.get_potential_energy()

print "A test for periodic charged calculations"
print "Be neutal solid:  ", E_solid_neutral, " eV"
print "Be neutal alone:  ", E_alone_neutral, " eV"
print "Be charged solid: ", E_solid_charged, " eV"
print "Be charged alone: ", E_alone_charged, " eV"
IPs = E_solid_neutral - E_solid_charged
IPa = E_alone_neutral - E_alone_charged
print "Ionization potential solid", IPs, " eV"
print "Ionization potential alone", IPa, " eV"

# Make sure that the ionization potential won't differ by more than 0.05eV
equal(Ips, IPa, 0.05) 

from gpaw.utilities import equal


"""Some results:

WITH CORRECTION TURNED ON:
a = 12.0
Be neutal solid:   0.000241919665987  eV
Be neutal alone:   0.000520077168021  eV
Be charged solid:  8.95928916603  eV
Be charged alone:  9.03395959412  eV
Ionization potential solid -8.95904724637  eV
Ionization potential alone -9.03343951695  eV
Difference: 0.07eV
예제 #9
0
파일: yl.py 프로젝트: yihsuanliu/gpaw
from gpaw.analyse.expandyl import ExpandYl

R = 1.
H2 = Cluster([Atom('H',(0,0,0)), Atom('H',(0,0,R))])
H2.minimal_box(3.)

calc = Calculator(h=0.2, width=0.01, nbands=2)
H2.SetCalculator(calc)
H2.GetPotentialEnergy()

yl = ExpandYl(H2.center_of_mass(), calc.wfs.gd, Rmax=2.5)
gl = []
for n in range(calc.nbands):
    psit_G = calc.kpt_u[0].psit_nG[n]
    norm = calc.wfs.gd.integrate(psit_G**2)
    g = yl.expand(psit_G)
    gsum = np.sum(g)

    # allow for 10 % inaccuracy in the norm
    print "norm, sum=", norm, gsum
    equal(norm, gsum, 0.1)
    
    gl.append(g/gsum*100)

# 1 sigma_g has s-symmetry mainly
print gl[0]
equal( gl[0][0], 100, 10)
# 1 sigma_u has p-symmetry mainly
print gl[1]
equal( gl[1][1], 100, 10)
예제 #10
0
            calc.write(file_prefix+'.gpw')
            del calc,fcc

        for nhosts in nhostsread: 
            file_prefix = 'Fe_%d_%1.1f_par%d'%(nkpt,magmom,nhosts)
            print '------ restart calculation  ',file_prefix, rank*111111111
            calc = GPAW(file_prefix+'.gpw',
                              txt=file_prefix+'_restart.txt',
                              tolerance = 1e-10)
            atoms = calc.get_atoms()
            atoms[0].set_cartesian_position([0, 0, -0.0001])
            erg = atoms.get_potential_energy()


            result = 'ok'
            equal(e,erg,1e-4)

            niter = calc.niter
            tests.append((test,result,niter,nhosts))

del calc,atoms

for test in tests: 
    print "%s ---- %10s --- %d ---- %d "%(test[0],test[1],test[2],test[3])


nhosts = 8
d = 2.0
if 1: 
    a = 5.0
    O2 = Atoms([Atom('O',(0+d,d,d  ), magmom=1),
예제 #11
0
                      spinpol=False,
                      convergence={'eigenstates': 1e-7})
    atoms.set_calculator(calc)
    atoms.get_potential_energy()
    calc.write('hwire%s.gpw' % natoms, 'all')
else:
    calc = GPAW('hwire%s.gpw' % natoms, txt=None)

wannier = Wannier(numberofwannier=natoms,
                  calculator=calc,
                  occupationenergy=occupationenergy,)
#                  initialwannier=[[[1.* i / natoms, .5, .5], [0,], .5]
#                                  for i in range(natoms)])

wannier.localize()
wannier.translate_all_wannier_functions_to_cell([1, 0, 0])

centers = wannier.get_centers()
for i in wannier.get_sorted_indices():
    center = centers[i]['pos']
    print center
    quotient = round(center[0] / hhbondlength)
    equal(hhbondlength*quotient - center[0], 0., 2e-3)
    equal(center[1], 4., 2e-3)
    equal(center[2], 4., 2e-3)

for i in range(natoms):
    wannier.write_cube(i, 'hwire%s.cube' % i, real=True)

os.system('rm hwire1.gpw hwire*.cube')
예제 #12
0
파일: C-force.py 프로젝트: eojons/gpaw-scme
# This test takes approximately 0.4 seconds
from ase import *
from gpaw.utilities import equal
from gpaw import GPAW

a = 6.0
atoms = Atoms([Atom('C', [a / 2 + 0.0234,
                                a / 2 + 0.0345,
                                a / 2 + 0.0456], magmom=2)],
                    cell=(a, a, a))
calc = GPAW(nbands=6, h=0.2, hund=0, convergence={'eigenstates': 1e-11})
atoms.set_calculator(calc)
for i in range(3):
    f1, f2 = CheckForce(atoms, 0, i, 0.012)
    equal(f1, f2, 0.0022)
예제 #13
0
    'X_PBE-C_PBE': -7.51091709464 * Hartree, # 'PBE'
    'X_PBE_R-C_PBE': -7.5341232518 * Hartree, # 'revPBE'
    'oldRPBE': -7.53943687939 * Hartree, # 'oldRPBE'
    'PW91': -7.52300459704 * Hartree, # 'PW91'
    'oldLDA': -7.3970905596 * Hartree, # 'oldLDA'
    'LDA': -7.3970905596 * Hartree # 'LDA'
    }

a = 5.0
n = 24
li = Atoms([Atom('Li', (0.0, 0.0, 0.0), magmom=1.0)], cell=(a, a, a), pbc=True)

calc = GPAW(gpts=(n, n, n), nbands=1, xc='X_PBE-C_PBE')
li.set_calculator(calc)
e = li.get_potential_energy() + calc.get_reference_energy()
equal(e, -7.462 * Hartree, 0.056 * Hartree)
equal(e, reference_886['X_PBE-C_PBE'], tolerance)

calc.set(xc='X_PBE_R-C_PBE')
erev = li.get_potential_energy() + calc.get_reference_energy()
equal(erev, -7.487 * Hartree, 0.057 * Hartree)
equal(erev, reference_886['X_PBE_R-C_PBE'], tolerance)
equal(e - erev, 0.025 * Hartree, 0.002 * Hartree)

calc.set(xc='X-C_PW')
elda = li.get_potential_energy() + calc.get_reference_energy()
equal(elda, reference_886['X-C_PW'], tolerance)

calc.set(xc='RPBE')
erpbe = li.get_potential_energy() + calc.get_reference_energy()
equal(erpbe, reference_886['oldRPBE'], tolerance)
예제 #14
0
              xc='PBE',
              kpts=[4,4,1],
              convergence={'energy': 0.001,
                           'density': 0.001,
                           'eigenstates': 1.0e-7,
                           'bands': -3})
atoms.set_calculator(calc_1)
E_gs = atoms.get_potential_energy()

# Dscf calculation based on the MolecularOrbital class
calc_1.set(nbands=25, spinpol=True)
weights = {2: [0.,0.,0.,1.], 3: [0.,0.,0.,-1.]}
lumo = dscf.MolecularOrbital(calc_1, weights=weights)
dscf.dscf_calculation(calc_1, [[1.0, lumo, 1]], atoms)
E_es1 = atoms.get_potential_energy()
equal(E_es1, E_gs + 4.55, 0.1)

# Dscf calculation based on the AEOrbital class. Two new calculators
# are needed. One for the molecule and one for the dscf calcultion"""
calc_mol = GPAW(h=0.24,
                nbands=8,
                xc='PBE',
                spinpol=True,
                kpts=[4,4,1],
                convergence={'energy': 0.1,
                             'density': 0.1,
                             'eigenstates': 1.0e-9,
                             'bands': -1})
CO = atoms.copy()
del CO[:2]
CO.set_calculator(calc_mol)
예제 #15
0
from ase import *
from gpaw import GPAW
from gpaw.utilities import equal

a = 5.0
H = Atoms('H', [(a/2, a/2, a/2)], magmoms=[1],
          pbc=False,
          cell=(a, a, a))

H.set_calculator(GPAW(h=0.1, setups='ae', fixmom=True))
e1 = H.get_potential_energy()

c = a / 2.0
d = 0.74
s = d / 2 / 3**0.5
H2 = Atoms('H2', 
           [(c - s, c - s, c - s),
            (c + s, c + s, c + s)],
           pbc=False,
           cell=(a, a, a))

H2.set_calculator(GPAW(h=0.1, setups='ae'))
e2 = H2.get_potential_energy()
print e1, e2, 2 * e1 - e2
equal(2 * e1 - e2, 4.55354238957, 1e-5)
예제 #16
0
    atoms.set_calculator(calc)
    atoms.get_potential_energy()
    calc.write('hwire%s.gpw' % natoms, 'all')
else:
    calc = GPAW('hwire%s.gpw' % natoms, txt=None)

wannier = Wannier(
    numberofwannier=natoms,
    calculator=calc,
    occupationenergy=occupationenergy,
)
#                  initialwannier=[[[1.* i / natoms, .5, .5], [0,], .5]
#                                  for i in range(natoms)])

wannier.localize()
wannier.translate_all_wannier_functions_to_cell([1, 0, 0])

centers = wannier.get_centers()
for i in wannier.get_sorted_indices():
    center = centers[i]['pos']
    print center
    quotient = round(center[0] / hhbondlength)
    equal(hhbondlength * quotient - center[0], 0., 2e-3)
    equal(center[1], 4., 2e-3)
    equal(center[2], 4., 2e-3)

for i in range(natoms):
    wannier.write_cube(i, 'hwire%s.cube' % i, real=True)

os.system('rm hwire1.gpw hwire*.cube')
예제 #17
0
파일: resume.py 프로젝트: yihsuanliu/gpaw
        parsizes_dc[8] = [(1, 2, 4), (1, 4, 2), (2, 1, 4), (2, 2, 2),
                          (2, 4, 1), (4, 1, 2), (4, 2, 1)]  #more

        if spinpol:
            ndomains = max(1, world.size // 2)
        else:
            ndomains = world.size

        for pbc_c in pbcs_c:
            name_spin = 'spin%s' % (spinpol and 'polarized' or 'paired')
            name_pbc = 'pbc%d%d%d' % pbc_c[:]
            name = 'resume_%s_%s' % (name_spin, name_pbc)

            for parsize_c in parsizes_dc[ndomains]:
                calc = get_calc(name, spinpol, parsize_c, pbc_c)
                write('spinpol=%s, pbc=(%d,%d,%d), parsize=(%d,%d,%d): ' \
                       % ((spinpol,) + tuple(pbc_c) + tuple(parsize_c)))
                try:
                    E1 = calc.get_potential_energy()
                    calc.scf.reset()
                    calc.scf.niter_fixdensity = -1  #a hack!
                    calc.calculate(calc.atoms)
                    E2 = calc.get_potential_energy()
                except ValueError, e:
                    if e.message != 'Grid too small!':
                        raise e
                    write('ignored\n')
                else:
                    equal(E1, E2, 1e-4)
                    write('ok\n')
예제 #18
0
    calc = GPAW(convergence={'eigenstates': 1e-6}, hosts=hosts,
                      txt='exx_parallel.txt')

    loa.set_calculator(calc)
    p.append(loa.get_potential_energy())
    exx.append(calc.get_exact_exchange())

    print 'number of CPUs   :', hosts
    print 'Potential energy :', p[i]
    print 'Exchange energy  :', exx[i]
    print ''
    
    i += 1

for i in range(1, len(exx)):
    equal(p[i], p[0], 1e-2)
    equal(exx[i], exx[0], 1e-2)

## number of CPUs   : 1
## Potential energy : -1.07206007502
## Exchange energy  : -137.443595686

## number of CPUs   : 2
## Potential energy : -1.07206007502
## Exchange energy  : -137.443595686

## number of CPUs   : 3
## Potential energy : -1.0721486372
## Exchange energy  : -137.405085235

## number of CPUs   : 4