示例#1
0
def main():
    import optparse
    parser = optparse.OptionParser(usage='Usage: %prog <gpw-file> [options]',
                                   description=description)
    add = parser.add_option

    add('-e',
        '--cut-off',
        type=float,
        default=100,
        meta='ECUT',
        help='Plane-wave cut off energy (eV) for polarization function.')
    add('-b',
        '--blocks',
        type=int,
        default=1,
        meta='N',
        help='Split polarization matrix in N blocks.')

    opts, args = parser.parse_args()
    if len(args) == 0:
        parser.error('No gpw-file!')
    if len(args) > 1:
        parser.error('Too many arguments!')

    name = args[0]
    assert name.endswith('.gpw')

    rpa = RPACorrelation(name,
                         txt=name[:-3] + 'rpa.txt',
                         wstc=True,
                         nblocks=opts.blocks)
    rpa.calculate([opts.cut_off])
示例#2
0
文件: fxc.py 项目: robwarm/gpaw-symm
    def __init__(self, calc, xc='RPA', filename=None,
                 skip_gamma=False, qsym=True, nlambda=8,
                 nfrequencies=16, frequency_max=800.0, frequency_scale=2.0,
                 frequencies=None, weights=None, density_cut=1.e-6,
                 wcomm=None, chicomm=None, world=mpi.world,
                 unit_cells=None, tag=None,
                 txt=sys.stdout):

        RPACorrelation.__init__(self, calc, xc=xc, filename=filename,
                                skip_gamma=skip_gamma, qsym=qsym,
                                nfrequencies=nfrequencies, nlambda=nlambda,
                                frequency_max=frequency_max,
                                frequency_scale=frequency_scale,
                                frequencies=frequencies, weights=weights,
                                wcomm=wcomm, chicomm=chicomm, world=world,
                                txt=txt)

        self.l_l, self.weight_l = p_roots(nlambda)
        self.l_l = (self.l_l + 1.0) * 0.5
        self.weight_l *= 0.5
        self.xc = xc
        self.density_cut = density_cut
        if unit_cells is None:
            unit_cells = self.calc.wfs.kd.N_c
        self.unit_cells = unit_cells
        if tag is None:
            tag = self.calc.atoms.get_chemical_formula(mode='hill')
        self.tag = tag
示例#3
0
    def calculate(self, ecut):
        if self.xc != 'RPA':
            if isinstance(ecut, (float, int)):
                self.ecut_max = ecut
            else:
                self.ecut_max = max(ecut)

            if not os.path.isfile('fhxc_%s_%s_%s_0.gpw' %
                                  (self.tag, self.xc, self.ecut_max)):
                kernel = Kernel(self.calc, self.xc, self.ibzq_qc, self.fd,
                                self.unit_cells, self.density_cut,
                                self.ecut_max, self.tag, self.timer)
                kernel.calculate_fhxc()
                del kernel
            else:
                prnt('%s kernel already calculated' % self.xc, file=self.fd)
                prnt(file=self.fd)

        if self.calc.wfs.nspins == 1:
            spin = False
        else:
            spin = True

        e = RPACorrelation.calculate(self, ecut, spin=spin)

        return e
示例#4
0
文件: fxc.py 项目: robwarm/gpaw-symm
    def calculate(self, ecut):

        if self.xc != 'RPA':
            if isinstance(ecut, (float, int)):
                self.ecut_max = ecut
            else:
                self.ecut_max = max(ecut)

            if not os.path.isfile('fhxc_%s_%s_%s_0.gpw'
                                  % (self.tag, self.xc, self.ecut_max)):
                kernel = Kernel(self.calc, self.xc, self.ibzq_qc,
                                self.fd, self.unit_cells, self.density_cut,
                                self.ecut_max, self.tag)
                kernel.calculate_fhxc()
                del kernel
            else:
                prnt('%s kernel already calculated' % self.xc, file=self.fd)
                prnt(file=self.fd)

        if self.calc.wfs.nspins == 1:
            spin = False
        else:
            spin = True

        e = RPACorrelation.calculate(self, ecut, spin=spin)

        return e
