python
# 调试代码之用,不用管
import sys;sys.path.append('d:/code/pywfn')键の性质
所有的键性质计算器都包含在pywfn.bondprop子包下,其中的每一个模块封装了一种类型键性质计算器
其包含的模块有
order计算各种键级
emm,目前也就只包含计算键级 (lll¬ω¬)
每个模块下都有一个Calculator类,实例化时传入要计算的分子即可
键级
Mayer键级
计算所有原子的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.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
多中心键级
计算公式
对于三中心的键级:
更多中心的计算方式类似,但是计算量会中心数指数及提升
示例代码
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])