calc.write('C.gpw', 'all') eM1_ = 9.727 eM2_ = 9.548 w0_ = 10.7782 I0_ = 5.5472 w_ = 10.7532 I_ = 6.0686 # Macroscopic dielectric constant calculation df = DielectricFunction('C.gpw', frequencies=(0., ), eta=0.001, ecut=50, hilbert=False) eM1, eM2 = df.get_macroscopic_dielectric_constant() equal(eM1, eM1_, 0.01) equal(eM2, eM2_, 0.01) # Absorption spectrum calculation RPA df = DielectricFunction('C.gpw', eta=0.25, ecut=50, frequencies=np.linspace(0, 24., 241), hilbert=False) a0, a = df.get_dielectric_function(filename=None) df.check_sum_rule(a.imag) equal(a0[0].real, eM1_, 0.01) equal(a[0].real, eM2_, 0.01) w, I = findpeak(np.linspace(0, 24., 241), a0.imag)
a = 6.75 * Bohr atoms = bulk('C', 'diamond', a=a) calc = GPAW(mode='pw', kpts=(3, 3, 3), eigensolver='rmm-diis', occupations=FermiDirac(0.001)) atoms.set_calculator(calc) atoms.get_potential_energy() calc.write('C.gpw', 'all') # Macroscopic dielectric constant calculation df = DielectricFunction('C.gpw', frequencies=(0.,), eta=0.001, ecut=200, hilbert=False) eM1, eM2 = df.get_macroscopic_dielectric_constant() eM1_ = 9.725 eM2_ = 9.068 equal(eM1, eM1_, 0.01) equal(eM2, eM2_, 0.01) # Absorption spectrum calculation df = DielectricFunction('C.gpw', eta=0.25, ecut=200, frequencies=np.linspace(0, 24., 241), hilbert=False) b0, b = df.get_dielectric_function(filename=None) df.check_sum_rule(b.imag) equal(b0[0].real, eM1_, 0.01) equal(b[0].real, eM2_, 0.01)
fixdensity=True) atoms.get_potential_energy() calc.diagonalize_full_hamiltonian(nbands=70) # Diagonalize Hamiltonian calc.write('si_large.gpw', 'all') # Write wavefunctions # Getting absorption spectrum df = DielectricFunction(calc='si_large.gpw', eta=0.05, domega0=0.02, ecut=150) df.get_dielectric_function(filename='si_abs.csv') # Getting macroscopic constant df = DielectricFunction( calc='si_large.gpw', frequencies=[0.0], hilbert=False, eta=0.0001, ecut=150, ) epsNLF, epsLF = df.get_macroscopic_dielectric_constant() # Make table epsrefNLF = 14.08 # From [1] in top epsrefLF = 12.66 # From [1] in top f = paropen('mac_eps.csv', 'w') print(' , Without LFE, With LFE', file=f) print('%s, %.6f, %.6f' % ('GPAW-linear response', epsNLF, epsLF), file=f) print('%s, %.6f, %.6f' % ('[1]', epsrefNLF, epsrefLF), file=f) print('%s, %.6f, %.6f' % ('Exp.', 11.90, 11.90), file=f) f.close()
calc.diagonalize_full_hamiltonian(nbands=70) # Diagonalize Hamiltonian calc.write('si_large.gpw', 'all') # Write wavefunctions # Getting absorption spectrum df = DielectricFunction(calc='si_large.gpw', eta=0.05, domega0=0.02, ecut=150) df.get_dielectric_function(filename='si_abs.csv') # Getting macroscopic constant df = DielectricFunction(calc='si_large.gpw', frequencies=[0.0], hilbert=False, eta=0.0001, ecut=150, ) epsNLF, epsLF = df.get_macroscopic_dielectric_constant() # Make table epsrefNLF = 14.08 # From [1] in top epsrefLF = 12.66 # From [1] in top f = paropen('mac_eps.csv', 'w') print(' , Without LFE, With LFE', file=f) print('%s, %.6f, %.6f' % ('GPAW-linear response', epsNLF, epsLF), file=f) print('%s, %.6f, %.6f' % ('[1]', epsrefNLF, epsrefLF), file=f) print('%s, %.6f, %.6f' % ('Exp.', 11.90, 11.90), file=f) f.close()