示例#5
0
    def __init__(self,
                 calc,
                 xc='RPA',
                 filename=None,
                 skip_gamma=False,
                 qsym=True,
                 nlambda=8,
                 nfrequencies=16,
                 frequency_max=800.0,
                 frequency_scale=2.0,
                 frequencies=None,
                 weights=None,
                 density_cut=1.e-6,
                 world=mpi.world,
                 nblocks=1,
                 unit_cells=None,
                 tag=None,
                 txt=sys.stdout):

        RPACorrelation.__init__(self,
                                calc,
                                xc=xc,
                                filename=filename,
                                skip_gamma=skip_gamma,
                                qsym=qsym,
                                nfrequencies=nfrequencies,
                                nlambda=nlambda,
                                frequency_max=frequency_max,
                                frequency_scale=frequency_scale,
                                frequencies=frequencies,
                                weights=weights,
                                world=world,
                                nblocks=nblocks,
                                txt=txt)

        self.l_l, self.weight_l = p_roots(nlambda)
        self.l_l = (self.l_l + 1.0) * 0.5
        self.weight_l *= 0.5
        self.xc = xc
        self.density_cut = density_cut
        if unit_cells is None:
            unit_cells = self.calc.wfs.kd.N_c
        self.unit_cells = unit_cells
        if tag is None:
            tag = self.calc.atoms.get_chemical_formula(mode='hill')
        self.tag = tag
示例#6
0
def rpa(filename, ecut=200.0, blocks=1, extrapolate=4):
    """Calculate RPA energy.
    
    filename: str
        Name of restart-file.
    ecut: float
        Plane-wave cutoff.
    blocks: int
        Split polarizability matrix in this many blocks.
    extrapolate: int
        Number of cutoff energies to use for extrapolation.
    """
    name, ext = filename.rsplit('.', 1)
    assert ext == 'gpw'
    from gpaw.xc.rpa import RPACorrelation
    rpa = RPACorrelation(name, name + '-rpa.dat',
                         nblocks=blocks,
                         txt=name + '-rpa.txt')
    rpa.calculate(ecut=ecut * (1 + 0.5 * np.arange(extrapolate))**(-2 / 3))
示例#7
0
def rpa(filename, ecut=200.0, blocks=1, extrapolate=4):
    """Calculate RPA energy.
    
    filename: str
        Name of restart-file.
    ecut: float
        Plane-wave cutoff.
    blocks: int
        Split polarizability matrix in this many blocks.
    extrapolate: int
        Number of cutoff energies to use for extrapolation.
    """
    name, ext = filename.rsplit('.', 1)
    assert ext == 'gpw'
    from gpaw.xc.rpa import RPACorrelation
    rpa = RPACorrelation(name, name + '-rpa.dat',
                         nblocks=blocks,
                         wstc=True,
                         txt=name + '-rpa.txt')
    rpa.calculate(ecut=ecut * (1 + 0.5 * np.arange(extrapolate))**(-2 / 3))
示例#8
0
def main():
    import optparse
    parser = optparse.OptionParser(usage='Usage: %prog <gpw-file> [options]',
                                   description=description)
    add = parser.add_option
    
    add('-e', '--cut-off', type=float, default=100, meta='ECUT',
        help='Plane-wave cut off energy (eV) for polarization function.')
    add('-b', '--blocks', type=int, default=1, meta='N',
        help='Split polarization matrix in N blocks.')
    
    opts, args = parser.parse_args()
    if len(args) == 0:
        parser.error('No gpw-file!')
    if len(args) > 1:
        parser.error('Too many arguments!')
    
    name = args[0]
    assert name.endswith('.gpw')
    
    rpa = RPACorrelation(name,
                         txt=name[:-3] + 'rpa.txt',
                         wstc=True, nblocks=opts.blocks)
    rpa.calculate([opts.cut_off])
示例#9
0
from gpaw.mpi import serial_comm
from gpaw.test import equal
from gpaw.xc.rpa import RPACorrelation
import numpy as np

a0 = 5.43
cell = bulk('Si', 'fcc', a=a0).get_cell()
Si = Atoms('Si2', cell=cell, pbc=True,
           scaled_positions=((0,0,0), (0.25,0.25,0.25)))

