Example #1
0
import numpy as np
from gpaw import GPAW
from gpaw.response.df import DF

w = np.linspace(0, 24., 481)    # 0-24 eV with 0.05 eV spacing
q = np.array([0.0, 0.00001, 0.])

df = DF(calc='si.gpw',
        q=q,
        w=w,
        eta=0.1,           # Broadening parameter 
        ecut=150,          # Energy cutoff for planewaves
        optical_limit=True,
        txt='df_2.out')    # Output text

df1, df2 = df.get_dielectric_function()
df.get_absorption_spectrum(df1, df2, filename='si_abs.dat')
df.check_sum_rule(df1, df2)
df.write('df_2.pckl')      # Save important parameters and data 
Example #2
0

if ABS:
            
    w = np.linspace(0, 24, 481)
    q = np.array([0.0, 0.00001, 0.])

    # getting macroscopic constant
    df = DF(calc='si.gpw', q=q, w=(0.,), eta=0.0001, 
        hilbert_trans=False, txt='df_1.out',
        ecut=150, optical_limit=True)

    df1, df2 = df.get_dielectric_function()
    eM1, eM2 = df.get_macroscopic_dielectric_constant(df1, df2)

    df.write('df_1.pckl')

    if np.abs(eM1 - 13.992277) > 1e-4 or np.abs(eM2 - 12.589596) > 1e-4:
        print eM1, eM2
        raise ValueError('Pls check dielectric constant !')

    #getting absorption spectrum
    df = DF(calc='si.gpw', q=q, w=w, eta=0.1,
        ecut=150, optical_limit=True, txt='df_2.out')

    df1, df2 = df.get_dielectric_function()
    df.get_absorption_spectrum(df1, df2, filename='si_abs')
    df.check_sum_rule(df1, df2)
    
    df.write('df_2.pckl')
Example #3
0
    
    bse = BSE('Al.gpw',w=np.linspace(0,24,241),
              q=np.array([0.25, 0, 0]),ecut=50., eta=0.2)

    bse.get_dielectric_function('Al_bse.dat')
    
if df:

    # Excited state calculation
    q = np.array([1/4.,0.,0.])
    w = np.linspace(0, 24, 241)
    
    df = DF(calc='Al.gpw', q=q, w=w, eta=0.2, ecut=50,hilbert_trans=False)
    df1, df2 = df.get_dielectric_function()
    df.get_EELS_spectrum(df1, df2,filename='Al_df.dat')
    df.write('Al.pckl')
    df.check_sum_rule()


if check_spectrum:

    d = np.loadtxt('Al_bse.dat')[:,2] 
    wpeak = 16.4 
    Nw = 164
    if d[Nw] > d[Nw-1] and d[Nw] > d[Nw+1]:
        pass
    else:
        raise ValueError('Plasmon peak not correct ! ')
    
    if np.abs(d[Nw] - 27.5317730322) > 1e-5:
        print d[Nw]
Example #4
0
    q = np.array([0.0, 0.00001, 0.])

    # getting macroscopic constant
    df = DF(calc='si.gpw',
            q=q,
            w=(0., ),
            eta=0.0001,
            hilbert_trans=False,
            txt='df_1.out',
            ecut=150,
            optical_limit=True)

    df1, df2 = df.get_dielectric_function()
    eM1, eM2 = df.get_macroscopic_dielectric_constant(df1, df2)

    df.write('df_1.pckl')

    if np.abs(eM1 - 13.992277) > 1e-4 or np.abs(eM2 - 12.589596) > 1e-4:
        print eM1, eM2
        raise ValueError('Pls check dielectric constant !')

    #getting absorption spectrum
    df = DF(calc='si.gpw',
            q=q,
            w=w,
            eta=0.1,
            ecut=150,
            optical_limit=True,
            txt='df_2.out')

    df1, df2 = df.get_dielectric_function()
Example #5
0
              q=np.array([0.25, 0, 0]),
              ecut=50.,
              eta=0.2)

    bse.get_dielectric_function('Al_bse.dat')

