Skip to content

分子扫描过程的键级变化

背景

实现一下

代码

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()

结果