コード例 #1
0
 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
コード例 #2
0
ファイル: newton_ah.py プロジェクト: yoshida-lab/pyscf
 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
コード例 #3
0
 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
コード例 #4
0
ファイル: rks_grad.py プロジェクト: pulkin/pyscf
 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()
コード例 #5
0
ファイル: newton_ah.py プロジェクト: chrinide/pyscf
 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
コード例 #6
0
ファイル: tdrks.py プロジェクト: chrinide/pyscf
    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()