当我用qiskit的PyscfDriver定义一个分子时,它有一定数量的(空间)轨道。在此示例中,我定义了一个 NaH 分子并获得了一个具有 10 个空间轨道的物体。我想通过减少活跃空间的一些轨道来减少这个数字。我打算使用 FreezeCoreTransformer ,如下所示
FreezeCoreTransformer(freeze_core=False, remove_orbitals=[0,1,2,3,4,5])
。
但是我如何知道这个例子中哪个物理轨道对应于哪个轨道数呢?我知道所有 12 个电子都在前 6 个空间轨道内,因为删除轨道 0-5 后 num.articles 变为 (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
空间轨道按照驱动程序产生的顺序排列。这是最低能量轨道到最高能量。电子将占据最低能量轨道,因此它们是被占据的轨道,其余的未被占据。
注意:PySCF 驱动程序模块还具有通过标准 Python 日志记录功能写入的信息。如果将此模块的日志记录配置为调试级别,那么它应该打印轨道周围的信息https://github.com/qiskit-community/qiskit-nature/blob/main/qiskit_nature/second_q/drivers/pyscfd/ pyscfdriver.py#L522-L533以防有进一步帮助。