kpts = monkhorst_pack((2,2,2))
kpts += np.array([1/4., 1/4., 1/4.])

calc = GPAW(mode='pw',
            kpts=kpts,
            occupations=FermiDirac(0.001),
            communicator=serial_comm)
Si.set_calculator(calc)
E = Si.get_potential_energy()
calc.diagonalize_full_hamiltonian(nbands=50)

ecut = 50
rpa = RPACorrelation(calc, qsym=False, nfrequencies=8)
E_rpa_noqsym = rpa.calculate(ecut=[ecut])

rpa = RPACorrelation(calc, qsym=True, nfrequencies=8)
E_rpa_qsym = rpa.calculate(ecut=[ecut])

equal(E_rpa_qsym, E_rpa_noqsym, 0.001)
equal(E_rpa_qsym, -12.61, 0.01)
示例#10
0
from ase.build import bulk
from gpaw import GPAW, FermiDirac
from gpaw.mpi import serial_comm
from gpaw.test import equal
from gpaw.xc.rpa import RPACorrelation

a0 = 5.43
Si = bulk('Si', a=a0)

calc = GPAW(mode='pw',
            kpts={
                'size': (2, 2, 2),
                'gamma': True
            },
            occupations=FermiDirac(0.001),
            communicator=serial_comm)
Si.set_calculator(calc)
E = Si.get_potential_energy()
calc.diagonalize_full_hamiltonian(nbands=50)

ecut = 50
rpa = RPACorrelation(calc, qsym=False, nfrequencies=8)
E_rpa_noqsym = rpa.calculate(ecut=[ecut])

rpa = RPACorrelation(calc, qsym=True, nfrequencies=8)
E_rpa_qsym = rpa.calculate(ecut=[ecut])

print(E_rpa_qsym, E_rpa_noqsym, 0.001)
equal(E_rpa_qsym, -12.61, 0.01)
示例#11
0
from __future__ import print_function
from ase.parallel import paropen
from ase.units import Hartree
from gpaw.xc.rpa import RPACorrelation
from gpaw.xc.fxc import FXCCorrelation
from gpaw.mpi import world

fxc0 = FXCCorrelation('CO.ralda.pbe_wfcs_CO.gpw',
                      xc='rAPBE',
                      txt='CO.ralda_02_CO_rapbe.txt',
                      wcomm=world.size)

E0_i = fxc0.calculate(ecut=400)

f = paropen('CO.ralda_rapbe_CO.dat', 'w')
for ecut, E0 in zip(fxc0.ecut_i, E0_i):
    print(ecut * Hartree, E0, file=f)
f.close()

rpa0 = RPACorrelation('CO.ralda.pbe_wfcs_CO.gpw',
                      txt='CO.ralda_02_CO_rpa.txt',
                      wcomm=world.size)

E0_i = rpa0.calculate(ecut=400)

f = paropen('CO.ralda_rpa_CO.dat', 'w')
for ecut, E0 in zip(rpa0.ecut_i, E0_i):
    print(ecut * Hartree, E0, file=f)
f.close()
示例#12
0
from gpaw.xc.rpa import RPACorrelation

rpa = RPACorrelation('H.ralda.pbe_wfcs.gpw',
                     txt='H.ralda_05_rpa_at_pbe.output.txt')
rpa.calculate(ecut=300)
示例#13
0
from __future__ import print_function
from ase.parallel import paropen
from ase.units import Hartree
from gpaw.xc.rpa import RPACorrelation

f = paropen('con_freq.dat', 'w')
for N in [4, 6, 8, 12, 16, 24, 32]:
    rpa = RPACorrelation('N2.gpw',
                         txt='rpa_N2_frequencies.txt',
                         nfrequencies=N)
    E = rpa.calculate(ecut=[50])
    print(N, E[0], file=f)
    if N == 16:
        f16 = paropen('frequency_gauss16.dat', 'w')
        for w, e in zip(rpa.omega_w, rpa.E_w):
            print(w * Hartree, e, file=f16)
        f16.close()
f.close()
示例#14
0
from ase.build import bulk
from gpaw import GPAW, FermiDirac
from gpaw.mpi import serial_comm
from gpaw.test import equal
from gpaw.xc.rpa import RPACorrelation
from gpaw.xc.fxc import FXCCorrelation