if df:

    # Excited state calculation
    q = np.array([1 / 4., 0., 0.])
    w = np.linspace(0, 24, 241)

    df = DF(calc='Al.gpw', q=q, w=w, eta=0.2, ecut=50, hilbert_trans=False)
    df1, df2 = df.get_dielectric_function()
    df.get_EELS_spectrum(df1, df2, filename='Al_df.dat')
    df.write('Al.pckl')
    df.check_sum_rule()

if check_spectrum:

    d = np.loadtxt('Al_bse.dat')[:, 2]
    wpeak = 16.4
    Nw = 164
    if d[Nw] > d[Nw - 1] and d[Nw] > d[Nw + 1]:
        pass
    else:
        raise ValueError('Plasmon peak not correct ! ')

    if np.abs(d[Nw] - 27.5317730322) > 1e-5:
        print d[Nw]
        raise ValueError('Please check spectrum strength ! ')
Example #6
0
a = 6.75 * Bohr
atoms = bulk("C", "diamond", a=a)

calc = GPAW(h=0.2, eigensolver=RMM_DIIS(), mixer=Mixer(0.1, 3), kpts=(4, 4, 4), occupations=FermiDirac(0.001))

atoms.set_calculator(calc)
atoms.get_potential_energy()
calc.write("C.gpw", "all")

# Macroscopic dielectric constant calculation
q = np.array([0.0, 0.00001, 0.0])
w = np.linspace(0, 24.0, 241)

df = DF(calc="C.gpw", q=q, w=(0.0,), eta=0.001, ecut=50, hilbert_trans=False, optical_limit=True)
eM1, eM2 = df.get_macroscopic_dielectric_constant()

eM1_ = 6.15176021  # 6.15185095143 for dont use time reversal symmetry
eM2_ = 6.04805705  # 6.04815084635

if np.abs(eM1 - eM1_) > 1e-5 or np.abs(eM2 - eM2_) > 1e-5:
    print eM1, eM2
    raise ValueError("Macroscopic dielectric constant not correct ! ")


# Absorption spectrum calculation
del df
df = DF(calc="C.gpw", q=q, w=w, eta=0.25, ecut=50, optical_limit=True, txt="C_df.out")
df.get_absorption_spectrum()
df.check_sum_rule()
df.write("C_df.pckl")
Example #7
0
atoms.set_calculator(calc)
atoms.get_potential_energy()
calc.write('C.gpw','all')

# Macroscopic dielectric constant calculation
q = np.array([0.0, 0.00001, 0.])
w = np.linspace(0, 24., 241)

df = DF(calc='C.gpw', q=q, w=(0.,), eta=0.001,
        ecut=50, hilbert_trans=False, optical_limit=True)
df1, df2 = df.get_dielectric_function()
eM1, eM2 = df.get_macroscopic_dielectric_constant(df1, df2)

eM1_ = 6.15185095143
eM2_ = 6.04815084635

if (np.abs(eM1 - eM1_) > 1e-5 or
    np.abs(eM2 - eM2_) > 1e-5):
    print eM1, eM2
    raise ValueError('Macroscopic dielectric constant not correct ! ')


# Absorption spectrum calculation
df = DF(calc='C.gpw', q=q, w=w, eta=0.25,
        ecut=50, optical_limit=True, txt='C_df.out')
df1, df2 = df.get_dielectric_function()
df.get_absorption_spectrum(df1, df2)
df.check_sum_rule(df1, df2)
df.write('C_df.pckl')
Example #8
0
        eigensolver="cg",
        occupations=FermiDirac(0.001),
        convergence={"bands": 70},
    )
    atoms.set_calculator(calc)
    atoms.get_potential_energy()
    calc.write("si.gpw", "all")


