Can anyone spare me a clue on this?
I'm a self-taught student of Molecular Geometry trying to learn more about methods in modeling. After some extensive reading and study, it felt like it should be easy enough to find an open-source modeling framework with an out-of-the-box force field to just run a basic newtonian model to find a minimum energy state that'd tell you the distance between, say, two Oxygen atoms in O2 or two Hydrogen atoms in H2.
I'm using Atomic Simulation Environment in Python and their EMT() force-field/calculator plus the BFGS optimizer, but am getting terrible results. Simulations repeatedly reporting the interatomic distance between O and O at 1.56 when the real distance is around 1.21
I've gotten decent results on interatomic distances for H2O using EMT() [despite its limits], but these diatomic molecules remain a challenge.
Here's a code snippet:
o2 = molecule('O2', vacuum=3.0)
o2.calc = EMT()
dyn = BFGS(o2)
dyn.run(fmax=0.025)
write('O2.xyz', o2)
distVecs = o2.get_all_distances()
r = np.linalg.norm(distVecs[0]-distVecs[1])
print("Distance between molecules is %.2f" % r)
print(" ---> Target for O2: %.2f" % 1.208)
Which gives me results like:
Step Time Energy fmax
BFGS: 0 14:43:25 0.922681 3.7034
BFGS: 1 14:43:25 0.650383 1.2520
BFGS: 2 14:43:25 0.628230 0.4958
BFGS: 3 14:43:25 0.624772 0.0393
BFGS: 4 14:43:25 0.624750 0.0011
Distance between molecules is 1.56
---> Target for O2: 1.21