Qiskit Nature中的轨道排序是如何工作的?

1 投票
1 回答
32 浏览
提问于 2025-04-12 15:12

当我用qiskit的PyscfDriver定义一个分子时,它会有一定数量的(空间)轨道。在这个例子中,我定义了一个NaH分子,得到了一个包含10个空间轨道的对象。我想通过减少一些活跃空间中的轨道数量来降低这个数字。我打算使用FreezeCoreTransformer,就像这样 FreezeCoreTransformer(freeze_core=False, remove_orbitals=[0,1,2,3,4,5])。 但是我怎么知道在这个例子中哪个物理轨道对应哪个轨道编号呢?我知道所有12个电子都在前6个空间轨道内,因为在移除轨道0到5后,num.particles变成了(0,0)。

这里是一个最小的代码示例:

from qiskit_nature.second_q.drivers import PySCFDriver
from qiskit_nature.second_q.transformers import FreezeCoreTransformer

driver = PySCFDriver(
    atom=f"H 0 0 0; Na 0 0 {1.5}",
    basis="sto3g",
    charge=0,
    spin=0,
)

problem = driver.run()

print(f'{problem.num_particles = }')
print(f'{problem.num_spatial_orbitals = }')

as_transformer = FreezeCoreTransformer(freeze_core=False, remove_orbitals=[0,1,2,3,4,5])
as_transformer.prepare_active_space(problem.molecule, problem.num_spatial_orbitals)
as_problem = as_transformer.transform(problem)

print(f'{as_problem.num_particles = }')
print(f'{as_problem.num_spatial_orbitals = }')

打印的结果是:

problem.num_particles = (6, 6)
problem.num_spatial_orbitals = 10
as_problem.num_particles = (0, 0)
as_problem.num_spatial_orbitals = 4

1 个回答

0

空间轨道是按照驱动程序生成的顺序排列的,从最低能量的轨道到最高能量的轨道。电子会先填充能量最低的轨道,所以这些轨道是被占据的,其他的则是未被占据的。

注意:PySCF驱动模块还通过标准的Python日志功能记录了一些信息。如果你把这个模块的日志级别设置为DEBUG,那么它会打印出关于轨道的一些信息,链接在这里,这可能会对你有帮助。

撰写回答