分子扫描过程的键级变化
背景
实现一下
代码
py
import matplotlib.pyplot as plt
import numpy as np
from pywfn.atomprop import charge
from pywfn.base import Mole
from pywfn.bondprop import order
root = r"C:\Users\11032\Desktop\gfile\Article\MOCV\分子扫描"
bonds = [[7, 8], [4, 8], [4, 9], [6, 9]]
data = np.zeros((36, 4))
for i in range(36):
path = rf"{root}\Ga-Ga.gjf_scan_{i + 1:0>2}.log"
mole = Mole.from_file(path)
caler = order.Calculator(mole)
stms, atos, omat = caler.pi_mocv()
# dirs, omat = caler.pi_pocv()
# print(stms, atos, omat)
for j, bond in enumerate(bonds):
a1, a2 = bond
data[i, j] = omat[a1, a2]
print(data)
fig, axs = plt.subplots(1, 4, figsize=(12, 4))
plt.subplots_adjust(wspace=0.4) # 增加子图水平间距
for i in range(4):
a1, a2 = bonds[i]
axs[i].set_title(f"{a1 + 1}-{a2 + 1}")
axs[i].plot(data[:, i], marker="o", markersize=3)
plt.show()
atoms = [7, 1, 0]
data = np.zeros((36, 3))
for i in range(36):
path = rf"{root}\Ga-Ga.gjf_scan_{i + 1:0>2}.log"
mole = Mole.from_file(path)
caler = charge.Calculator(mole)
stms, atos, eles = caler.pi_mocv()
# print(stms, atos, eles)
for j in range(3):
data[i, j] = eles[atoms[j]]
print(data)
fig, axs = plt.subplots(1, 3, figsize=(8, 4))
plt.subplots_adjust(wspace=0.4) # 增加子图水平间距
for i in range(3):
axs[i].set_title(f"{atoms[i]}")
axs[i].plot(data[:, i], marker="o", markersize=3)
plt.show()