Example #1
0
    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')

    if rank == 0 :
        os.remove('si.gpw')

import numpy as np
from ase.lattice import bulk
from gpaw import GPAW
from gpaw.response.df import DF

# Part 1: Ground state calculation
atoms = bulk('Si', 'diamond', a=5.431)   # Generate diamond crystal structure for silicon
calc = GPAW(h=0.20, kpts=(4,4,4))        # GPAW calculator initialization
 
atoms.set_calculator(calc)               
atoms.get_potential_energy()             # Ground state calculation is performed
calc.write('si.gpw','all')               # Use 'all' option to write wavefunction

# Part 2 : Spectrum calculation          # DF: dielectric function object
df = DF(calc='si.gpw',                   # Ground state gpw file (with wavefunction) as input
        q=np.array([0.0, 0.00001, 0.0]), # Momentum transfer, here excites in y-direction
        w=np.linspace(0,14,141),         # The Energies (eV) for spectrum: from 0-14 eV with 0.1 eV spacing
        optical_limit=True)              # Indicates that its a optical spectrum calculation

df.get_absorption_spectrum()             # By default, a file called 'Absorption.dat' is generated
Example #3
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 #4
0
            hilbert_trans=False,
            ecut=150,
            optical_limit=True,
            txt='df_1.out')

    eM1, eM2 = df.get_macroscopic_dielectric_constant()

    df.write('df_1.pckl')

    if np.abs(eM1 - 13.991793) > 1e-3 or np.abs(eM2 - 12.589129) > 1e-3:
        print eM1, eM2
        raise ValueError('Please 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')

    df.get_absorption_spectrum(filename='si_abs')
    df.check_sum_rule()
    
    df.write('df_2.pckl')

    if rank == 0 :
        os.remove('si.gpw')

Example #5
0
    
    cluster.set_calculator(calc)
    cluster.get_potential_energy()
    calc.write('Au02.gpw','all')


if ABS:
    df = DF(calc='Au02.gpw', 
            q=np.array([0.0, 0.0, 0.00001]), 
            w=np.linspace(0,14,141),
            eta=0.1,
            ecut=10,
            optical_limit=True,
            kcommsize=4)              

    df.get_absorption_spectrum()             

    d = np.loadtxt('Absorption.dat')
    wpeak = 2.5 # eV
    Nw = 25
    if d[Nw, 4] > d[Nw-1, 4] and d[Nw, 4] > d[Nw+1, 4]:
        pass
    else:
        raise ValueError('Plasmon peak not correct ! ')
    
    if np.abs(d[Nw, 4] - 0.25788817927) > 5e-5:
        print d[Nw, 0], d[Nw, 4]
        raise ValueError('Please check spectrum strength ! ')
    

Example #6
0
    atoms.get_potential_energy()
    calc.write('C_kpt8.gpw','all')

if bse:
    
    bse = BSE('C_kpt8.gpw',w=np.linspace(0,20,201),
              q=np.array([0,0,0.5]),optical_limit=True,ecut=50.,
              nbands=8)

    bse.get_dielectric_function('C_bse.dat')

if df:
    from gpaw.response.df import DF
    df = DF('C_kpt8.gpw',w=np.linspace(0,20,201),q=np.array([0,0,0.5]),
            optical_limit=True,ecut=50., hilbert_trans=False)
    df.get_absorption_spectrum(filename='C.dat')


if check_spectrum:

    d = np.loadtxt('C_bse.dat')[:,2]
    Nw1 = 97
    Nw2 = 109
    if d[Nw1] > d[Nw1-1] and d[Nw1] > d[Nw1+1] and \
       d[Nw2] > d[Nw2-1] and d[Nw2] > d[Nw2+1] :
        pass
    else:
        raise ValueError('Absorption peak not correct ! ')
    
    if np.abs(d[Nw1] - 68.8295454438) > 1e-5 or \
       np.abs(d[Nw2] - 90.2424318491) > 1e-5 :
import numpy as np
from ase.structure import bulk
from gpaw import GPAW
from gpaw.response.df import DF

# Part 1: Ground state calculation
atoms = bulk('Si', 'diamond', a=5.431)   # Generate diamond crystal structure for silicon
calc = GPAW(h=0.20, kpts=(4,4,4))        # GPAW calculator initialization
 
atoms.set_calculator(calc)               
atoms.get_potential_energy()             # Ground state calculation is performed
calc.write('si.gpw','all')               # Use 'all' option to write wavefunction

# Part 2 : Spectrum calculation          # DF: dielectric function object
df = DF(calc='si.gpw',                   # Ground state gpw file (with wavefunction) as input
        q=np.array([0.0, 0.00001, 0.0]), # Momentum transfer, here excites in y-direction
        w=np.linspace(0,14,141),         # The Energies (eV) for spectrum: from 0-14 eV with 0.1 eV spacing
        optical_limit=True)              # Indicates that its a optical spectrum calculation

df.get_absorption_spectrum()             # By default, a file called 'Absorption.dat' is generated
Example #8
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 #9
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 #10
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')