a0 = 5.43
Ni = bulk('Ni', 'fcc')
Ni.set_initial_magnetic_moments([0.7])

calc = GPAW(mode='pw',
            kpts=(3, 3, 3),
            occupations=FermiDirac(0.001),
            setups={'Ni': '10'},
            communicator=serial_comm)
Ni.set_calculator(calc)
E = Ni.get_potential_energy()
calc.diagonalize_full_hamiltonian(nbands=50)

rpa = RPACorrelation(calc, nfrequencies=8, skip_gamma=True)
E_rpa = rpa.calculate(ecut=[50])

fxc = FXCCorrelation(calc, nlambda=16, nfrequencies=8, skip_gamma=True)
E_fxc = fxc.calculate(ecut=[50])

equal(E_rpa, -7.826, 0.01)
equal(E_fxc, -7.826, 0.01)
示例#15
0
calc = GPAW(mode=PW(force_complex_dtype=True),
            xc='PBE',
            parallel={'domain': 1},
            eigensolver='rmm-diis')
N2.set_calculator(calc)
E_n2_pbe = N2.get_potential_energy()

calc.diagonalize_full_hamiltonian(nbands=104, scalapack=True)
calc.write('N2.gpw', mode='all')

exx = EXX('N2.gpw')
exx.calculate()
E_n2_hf = exx.get_total_energy()

rpa = RPACorrelation('N2.gpw', nfrequencies=8)
E_n2_rpa = rpa.calculate(ecut=[ecut])

N = molecule('N')
N.set_cell(N2.cell)

calc = GPAW(mode=PW(force_complex_dtype=True),
            xc='PBE',
            parallel={'domain': 1},
            eigensolver='rmm-diis')
N.set_calculator(calc)
E_n_pbe = N.get_potential_energy()

calc.diagonalize_full_hamiltonian(nbands=104, scalapack=True)
calc.write('N.gpw', mode='all')
示例#16
0
from __future__ import print_function
from ase.parallel import paropen
from gpaw.xc.rpa import RPACorrelation

ds = [1.75, 2.0, 2.25, 2.5, 2.75, 3.0, 3.25, 3.5, 3.75, 4.0, 5.0, 6.0, 10.0]

for d in ds:
    rpa = RPACorrelation('gs_%s.gpw' % d, txt='rpa_%s_%s.txt' % (ecut, d))
    E_rpa = rpa.calculate(ecut=[200],
                          frequency_scale=2.5,
                          skip_gamma=True,
                          filename='restart_%s_%s.txt' % (ecut, d))

    f = paropen('rpa_%s.dat' % ecut, 'a')
    print(d, E_rpa, file=f)
    f.close()
示例#17
0
文件: rpa.py 项目: thonmaker/gpaw
 def run(args):
     assert args.gpw.endswith('.gpw')
     rpa = RPACorrelation(args.gpw,
                          txt=args.gpw[:-3] + 'rpa.txt',
                          nblocks=args.blocks)
     rpa.calculate([args.cut_off])
示例#18
0
文件: si.rpa.py 项目: thonmaker/gpaw
from gpaw.xc.rpa import RPACorrelation

rpa1 = RPACorrelation('bulk.all.gpw', txt='si.rpa.rpa_output.txt')

E1_i = rpa1.calculate(ecut=[164.0, 140.0, 120.0, 100.0, 80.0])
示例#19
0
from gpaw.xc.rpa import RPACorrelation

rpa = RPACorrelation('H.ralda.lda_wfcs.gpw',
                     txt='H.ralda_02_rpa_at_lda.output.txt')
rpa.calculate(ecut=300)
示例#20
0
cell = bulk('Si', 'fcc', a=a0).get_cell()
Si = Atoms('Si2', cell=cell, pbc=True,
           scaled_positions=((0,0,0), (0.25,0.25,0.25)))

kpts = monkhorst_pack((2,2,2))
kpts += np.array([1/4., 1/4., 1/4.])

calc = GPAW(mode='pw',
            kpts=kpts,
            occupations=FermiDirac(0.001),
            communicator=serial_comm)
