Skip to content

opVop ordering #381

@brianz98

Description

@brianz98

On the wiki, the opVop operator is said to output in the order [I2, z, x, y] - does this still reflect the convention used in the latest version of libint?

I'm asking because the computed integrals seem to be in the order of [I2, x, y, z] instead. As a minimal working example, I'm checking the output of Forte2 (we have a very lightweight C++ wrapper for the latest libint2 from conda, so hopefully it's unlikely we have swapped the order inadvertently, see relevant code here), which uses libint2, against PySCF/libcint (which has a convention of [x, y, z, I2], see here), on the Ag2 system at 1 angstrom separation, using the STO-3G basis:

mol = pyscf.gto.M(atom="Ag 0 1 0; Ag 0 0 0", basis="s3g.nw", spin=0) # sto-3g downloaded from BSE
cint_res = mol.intor("int1e_spnucsp_sph")

xyz = """
Ag 0 0 0
Ag 0 1 0
"""
system = forte2.System(xyz, basis_set="sto-3g", minao_basis_set=None)
int2_res = forte2.ints.opVop(system.basis, system.atoms)

print(np.linalg.norm(cint_res[0]))
print(np.linalg.norm(cint_res[1]))
print(np.linalg.norm(cint_res[2]))
print(np.linalg.norm(cint_res[3]))
>>> 252375.37347399956
>>> 252400.9608244961
>>> 252375.37347399956
>>> 5966392.56091404

print(np.linalg.norm(int2_res[0]))  
print(np.linalg.norm(int2_res[1]))  
print(np.linalg.norm(int2_res[2]))  
print(np.linalg.norm(int2_res[3])) 
>>> 5966392.560911566
>>> 252375.37347400025
>>> 252400.9608244944
>>> 252375.37347400034

Thanks a lot in advance for any information on this!

Metadata

Metadata

Assignees

Labels

No labels
No labels

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions