abs_kpts = cell.get_abs_kpts(scaled_kpts) kmf = pbchf.KRHF(cell, abs_kpts, exxdiv=exxdiv) kmf.verbose = 7 print kmf.scf() return kmf def run_kdft(cell, nmp=[1, 1, 1], gamma=False): """Run a k-point-sampling DFT (LDA) calculation.""" scaled_kpts = ase.dft.kpoints.monkhorst_pack(nmp) if gamma: for i in range(3): if nmp[i] % 2 == 0: scaled_kpts[:, i] += 0.5 / nmp[i] abs_kpts = cell.get_abs_kpts(scaled_kpts) kmf = pbcdft.KRKS(cell, abs_kpts) kmf.xc = 'lda,vwn' kmf.verbose = 7 print kmf.scf() return kmf if __name__ == '__main__': from helpers import get_ase_diamond_primitive, build_cell ase_atom = get_ase_diamond_primitive() cell = build_cell(ase_atom) run_hf(cell) run_dft(cell) run_khf(cell) run_kdft(cell)
return e,c if __name__ == '__main__': import sys from helpers import get_ase_diamond_primitive, build_cell from scf import run_khf args = sys.argv[1:] if len(args) != 6: print 'usage: atom basis ke nkx nky nkz' sys.exit(1) atom = args[0] bas = args[1] ke = float(args[2]) nmp = np.array([int(nk) for nk in args[3:6]]) assert atom in ['C','Si'] ase_atom = get_ase_diamond_primitive(atom=atom) cell = build_cell(ase_atom, ke=ke, basis=bas, incore_anyway=True) nmp = nmp mf = run_khf(cell, nmp=nmp) cc = run_krccsd(mf) print "KRCCSD E =", cc.ecc print "%0.4f %0.8f %0.8f %0.8f"%( np.prod(nmp)**(1./3), mf.e_tot, cc.emp2, cc.ecc)
e, c = cc.eeccsd(nroots) return e def print_with_degeneracy(energies, dec=7): # numpy 1.9.0 only es, ns = np.unique(energies.round(decimals=dec), return_counts=True) for e, n in zip(es, ns): print e, "( x", n, ")" if __name__ == '__main__': from helpers import get_ase_diamond_primitive, build_cell from scf import run_hf ase_atom = get_ase_diamond_primitive() cell = build_cell(ase_atom, incore_anyway=True) mf = run_hf(cell) cc = run_ccsd(mf) print "CCSD E =", cc.ecc eip = run_ipccsd(cc) print "IP-CCSD E =" print_with_degeneracy(eip) eea = run_eaccsd(cc) print "EA-CCSD E =" print_with_degeneracy(eea) print "Bandgap =", (eip[0] + eea[0]) * 27.211, "eV"
def run_eeccsd(cc, nroots=4): e,c = cc.eeccsd(nroots) return e def print_with_degeneracy(energies, dec=7): # numpy 1.9.0 only es, ns = np.unique(energies.round(decimals=dec), return_counts=True) for e,n in zip(es,ns): print e, "( x", n, ")" if __name__ == '__main__': from helpers import get_ase_diamond_primitive, build_cell from scf import run_hf ase_atom = get_ase_diamond_primitive() cell = build_cell(ase_atom, incore_anyway=True) mf = run_hf(cell) cc = run_ccsd(mf) print "CCSD E =", cc.ecc eip = run_ipccsd(cc) print "IP-CCSD E =" print_with_degeneracy(eip) eea = run_eaccsd(cc) print "EA-CCSD E =" print_with_degeneracy(eea) print "Bandgap =", (eip[0]+eea[0])*27.211, "eV"
e, c = cc.eaccsd(nroots) return e, c if __name__ == '__main__': import sys from helpers import get_ase_diamond_primitive, build_cell from scf import run_khf args = sys.argv[1:] if len(args) != 6: print 'usage: atom basis ke nkx nky nkz' sys.exit(1) atom = args[0] bas = args[1] ke = float(args[2]) nmp = np.array([int(nk) for nk in args[3:6]]) assert atom in ['C', 'Si'] ase_atom = get_ase_diamond_primitive(atom=atom) cell = build_cell(ase_atom, ke=ke, basis=bas, incore_anyway=True) nmp = nmp mf = run_khf(cell, nmp=nmp) cc = run_krccsd(mf) print "KRCCSD E =", cc.ecc print "%0.4f %0.8f %0.8f %0.8f" % (np.prod(nmp) **(1. / 3), mf.e_tot, cc.emp2, cc.ecc)
print "After shifting back" print scaled_kpts abs_kpts = cell.get_abs_kpts(scaled_kpts) kmf = pbchf.KRHF(cell, abs_kpts, exxdiv=exxdiv) kmf.verbose = 7 print kmf.scf() return kmf def run_kdft(cell, nmp=[1,1,1], gamma=False): """Run a k-point-sampling DFT (LDA) calculation.""" scaled_kpts = ase.dft.kpoints.monkhorst_pack(nmp) if gamma: for i in range(3): if nmp[i] % 2 == 0: scaled_kpts[:,i] += 0.5/nmp[i] abs_kpts = cell.get_abs_kpts(scaled_kpts) kmf = pbcdft.KRKS(cell, abs_kpts) kmf.xc = 'lda,vwn' kmf.verbose = 7 print kmf.scf() return kmf if __name__ == '__main__': from helpers import get_ase_diamond_primitive, build_cell ase_atom = get_ase_diamond_primitive() cell = build_cell(ase_atom) run_hf(cell) run_dft(cell) run_khf(cell) run_kdft(cell)