Skip to content
python
# 调试代码之用,不用管
import sys;sys.path.append('d:/code/pywfn')

键の性质

所有的键性质计算器都包含在pywfn.bondprop子包下,其中的每一个模块封装了一种类型键性质计算器

其包含的模块有

  • order 计算各种键级

emm,目前也就只包含计算键级 (lll¬ω¬)

每个模块下都有一个Calculator类,实例化时传入要计算的分子即可

键级

Mayer键级

计算所有原子的mayer键级,最经典的键级之一

计算公式

BOI,J=μI,νJ(PS)μν(PS)νμ

示例代码

python
from pywfn.base import Mole
from pywfn.reader import LogReader
from pywfn.bondprop import order

mol=Mole(LogReader('./mols/C6H6.out'))
caler=order.Calculator(mol)
bonds,orders=caler.mayer()
for (a1,a2),val in zip(bonds,orders):
    print(f'{a1:>3}-{a2:>3}{val:10.4f}')
  1-  2    1.4533
  1-  6    1.4533
  1-  7    0.9305
  2-  3    1.4533
  2-  8    0.9305
  3-  4    1.4533
  3-  9    0.9305
  4-  5    1.4533
  4- 10    0.9305
  5-  6    1.4533
  5- 11    0.9305
  6- 12    0.9305

方向键级

根据pocv算法,将指定的键的两个原子的原子轨道投影到指定的方向上,得到的投影系数矩阵带入Mayer键级计算公式得到方向键级

示例代码

python
from pywfn.base import Mole
from pywfn.reader import LogReader
from pywfn.bondprop import order
import numpy as np

mol=Mole(LogReader('./mols/C6H6.out'))
caler=order.Calculator(mol)
bond=(1,2)
dir_=np.array([0.,0.,1.])
caler.dirOrder(bond,dir_)
0.46735726935417327

多中心键级

计算公式

对于三中心的键级:

IABC=aAbBcC(PS)ab(PS)bc(PS)ca

更多中心的计算方式类似,但是计算量会中心数指数及提升

示例代码

python
from pywfn.base import Mole
from pywfn.reader import LogReader
from pywfn.bondprop import order

mol=Mole(LogReader('./mols/C6H6.out'))
caler=order.Calculator(mol)
caler.MCBO([1,2,3])
0.24509171545503444

π键级(pocv)

使用pocv方法计算得到的π键级:将每个原子的p分子轨道投影到其法向量方向上,根据得到的投影系数矩阵带入Mayer键级计算得到π键级

示例代码

python
from pywfn.base import Mole
from pywfn.reader import LogReader
from pywfn.bondprop import order

mol=Mole(LogReader('./mols/C6H6.out'))
caler=order.Calculator(mol)
bonds,orders=caler.piOrder_pocv()
for (a1,a2),val in zip(bonds,orders):
    print(f'{a1:>3}-{a2:>3}{val:10.4f}')
  1-  2    0.6606
  1-  6    0.6606
  1-  7    0.0000
  2-  3    0.6606
  2-  8    0.0000
  3-  4    0.6606
  3-  9    0.0000
  4-  5    0.6606
  4- 10    0.0000
  5-  6    0.6606
  5- 11    0.0000
  6- 12    0.0000

π键级(smo)

根据smo方法得到的分子轨道系数矩阵带入Mayer键级得到的两个原子之间的π键级

示例代码

python
from pywfn.base import Mole
from pywfn.reader import LogReader
from pywfn.bondprop import order

mol=Mole(LogReader('./mols/C6H6.out'))
caler=order.Calculator(mol)
caler.piOrder_smo((1,2))
挑选的pi轨道有:{16, 19, 20}





0.4746881057106421

HMO键级

使用HMO方法得到的键级

示例代码

python
from pywfn.base import Mole
from pywfn.reader import LogReader
from pywfn.bondprop import order

mol=Mole(LogReader('./mols/C6H6.out'))
caler=order.Calculator(mol)
bonds,orders=caler.HMO()
for (a1,a2),val in zip(bonds,orders):
    print(f'{a1:>3}-{a2:>3}{val:10.4f}')
  1-  2    0.6667
  1-  6    0.6667
  2-  3    0.6667
  3-  4    0.6667
  4-  5    0.6667
  5-  6    0.6667

分解键级

使用轨道分解法将分子轨道拆分,再分别带入mayer键级计算公式

得到四个键级,分别为:σ键级、πz键级、πx键级、δ键级

示例代码

python
from pywfn.base import Mole
from pywfn.reader import LogReader
from pywfn.bondprop import order

mol=Mole(LogReader('./mols/C6H6.out'))
caler=order.Calculator(mol)
caler.decompose(bond=(1,2))
array([1.0037, 0.6637, 0.2213, 0.0004])