class ROKS(rks.KohnShamDFT, rohf.ROHF): '''UKS class adapted for PBCs. This is a literal duplication of the molecular UKS class with some `mol` variables replaced by `cell`. ''' def __init__(self, cell, kpt=numpy.zeros(3), xc='LDA,VWN', exxdiv=getattr(__config__, 'pbc_scf_SCF_exxdiv', 'ewald')): rohf.ROHF.__init__(self, cell, kpt, exxdiv=exxdiv) rks.KohnShamDFT.__init__(self, xc) def dump_flags(self, verbose=None): rohf.ROHF.dump_flags(self, verbose) rks.KohnShamDFT.dump_flags(self, verbose) return self get_veff = get_veff energy_elec = pyscf.dft.uks.energy_elec get_rho = uks.get_rho density_fit = rks._patch_df_beckegrids(rohf.ROHF.density_fit) rs_density_fit = rks._patch_df_beckegrids(rohf.ROHF.rs_density_fit) mix_density_fit = rks._patch_df_beckegrids(rohf.ROHF.mix_density_fit)
class KRKS(khf.KRHF, rks.KohnShamDFT): '''RKS class adapted for PBCs with k-point sampling. ''' def __init__(self, cell, kpts=np.zeros((1,3)), xc='LDA,VWN'): khf.KRHF.__init__(self, cell, kpts) rks.KohnShamDFT.__init__(self, xc) def dump_flags(self, verbose=None): khf.KRHF.dump_flags(self, verbose) rks.KohnShamDFT.dump_flags(self, verbose) return self get_veff = get_veff def energy_elec(self, dm_kpts=None, h1e_kpts=None, vhf=None): if h1e_kpts is None: h1e_kpts = self.get_hcore(self.cell, self.kpts) if dm_kpts is None: dm_kpts = self.make_rdm1() if vhf is None or getattr(vhf, 'ecoul', None) is None: vhf = self.get_veff(self.cell, dm_kpts) weight = 1./len(h1e_kpts) e1 = weight * np.einsum('kij,kji', h1e_kpts, dm_kpts) tot_e = e1 + vhf.ecoul + vhf.exc self.scf_summary['e1'] = e1.real self.scf_summary['coul'] = vhf.ecoul.real self.scf_summary['exc'] = vhf.exc.real logger.debug(self, 'E1 = %s Ecoul = %s Exc = %s', e1, vhf.ecoul, vhf.exc) return tot_e.real, vhf.ecoul + vhf.exc get_rho = get_rho density_fit = rks._patch_df_beckegrids(khf.KRHF.density_fit) mix_density_fit = rks._patch_df_beckegrids(khf.KRHF.mix_density_fit)
class UKS(pbcuhf.UHF): '''UKS class adapted for PBCs. This is a literal duplication of the molecular UKS class with some `mol` variables replaced by `cell`. ''' def __init__(self, cell, kpt=numpy.zeros(3)): pbcuhf.UHF.__init__(self, cell, kpt) self.xc = 'LDA,VWN' self.grids = gen_grid.UniformGrids(cell) self.small_rho_cutoff = 1e-7 # Use rho to filter grids ################################################## # don't modify the following attributes, they are not input options self._numint = numint._NumInt() self._keys = self._keys.union(['xc', 'grids', 'small_rho_cutoff']) def dump_flags(self): pbcuhf.UHF.dump_flags(self) logger.info(self, 'XC functionals = %s', self.xc) self.grids.dump_flags() get_veff = get_veff energy_elec = pyscf.dft.uks.energy_elec define_xc_ = rks.define_xc_ density_fit = rks._patch_df_beckegrids(pbcuhf.UHF.density_fit) mix_density_fit = rks._patch_df_beckegrids(pbcuhf.UHF.mix_density_fit)
class KUKS(rks.KohnShamDFT, kuhf.KUHF): '''RKS class adapted for PBCs with k-point sampling. ''' def __init__(self, cell, kpts=np.zeros((1, 3)), xc='LDA,VWN', exxdiv=getattr(__config__, 'pbc_scf_SCF_exxdiv', 'ewald')): kuhf.KUHF.__init__(self, cell, kpts, exxdiv=exxdiv) rks.KohnShamDFT.__init__(self, xc) def dump_flags(self, verbose=None): kuhf.KUHF.dump_flags(self, verbose) rks.KohnShamDFT.dump_flags(self, verbose) return self get_veff = get_veff energy_elec = energy_elec get_rho = get_rho density_fit = rks._patch_df_beckegrids(kuhf.KUHF.density_fit) rs_density_fit = rks._patch_df_beckegrids(kuhf.KUHF.rs_density_fit) mix_density_fit = rks._patch_df_beckegrids(kuhf.KUHF.mix_density_fit) def nuc_grad_method(self): from pyscf.pbc.grad import kuks return kuks.Gradients(self)
class KRKS(khf.KRHF): '''RKS class adapted for PBCs with k-point sampling. ''' def __init__(self, cell, kpts=np.zeros((1, 3))): khf.KRHF.__init__(self, cell, kpts) rks._dft_common_init_(self) def dump_flags(self): khf.KRHF.dump_flags(self) logger.info(self, 'XC functionals = %s', self.xc) self.grids.dump_flags() get_veff = get_veff def energy_elec(self, dm_kpts=None, h1e_kpts=None, vhf=None): if h1e_kpts is None: h1e_kpts = self.get_hcore(self.cell, self.kpts) if dm_kpts is None: dm_kpts = self.make_rdm1() if vhf is None or getattr(vhf, 'ecoul', None) is None: vhf = self.get_veff(self.cell, dm_kpts) weight = 1. / len(h1e_kpts) e1 = weight * np.einsum('kij,kji', h1e_kpts, dm_kpts).real tot_e = e1 + vhf.ecoul + vhf.exc logger.debug(self, 'E1 = %s Ecoul = %s Exc = %s', e1, vhf.ecoul, vhf.exc) return tot_e, vhf.ecoul + vhf.exc define_xc_ = rks.define_xc_ density_fit = rks._patch_df_beckegrids(khf.KRHF.density_fit) mix_density_fit = rks._patch_df_beckegrids(khf.KRHF.mix_density_fit)
class KRKS(khf.KRHF): '''RKS class adapted for PBCs with k-point sampling. ''' def __init__(self, cell, kpts=np.zeros((1, 3))): khf.KRHF.__init__(self, cell, kpts) self.xc = 'LDA,VWN' self.grids = gen_grid.UniformGrids(cell) self.small_rho_cutoff = 1e-7 # Use rho to filter grids ################################################## # don't modify the following attributes, they are not input options self._ecoul = 0 self._exc = 0 # Note Do not refer to .with_df._numint because gs/coords may be different self._numint = numint._KNumInt(kpts) self._keys = self._keys.union(['xc', 'grids', 'small_rho_cutoff']) self._ao = None def _update_ao(self, deriv): """ Updates atomic orbitals. """ self._ao = self._numint.eval_ao( self.cell, self.grids.coords, self.kpts, deriv=deriv, ) def dump_flags(self): khf.KRHF.dump_flags(self) logger.info(self, 'XC functionals = %s', self.xc) self.grids.dump_flags() get_veff = get_veff def energy_elec(self, dm_kpts=None, h1e_kpts=None, vhf=None): if h1e_kpts is None: h1e_kpts = self.get_hcore(self.cell, self.kpts) if dm_kpts is None: dm_kpts = self.make_rdm1() nkpts = len(h1e_kpts) e1 = 1. / nkpts * np.einsum('kij,kji', h1e_kpts, dm_kpts).real tot_e = e1 + self._ecoul + self._exc logger.debug(self, 'E1 = %s Ecoul = %s Exc = %s', e1, self._ecoul, self._exc) return tot_e, self._ecoul + self._exc density_fit = rks._patch_df_beckegrids(khf.KRHF.density_fit) mix_density_fit = rks._patch_df_beckegrids(khf.KRHF.mix_density_fit)
class KUKS(kuhf.KUHF, rks.KohnShamDFT): '''RKS class adapted for PBCs with k-point sampling. ''' def __init__(self, cell, kpts=np.zeros((1, 3))): kuhf.KUHF.__init__(self, cell, kpts) rks.KohnShamDFT.__init__(self) def dump_flags(self, verbose=None): kuhf.KUHF.dump_flags(self, verbose) rks.KohnShamDFT.dump_flags(self, verbose) return self get_veff = get_veff energy_elec = energy_elec get_rho = get_rho density_fit = rks._patch_df_beckegrids(kuhf.KUHF.density_fit) mix_density_fit = rks._patch_df_beckegrids(kuhf.KUHF.mix_density_fit)
class KROKS(krohf.KROHF): '''RKS class adapted for PBCs with k-point sampling. ''' def __init__(self, cell, kpts=np.zeros((1, 3))): krohf.KROHF.__init__(self, cell, kpts) rks._dft_common_init_(self) def dump_flags(self): krohf.KROHF.dump_flags(self) lib.logger.info(self, 'XC functionals = %s', self.xc) self.grids.dump_flags() get_veff = get_veff energy_elec = energy_elec define_xc_ = rks.define_xc_ density_fit = rks._patch_df_beckegrids(krohf.KROHF.density_fit) mix_density_fit = rks._patch_df_beckegrids(krohf.KROHF.mix_density_fit)
class KROKS(rks.KohnShamDFT, krohf.KROHF): '''RKS class adapted for PBCs with k-point sampling. ''' def __init__(self, cell, kpts=np.zeros((1, 3)), xc='LDA,VWN'): krohf.KROHF.__init__(self, cell, kpts) rks.KohnShamDFT.__init__(self, xc) def dump_flags(self, verbose=None): krohf.KROHF.dump_flags(self, verbose) rks.KohnShamDFT.dump_flags(self, verbose) return self get_veff = get_veff energy_elec = energy_elec get_rho = kuks.get_rho density_fit = rks._patch_df_beckegrids(krohf.KROHF.density_fit) mix_density_fit = rks._patch_df_beckegrids(krohf.KROHF.mix_density_fit)
class KROKS(rks.KohnShamDFT, krohf.KROHF): '''RKS class adapted for PBCs with k-point sampling. ''' def __init__(self, cell, kpts=np.zeros((1,3)), xc='LDA,VWN', exxdiv=getattr(__config__, 'pbc_scf_SCF_exxdiv', 'ewald')): krohf.KROHF.__init__(self, cell, kpts, exxdiv=exxdiv) rks.KohnShamDFT.__init__(self, xc) def dump_flags(self, verbose=None): krohf.KROHF.dump_flags(self, verbose) rks.KohnShamDFT.dump_flags(self, verbose) return self get_veff = get_veff energy_elec = energy_elec get_rho = kuks.get_rho density_fit = rks._patch_df_beckegrids(krohf.KROHF.density_fit) rs_density_fit = rks._patch_df_beckegrids(krohf.KROHF.rs_density_fit) mix_density_fit = rks._patch_df_beckegrids(krohf.KROHF.mix_density_fit)
class ROKS(pbcrohf.ROHF): '''UKS class adapted for PBCs. This is a literal duplication of the molecular UKS class with some `mol` variables replaced by `cell`. ''' def __init__(self, cell, kpt=numpy.zeros(3)): pbcrohf.ROHF.__init__(self, cell, kpt) rks._dft_common_init_(self) def dump_flags(self): pbcrohf.ROHF.dump_flags(self) logger.info(self, 'XC functionals = %s', self.xc) self.grids.dump_flags() get_veff = get_veff energy_elec = pyscf.dft.uks.energy_elec define_xc_ = rks.define_xc_ density_fit = rks._patch_df_beckegrids(pbcrohf.ROHF.density_fit) mix_density_fit = rks._patch_df_beckegrids(pbcrohf.ROHF.mix_density_fit)
class UKS(pbcuhf.UHF, rks.KohnShamDFT): '''UKS class adapted for PBCs. This is a literal duplication of the molecular UKS class with some `mol` variables replaced by `cell`. ''' def __init__(self, cell, kpt=numpy.zeros(3), xc='LDA,VWN'): pbcuhf.UHF.__init__(self, cell, kpt) rks.KohnShamDFT.__init__(self, xc) def dump_flags(self, verbose=None): pbcuhf.UHF.dump_flags(self, verbose) rks.KohnShamDFT.dump_flags(self, verbose) return self get_veff = get_veff energy_elec = pyscf.dft.uks.energy_elec get_rho = get_rho density_fit = rks._patch_df_beckegrids(pbcuhf.UHF.density_fit) mix_density_fit = rks._patch_df_beckegrids(pbcuhf.UHF.mix_density_fit)
class KUKS(kuhf.KUHF): '''RKS class adapted for PBCs with k-point sampling. ''' def __init__(self, cell, kpts=np.zeros((1, 3))): kuhf.KUHF.__init__(self, cell, kpts) self.xc = 'LDA,VWN' self.grids = gen_grid.UniformGrids(cell) self.small_rho_cutoff = 1e-7 # Use rho to filter grids ################################################## # don't modify the following attributes, they are not input options # Note Do not refer to .with_df._numint because gs/coords may be different self._numint = numint._KNumInt(kpts) self._keys = self._keys.union(['xc', 'grids', 'small_rho_cutoff']) def dump_flags(self): kuhf.KUHF.dump_flags(self) logger.info(self, 'XC functionals = %s', self.xc) self.grids.dump_flags() get_veff = get_veff def energy_elec(self, dm_kpts=None, h1e_kpts=None, vhf=None): if h1e_kpts is None: h1e_kpts = self.get_hcore(self.cell, self.kpts) if dm_kpts is None: dm_kpts = self.make_rdm1() if vhf is None or getattr(vhf, 'ecoul', None) is None: vhf = self.get_veff(self.cell, dm_kpts) weight = 1. / len(h1e_kpts) e1 = weight * (np.einsum('kij,kji', h1e_kpts, dm_kpts[0]) + np.einsum('kij,kji', h1e_kpts, dm_kpts[1])).real tot_e = e1 + vhf.ecoul + vhf.exc logger.debug(self, 'E1 = %s Ecoul = %s Exc = %s', e1, vhf.ecoul, vhf.exc) return tot_e, vhf.ecoul + vhf.exc define_xc_ = rks.define_xc_ density_fit = rks._patch_df_beckegrids(kuhf.KUHF.density_fit) mix_density_fit = rks._patch_df_beckegrids(kuhf.KUHF.mix_density_fit)