def vind(dm1): if hermi == 2: v1 = numpy.zeros_like(dm1) else: # nr_rks_fxc_st requires alpha of dm1, dm1*.5 should be scaled v1 = numint.nr_rks_fxc_st(ni, mol, mf.grids, mf.xc, dm0, dm1, 0, False, rho0, vxc, fxc, max_memory=max_memory) v1 *= .5 if hybrid: vk = mf.get_k(mol, dm1, hermi=hermi) vk *= hyb if abs(omega) > 1e-10: # For range separated Coulomb vk += mf.get_k(mol, dm1, hermi, omega) * (alpha - hyb) v1 += -.5 * vk return v1
def vind(dm1): if hermi == 2: v1 = numpy.zeros_like(dm1) else: # nr_rks_fxc_st requires alpha of dm1, dm1*.5 should be scaled v1 = numint.nr_rks_fxc_st(ni, mol, mf.grids, mf.xc, dm0, dm1, 0, True, rho0, vxc, fxc, max_memory=max_memory) v1 *= .5 if hybrid: if hermi != 2: vj, vk = mf.get_jk(mol, dm1, hermi=hermi) vk *= hyb if abs(omega) > 1e-10: # For range separated Coulomb vk += rks._get_k_lr(mol, dm1, omega, hermi) * (alpha - hyb) v1 += vj - .5 * vk else: v1 -= .5 * hyb * mf.get_k(mol, dm1, hermi=hermi) elif hermi != 2: v1 += mf.get_j(mol, dm1, hermi=hermi) return v1
def vind(dm1): if hermi == 2: v1 = numpy.zeros_like(dm1) else: # nr_rks_fxc_st requires alpha of dm1, dm1*.5 should be scaled v1 = numint.nr_rks_fxc_st(ni, mol, mf.grids, mf.xc, dm0, dm1, 0, True, rho0, vxc, fxc, max_memory=max_memory) v1 *= .5 if abs(hyb) > 1e-10: if hermi != 2: vj, vk = mf.get_jk(mol, dm1, hermi=hermi) v1 += vj - .5 * hyb * vk else: v1 -= .5 * hyb * mf.get_k(mol, dm1, hermi=hermi) elif hermi != 2: v1 += mf.get_j(mol, dm1, hermi=hermi) return v1
def fvind(x): # Cannot make call to ._td.get_vind because first order orbitals are solved # through closed shell ground state CPHF. dm = reduce(numpy.dot, (orbv, x.reshape(nvir, nocc), orbo.T)) dm = dm + dm.T # Call singlet XC kernel contraction, for closed shell ground state vindxc = numint.nr_rks_fxc_st(ni, mol, mf.grids, mf.xc, dm0, dm, 0, singlet, rho0, vxc, fxc, max_memory) if abs(hyb) > 1e-10: vj, vk = mf.get_jk(mol, (dm + dm.T)) veff = vj * 2 - hyb * vk + vindxc else: vj = mf.get_j(mol, (dm + dm.T)) veff = vj * 2 + vindxc return reduce(numpy.dot, (orbv.T, veff, orbo)).ravel()
def vind(dm1): if hermi == 2: v1 = numpy.zeros_like(dm1) else: # nr_rks_fxc_st requires alpha of dm1, dm1*.5 should be scaled v1 = numint.nr_rks_fxc_st(ni, mol, mf.grids, mf.xc, dm0, dm1, 0, False, rho0, vxc, fxc, max_memory=max_memory) v1 *= .5 if hybrid: vk = mf.get_k(mol, dm1, hermi=hermi) vk *= hyb if abs(omega) > 1e-10: # For range separated Coulomb vk += rks._get_k_lr(mol, dm1, omega, hermi) * (alpha-hyb) v1 += -.5 * vk return v1
def fvind(x): # Cannot make call to .base.get_vind because first order orbitals are solved # through closed shell ground state CPHF. dm = reduce(numpy.dot, (orbv, x.reshape(nvir,nocc), orbo.T)) dm = dm + dm.T # Call singlet XC kernel contraction, for closed shell ground state vindxc = numint.nr_rks_fxc_st(ni, mol, mf.grids, mf.xc, dm0, dm, 0, singlet, rho0, vxc, fxc, max_memory) if abs(hyb) > 1e-10: vj, vk = mf.get_jk(mol, dm) veff = vj * 2 - hyb * vk + vindxc if abs(omega) > 1e-10: veff -= rks._get_k_lr(mol, dm, omega, hermi=1) * (alpha-hyb) else: vj = mf.get_j(mol, dm) veff = vj * 2 + vindxc return reduce(numpy.dot, (orbv.T, veff, orbo)).ravel()