Si.set_calculator(calc)
E = Si.get_potential_energy()
calc.diagonalize_full_hamiltonian(nbands=50)

rpa = RPACorrelation(calc)
E_rpa1 = rpa.calculate(ecut=[25, 50])

fxc = FXCCorrelation(calc, xc='RPA', nlambda=16)
E_rpa2 = fxc.calculate(ecut=[25, 50])

fxc = FXCCorrelation(calc, xc='rALDA', unit_cells=[1,1,2])
E_ralda = fxc.calculate(ecut=[25, 50])

fxc = FXCCorrelation(calc, xc='rAPBE', unit_cells=[1,1,2])
E_rapbe = fxc.calculate(ecut=[25, 50])

equal(E_rpa1[-1], E_rpa2[-1], 0.01)
equal(E_rpa2[-1], -12.6495, 0.001)
equal(E_ralda[-1], -11.3817, 0.001)
equal(E_rapbe[-1], -11.1640, 0.001)
示例#21
0
from ase.parallel import paropen
from gpaw.xc.rpa import RPACorrelation
import numpy as np

dw = 0.5
frequencies = np.array([dw * i for i in range(2000)])
weights = len(frequencies) * [dw]
weights[0] /= 2
weights[-1] /= 2
weights = np.array(weights)

rpa = RPACorrelation('N2.gpw', 
                     txt='frequency_equidistant.txt', 
                     frequencies=frequencies, 
                     weights=weights)

Es = rpa.calculate(ecut=[50])
Es_w = rpa.E_w

f = paropen('frequency_equidistant.dat', 'w')
for w, E in zip(frequencies, Es_w):
    print >> f, w, E.real
f.close()
示例#22
0
from gpaw.xc.rpa import RPACorrelation

#This calculation is too heavy to run as an exercise!!

rpa1 = RPACorrelation('si_isolated.gpw', txt='rpa_output.txt')

E1_i = rpa1.calculate(ecut=400.0)
from ase.lattice import bulk
from gpaw import GPAW, FermiDirac
from gpaw.mpi import serial_comm
from gpaw.test import equal
from gpaw.xc.rpa import RPACorrelation
from gpaw.xc.fxc import FXCCorrelation

a0 = 5.43
Ni = bulk("Ni", "fcc")
Ni.set_initial_magnetic_moments([0.7])

calc = GPAW(mode="pw", kpts=(3, 3, 3), occupations=FermiDirac(0.001), setups={"Ni": "10"}, communicator=serial_comm)
Ni.set_calculator(calc)
E = Ni.get_potential_energy()
calc.diagonalize_full_hamiltonian(nbands=50)

rpa = RPACorrelation(calc, nfrequencies=8, skip_gamma=True)
E_rpa = rpa.calculate(ecut=[50])

fxc = FXCCorrelation(calc, nlambda=16, nfrequencies=8, skip_gamma=True)
E_fxc = fxc.calculate(ecut=[50])

equal(E_rpa, -7.826, 0.01)
equal(E_fxc, -7.826, 0.01)
示例#24
0
from __future__ import print_function
from ase.parallel import paropen
from gpaw.xc.rpa import RPACorrelation
import numpy as np

dw = 0.5
frequencies = np.array([dw * i for i in range(2000)])
weights = len(frequencies) * [dw]
weights[0] /= 2
weights[-1] /= 2
weights = np.array(weights)

rpa = RPACorrelation('N2.gpw',
                     txt='frequency_equidistant.txt',
                     frequencies=frequencies,
                     weights=weights)

Es = rpa.calculate(ecut=[50])
Es_w = rpa.E_w

f = paropen('frequency_equidistant.dat', 'w')
for w, E in zip(frequencies, Es_w):
    print(w, E.real, file=f)
f.close()
示例#25
0
文件: rpa_N2.py 项目: thonmaker/gpaw
from __future__ import print_function
from ase.parallel import paropen
from ase.units import Hartree
from gpaw.xc.rpa import RPACorrelation

rpa = RPACorrelation('N.gpw',
                     nblocks=8,
                     truncation='wigner-seitz',
                     txt='rpa_N.txt')
E1_i = rpa.calculate(ecut=400)

