Molecules#

Overview#

Opkting’s molecular system, at its core, is a list of intramolecular fragments frag.Frag and intermolecular pseudo-fragments dimerfrag.DimerFrag. The fragments in turn are lists of masses, atomic numbers and coordinates (cartesian or internal) along with a numpy array for the cartesian geometry. NIST values for masses, and atomic numbers can be easily retrieved through qcelemental e.g. qcelemental.periodictable.to_Z('O') to aid in creating a molecule. To utilize a custom molecule in an optimzation see CustomHelper and Interfaces.

A fragment for water:

>>> import optking
>>> zs = [1, 8, 1]
>>> masses = [1.007825032230, 15.994914619570, 1.007825032230]
>>> geometry = [[-0.028413670411,     0.928922556351,     0.000000000000],
                [-0.053670056908,    -0.039737675589,     0.000000000000],
                [ 0.880196420813,    -0.298256807934,     0.000000000000]]
>>> fragment = optking.Frag(zs, geometry, masses)

The optimization coordinates can be added manually.

>>> intcos = [optking.Stre(1, 2), optking.Stre(2, 3), optking.Bend(1, 2, 3)]
>>> fragment.intcos = intcos  # intcos can also be added at instantiation

More typically, the coordinate system is automatically generated once the full molecular system is built and then edited if nessecary.

>>> molsys = optking.Molsys([fragment])
>>> optking.make_internal_coords(molsys)