if ABS:

    w = np.linspace(0, 24, 481)
    q = np.array([0.0, 0.00001, 0.0])

    # getting macroscopic constant
    df = DF(calc="si.gpw", q=q, w=w, eta=0.0001, hilbert_trans=False, txt="df_1.out", ecut=150, optical_limit=True)

    df1, df2 = df.get_dielectric_function()
    eM1, eM2 = df.get_macroscopic_dielectric_constant(df1, df2)

    df.write("df_1.pckl")

    # getting absorption spectrum
    df = DF(calc="si.gpw", q=q, w=w, eta=0.1, ecut=150, optical_limit=True, txt="df_2.out")

    df1, df2 = df.get_dielectric_function()
    df.get_absorption_spectrum(df1, df2, filename="si_abs.dat")
    df.check_sum_rule(df1, df2)

    df.write("df_2.pckl")
Example #9
0
        width=0.1,
    )
    atoms.set_calculator(calc)
    atoms.get_potential_energy()

if EELS:

    for i in range(1, 2):
        w = np.linspace(0, 15, 301)
        q = np.array([-i / 64.0, i / 64.0, 0.0])  # Gamma - K
        ecut = 40 + i * 10
        df = DF(calc=calc, q=q, w=w, eta=0.05, ecut=ecut, txt="df_" + str(i) + ".out")
        df.get_surface_response_function(z0=21.2 / 2, filename="be_EELS")
        df.get_EELS_spectrum()
        df.check_sum_rule()
        df.write("df_" + str(i) + ".pckl")

if check:
    d = np.loadtxt("be_EELS")

    wpeak1 = 2.50  # eV
    wpeak2 = 9.95
    Nw1 = 50
    Nw2 = 199

    if (
        d[Nw1, 1] > d[Nw1 - 1, 1]
        and d[Nw1, 1] > d[Nw1 + 1, 1]
        and d[Nw2, 1] > d[Nw2 - 1, 1]
        and d[Nw2, 1] > d[Nw2 + 1, 1]
    ):
Example #10
0
                width=0.1)
    atoms.set_calculator(calc)
    atoms.get_potential_energy()

if EELS:

    for i in range(1, 2):
        w = np.linspace(0, 15, 301)
        q = np.array([-i/64., i/64., 0.]) # Gamma - K
	ecut = 40 + i*10
        df = DF(calc=calc, q=q, w=w, eta=0.05, ecut = ecut,
                      txt='df_' + str(i) + '.out')  
        df.get_surface_response_function(z0=21.2/2, filename='be_EELS')  
        df.get_EELS_spectrum()    
        df.check_sum_rule()
        df.write('df_' + str(i) + '.pckl')

if check:
    d = np.loadtxt('be_EELS')

    wpeak1 = 2.50 # eV
    wpeak2 = 9.95
    Nw1 = 50
    Nw2 = 199

    if (d[Nw1, 1] > d[Nw1-1, 1] and d[Nw1, 1] > d[Nw1+1, 1] and  
       d[Nw2, 1] > d[Nw2-1, 1] and d[Nw2, 1] > d[Nw2+1, 1]):
        pass
    else:
        raise ValueError('Plasmon peak not correct ! ')
Example #11
0
df = DF(calc='C.gpw',
        q=q,
        w=(0., ),
        eta=0.001,
        ecut=50,
        hilbert_trans=False,
        optical_limit=True)
df1, df2 = df.get_dielectric_function()
eM1, eM2 = df.get_macroscopic_dielectric_constant(df1, df2)

eM1_ = 6.15185095143
eM2_ = 6.04815084635

if (np.abs(eM1 - eM1_) > 1e-5 or np.abs(eM2 - eM2_) > 1e-5):
    print eM1, eM2
    raise ValueError('Macroscopic dielectric constant not correct ! ')

# Absorption spectrum calculation
df = DF(calc='C.gpw',
        q=q,
        w=w,
        eta=0.25,
        ecut=50,
        optical_limit=True,
        txt='C_df.out')
df1, df2 = df.get_dielectric_function()
df.get_absorption_spectrum(df1, df2)
df.check_sum_rule(df1, df2)
df.write('C_df.pckl')