rpa = RPACorrelation('N2.gpw',
                     nblocks=8,
                     truncation='wigner-seitz',
                     txt='rpa_N2.txt')
E2_i = rpa.calculate(ecut=400)
ecut_i = rpa.ecut_i

f = paropen('rpa_N2.dat', 'w')
for ecut, E1, E2 in zip(ecut_i, E1_i, E2_i):
    print(ecut * Hartree, E2 - 2 * E1, file=f)
f.close()
from gpaw.xc.rpa import RPACorrelation
from gpaw.test import equal

bulk = bulk("Na", "bcc", a=4.23)

ecut = 350
calc = GPAW(
    mode=PW(ecut),
    dtype=complex,
    basis="dzp",
    kpts={"size": (4, 4, 4), "gamma": True},
    parallel={"domain": 1},
    txt="gs_occ_pw.txt",
    nbands=4,
    occupations=FermiDirac(0.01),
    setups={"Na": "1"},
)
bulk.set_calculator(calc)
bulk.get_potential_energy()
calc.write("gs_occ_pw.gpw")

calc = GPAW("gs_occ_pw.gpw", txt="gs_pw.txt", parallel={"band": 1})
calc.diagonalize_full_hamiltonian(nbands=520)
calc.write("gs_pw.gpw", "all")

ecut = 120
calc = GPAW("gs_pw.gpw", communicator=serial_comm, txt=None)
rpa = RPACorrelation(calc, txt="rpa_%s.txt" % ecut)
E = rpa.calculate(ecut=[ecut])
equal(E, -1.106, 0.005)
示例#27
0
from gpaw.xc.rpa import RPACorrelation

rpa1 = RPACorrelation('bulk.gpw', txt='si.rpa.rpa_output.txt')

E1_i = rpa1.calculate(ecut=[164.0, 140.0, 120.0, 100.0, 80.0])
示例#28
0
calc = GPAW(mode=PW(300),
            hund=True,
            dtype=complex,
            xc='LDA')

H.set_calculator(calc)
E_lda = H.get_potential_energy()
E_c_lda = -calc.get_xc_difference('LDA_X')

print 'LDA correlation: ', E_c_lda, 'eV'
print

calc.diagonalize_full_hamiltonian()
calc.write('H_lda.gpw', mode='all')

rpa = RPACorrelation('H_lda.gpw')
rpa.calculate(ecut=300)

fxc = FXCCorrelation('H_lda.gpw', xc='rALDA')
fxc.calculate(ecut=300)

# PBE --------------------------------------

H = Atoms('H', [(0, 0, 0)])
H.set_pbc(True)
H.center(vacuum=2.0)
calc = GPAW(mode=PW(300),
            hund=True,
            dtype=complex,
            xc='PBE')
示例#29
0
from __future__ import print_function
from ase.parallel import paropen
from ase.units import Hartree
from gpaw.xc.rpa import RPACorrelation

rpa1 = RPACorrelation('N.gpw', nblocks=8, wstc=True, txt='rpa_N.txt')
rpa2 = RPACorrelation('N2.gpw', nblocks=8, wstc=True, txt='rpa_N2.txt')

E1_i = rpa1.calculate(ecut=400)
E2_i = rpa2.calculate(ecut=400)

f = paropen('rpa_N2.dat', 'w')
for ecut, E1, E2 in zip(rpa1.ecut_i, E1_i, E2_i):
    print(ecut * Hartree, E2 - 2 * E1, file=f)
f.close()
N2 = molecule("N2")
N2.center(vacuum=2.0)

calc = GPAW(mode="pw", dtype=complex, xc="PBE", eigensolver="rmm-diis")
N2.set_calculator(calc)
E_n2_pbe = N2.get_potential_energy()

calc.diagonalize_full_hamiltonian(nbands=104, scalapack=True)
calc.write("N2.gpw", mode="all")

exx = EXX("N2.gpw")
exx.calculate()
E_n2_hf = exx.get_total_energy()

rpa = RPACorrelation("N2.gpw", nfrequencies=8)
E_n2_rpa = rpa.calculate(ecut=[ecut])

# -------------------------------------------------------------------------

