Exemplo n.º 1
0
def test_schwarz_vs_density_quartets():
    """Checks difference between the number of shell quartets screened with Schwarz and Density screening. 
    Default threshhold of 1.0E-12 is used"""

    mol = psi4.geometry("""
        0 1
        O  -1.551007  -0.114520   0.000000
        H  -1.934259   0.762503   0.000000
        H  -0.599677   0.040712   0.000000
        O   1.350625   0.111469   0.000000
        H   1.680398  -0.373741  -0.758561
        H   1.680398  -0.373741   0.758561
        symmetry c1
        no_reorient
        no_com
    """)

    # Run a quick SCF job to get density matrix
    energy, wfn = psi4.energy('hf/DZ', return_wfn=True)

    psi4.set_options({"ints_tolerance": 1e-12})
    basis = wfn.basisset()

    factory = psi4.core.IntegralFactory(basis)
    psi4.set_options({"screening": 'schwarz', 'integral_package': 'libint2'})
    eriSchwarz = factory.eri(0)

    psi4.set_options({"screening": 'density'})
    eriDensity = factory.eri(0)
    Da = [wfn.Da()]
    # Update using the Density Matrix
    eriDensity.update_density(Da)

    shell_inds = range(basis.nshell())
    quartets = itertools.product(shell_inds, shell_inds, shell_inds,
                                 shell_inds)

    screen_count_schwarz = 0
    screen_count_density = 0

    for m, n, r, s in quartets:
        screen_schwarz = not eriSchwarz.shell_significant(m, n, r, s)
        screen_density = not eriDensity.shell_significant(m, n, r, s)

        if screen_schwarz:
            screen_count_schwarz += 1
        if screen_density:
            screen_count_density += 1

    assert compare_integers(screen_count_schwarz, 14504,
                            'Schwarz Screened Ints Count, Cutoff 1.0e-12')
    assert compare_integers(screen_count_density, 19440,
                            'Density Screened Ints Count, Cutoff 1.0e-12')
Exemplo n.º 2
0
def test_schwarz_vs_csam_quartets():
    """Checks difference between the number of shell quartets screened with Schwarz and CSAM screening. 
    CSAM is strictly tighter than Schwarz and should screen at least all of the same shell pairs.
    Default threshhold of 1.0E-12 is used"""

    mol = psi4.geometry("""
        Ne 0.0 0.0 0.0
        Ne 4.0 0.0 0.0
        Ne 8.0 0.0 0.0
    """)

    psi4.set_options({"ints_tolerance": 1e-12})
    basis = psi4.core.BasisSet.build(mol, target='DZ')

    factory = psi4.core.IntegralFactory(basis)
    psi4.set_options({"ints_tolerance": 1e-12, "screening": 'csam'})
    eriCSAM = factory.eri(0)
    psi4.set_options({"screening": 'schwarz', 'integral_package': 'libint2'})
    eriSchwarz = factory.eri(0)

    shell_inds = range(basis.nshell())
    quartets = itertools.product(shell_inds, shell_inds, shell_inds,
                                 shell_inds)

    screen_count_both = 0
    screen_count_csam = 0
    screen_count_schwarz = 0
    screen_count_none = 0

    for m, n, r, s in quartets:
        screen_schwarz = not eriSchwarz.shell_significant(m, n, r, s)
        screen_csam = not eriCSAM.shell_significant(m, n, r, s)

        if screen_schwarz and screen_csam:
            screen_count_both += 1
        elif screen_csam:
            screen_count_csam += 1
        elif screen_schwarz:
            screen_count_schwarz += 1
        else:
            screen_count_none += 1
    assert compare_integers(75072, screen_count_both,
                            'Schwarz vs CSAM Screening, Cutoff 1.0e-12')
    assert compare_integers(2336, screen_count_csam,
                            'Schwarz vs CSAM Screening, Cutoff 1.0e-12')
    assert compare_integers(0, screen_count_schwarz,
                            'Schwarz vs CSAM Screening, Cutoff 1.0e-12')
    assert compare_integers(27568, screen_count_none,
                            'Schwarz vs CSAM Screening, Cutoff 1.0e-12')
Exemplo n.º 3
0
def test_no_screening_schwarz():
    """Checks the number of shell quartets screened with Schwarz screening.
    No shell quartets should be screened with a threshold of 0.0"""

    mol = psi4.geometry("""
        Ne 0.0 0.0 0.0
        Ne 4.0 0.0 0.0
        Ne 8.0 0.0 0.0
    """)
    psi4.set_options({"ints_tolerance": 0.0, "screening": "schwarz"})

    basis = psi4.core.BasisSet.build(mol, target='cc-pVDZ')
    factory = psi4.core.IntegralFactory(basis)
    eri = factory.eri(0)

    shell_inds = range(basis.nshell())
    quartets = itertools.product(shell_inds, shell_inds, shell_inds,
                                 shell_inds)

    screen_count = 0
    for m, n, r, s in quartets:
        if not eri.shell_significant(m, n, r, s):
            screen_count += 1

    assert compare_integers(0, screen_count,
                            'Quartets Schwarz Screened, Cutoff 0')
Exemplo n.º 4
0
def test_rhf_vs_uhf_screening():
    """Checks difference between the number of shell quartets screened with Density screening in RHF vs UHF. 
    Difference should be 0, mathematically. Default threshhold of 1.0E-12 is used"""

    mol = psi4.geometry("""
        0 1
        O  -1.551007  -0.114520   0.000000
        H  -1.934259   0.762503   0.000000
        H  -0.599677   0.040712   0.000000
        O   1.350625   0.111469   0.000000
        H   1.680398  -0.373741  -0.758561
        H   1.680398  -0.373741   0.758561
        symmetry c1
        no_reorient
        no_com
    """)

    psi4.set_options({
        "screening": "density",
        "ints_tolerance": 1e-12,
        "reference": "rhf",
        "integral_package": 'libint2'
    })

    # Run an SCF to get RHF Wavefunction
    rhf_energy, rhf_wfn = psi4.energy('hf/DZ', return_wfn=True)
    rhf_basis = rhf_wfn.basisset()
    rhf_factory = psi4.core.IntegralFactory(rhf_basis)
    eriRhf = rhf_factory.eri(0)

    # Run an SCF to get UHF Wavefunction
    psi4.set_options({"reference": "uhf"})
    uhf_energy, uhf_wfn = psi4.energy('hf/DZ', return_wfn=True)
    uhf_basis = uhf_wfn.basisset()
    uhf_factory = psi4.core.IntegralFactory(uhf_basis)
    eriUhf = uhf_factory.eri(0)

    Drhf = [rhf_wfn.Da()]
    Duhf = [uhf_wfn.Da(), uhf_wfn.Db()]

    # Update using the Density Matrix
    eriRhf.update_density(Drhf)
    eriUhf.update_density(Duhf)

    shell_inds = range(rhf_basis.nshell())
    quartets = itertools.product(shell_inds, shell_inds, shell_inds,
                                 shell_inds)

    screen_count_rhf = 0
    screen_count_uhf = 0

    for m, n, r, s in quartets:
        screen_rhf = not eriRhf.shell_significant(m, n, r, s)
        screen_uhf = not eriUhf.shell_significant(m, n, r, s)

        if screen_rhf:
            screen_count_rhf += 1
        if screen_uhf:
            screen_count_uhf += 1

    assert compare_integers(screen_count_rhf, 19440,
                            'RHF Density Screened Ints Count, Cutoff 1.0e-12')
    assert compare_integers(screen_count_uhf, 19440,
                            'UHF Density Screened Ints Count, Cutoff 1.0e-12')