N = molecule("N")
N.set_cell(N2.cell)

calc = GPAW(mode="pw", dtype=complex, xc="PBE", eigensolver="rmm-diis")
N.set_calculator(calc)
E_n_pbe = N.get_potential_energy()

calc.diagonalize_full_hamiltonian(nbands=104, scalapack=True)
calc.write("N.gpw", mode="all")

exx = EXX("N.gpw")
bulk = bulk('Na', 'bcc', a=4.23)

ecut = 350
calc = GPAW(
    mode=PW(ecut),
    dtype=complex,
    basis='dzp',
    kpts={
        'size': (4, 4, 4),
        'gamma': True
    },
    parallel={'domain': 1},
    txt='gs_occ_pw.txt',
    nbands=4,
    occupations=FermiDirac(0.01),
    setups={'Na': '1'},
)
bulk.set_calculator(calc)
bulk.get_potential_energy()
calc.write('gs_occ_pw.gpw')

calc = GPAW('gs_occ_pw.gpw', txt='gs_pw.txt', parallel={'band': 1})
calc.diagonalize_full_hamiltonian(nbands=520)
calc.write('gs_pw.gpw', 'all')

ecut = 120
calc = GPAW('gs_pw.gpw', communicator=serial_comm, txt=None)
rpa = RPACorrelation(calc, txt='rpa_%s.txt' % ecut)
E = rpa.calculate(ecut=[ecut])
equal(E, -1.106, 0.005)
示例#32
0
from __future__ import print_function
from ase.parallel import paropen
from ase.units import Hartree
from gpaw.xc.rpa import RPACorrelation
from gpaw.xc.fxc import FXCCorrelation

fxc = FXCCorrelation('diamond.ralda.pbe_wfcs.gpw', xc='rAPBE',
                     txt='diamond.ralda_02_rapbe.txt')
E_i = fxc.calculate(ecut=400)

f = paropen('diamond.ralda.rapbe.dat', 'w')
for ecut, E in zip(fxc.ecut_i, E_i):
    print(ecut * Hartree, E, file=f)
f.close()

rpa = RPACorrelation('diamond.ralda.pbe_wfcs.gpw',
                     txt='diamond.ralda_02_rpa.txt')
E_i = rpa.calculate(ecut=400)

f = paropen('diamond.ralda.rpa.dat', 'w')
for ecut, E in zip(rpa.ecut_i, E_i):
    print(ecut * Hartree, E, file=f)
f.close()
示例#33
0
cell = bulk('Si', 'fcc', a=a0).get_cell()
Si = Atoms('Si2', cell=cell, pbc=True,
           scaled_positions=((0,0,0), (0.25,0.25,0.25)))

kpts = monkhorst_pack((2,2,2))
kpts += np.array([1/4., 1/4., 1/4.])

calc = GPAW(mode='pw',
            kpts=kpts,
            occupations=FermiDirac(0.001),
            communicator=serial_comm)
Si.set_calculator(calc)
E = Si.get_potential_energy()
calc.diagonalize_full_hamiltonian(nbands=50)

rpa = RPACorrelation(calc)
E_rpa1 = rpa.calculate(ecut=[25, 50])

fxc = FXCCorrelation(calc, xc='RPA', nlambda=16)
E_rpa2 = fxc.calculate(ecut=[25, 50])

fxc = FXCCorrelation(calc, xc='rALDA', unit_cells=[1,1,2])
E_ralda = fxc.calculate(ecut=[25, 50])

fxc = FXCCorrelation(calc, xc='rAPBE', unit_cells=[1,1,2])
E_rapbe = fxc.calculate(ecut=[25, 50])

fxc = FXCCorrelation(calc, xc='rALDA', av_scheme='wavevector')
E_raldawave = fxc.calculate(ecut=[25, 50])

fxc = FXCCorrelation(calc, xc='rAPBE', av_scheme='wavevector')
示例#34
0
from gpaw.xc.rpa import RPACorrelation

#This calculation is too heavy to run as an exercise!!

rpa1 = RPACorrelation('si.rpa.isolated.gpw', txt='si.atom.rpa_output.txt')

E1_i = rpa1.calculate(ecut=400.0)