The coord file
In TURBOMOLE the coord file mainly contains the coordinates and the types of the atoms
of the molecule that should be simulated. These information can be stored in
pymatgen Molecule object. However there are a set
of data, stored in different data groups, that provide further information
about the geometry of the molecule, more precisely on the dynamic during a geometry
optimization. For this reason in turbomoleio the coord file is represented
through a turbomoleio.core.molecule.MoleculeSystem object. This has methods
to read and generate a coord file that can be read by TURBOMOLE. Other file formats
can be written taking advantage of the conversion from Molecule, but the output will be
limited to the geometry of the molecule.
Note
TURBOMOLE is also capable of performing periodic calculations (1, 2 or 3-dimensional).
The turbomoleio.core.molecule.MoleculeSystem object is only used for isolated
systems, i.e. molecules. For periodic systems, the
turbomoleio.core.periodic.PeriodicSystem should be used.
See Periodic systems below for more information.
Internally the MoleculeSystem stores the geometry of the molecule using a
pymatgen Molecule. This allows to exploit all the functionalities available in
the pymatgen package. Other attributes are used to determine the values of other data
groups. The simplest one is frozen_indices that determines which atoms should have the
cartesian coordinates frozen. Translated in the coord file format the atoms with an f
at the end of the coordinate line. For example with frozen_indices={0,2} the coord file
will look like:
$coord
-0.00000000000000 0.00000000000000 0.00000000000000 n f
-1.17616323936717 2.03717448857876 0.00000000000000 o
-1.17616323936717 -2.03717448857876 0.00000000000000 o f
2.35232647873438 0.00000000000000 0.00000000000000 o
$end
Warning
For all the properties set in MoleculeSystem that refers to the indices of
the atoms in the Molecule the convention is to use 0-based indices.
This is true for frozen_indices, int_def and user_defined_bonds.
The values used then in the coord file are 1-based instead. The conversion
is done internally and you should always use 0-based indices in the python code.
An important and more complicated attribute is int_def that, if present, is used to
fill the $intdef data group in the coord file. The attribute should be a list of
internal coordinates given as subclasses of turbomoleio.core.molecule.InternalDefinition.
Each subclass define a type of internal variable as defined from TURBOMOLE. For example the
turbomoleio.core.molecule.Distance represent an internal variable of type stre.
For the internal definitions that are most commonly used (stre, bend and tors) helper
methods are provided in MoleculeSystem to append additional internal definition to an existing
instance. For example the following python code:
m = MoleculeSystem.from_file("coord")
m.add_distance(atom1=0, atom2=1, value=1.5)
m.add_bond_angle(atom1=1, atom2=2, vertex=3, status="k")
will result in a coord file with this structure:
$coord
-0.00000000000000 0.00000000000000 0.00000000000000 n
-1.17616323936717 2.03717448857876 0.00000000000000 o
-1.17616323936717 -2.03717448857876 0.00000000000000 o
2.35232647873438 0.00000000000000 0.00000000000000 o
$intdef
1 f 1.0 stre 1 2 val=1.5
2 k 1.0 bend 2 3 4
$user-defined bonds
1-2, 2-4, 3-4
$end
We stress again that the indices provided by the are 0-based as opposed in the one produced in the file, that are 1-based.
Warning
Following pymatgen conventions the Molecule object contained in MoleculeSystem has coordinates
in angstrom, while the coord file contains coordinates in Bohr. The values provided for the
internal definitions in the helper methods and in the InternalDefinition subclasses are written
in $intdef as they are provided. Their units are the same as those defined in TURBOMOLE for
that specific type of internal coordinate.
Note that the helper methods have also automatically set the $user-defined bonds. This brings us
to the last attribute that can be set in MoleculeSystem: user_defined_bonds. This can contain
a set of tuples of the form (index1, symbol, index2), where the atom indices are 0-based
and the symbol can be - or |.
These attributes could be used to set the complete list of internal coordinates required by TURBOMOLE,
but in general this would be more useful to define a few of them and call define afterwards with
the ired option to let it generate a complete list of redundant internal coordinates. Given its
potentially complicated structure, the $redundant data group is never parsed nor stored when
reading a coord file that contains it.
Periodic systems
Warning
This is an experimental feature in turbomoleio. As a work-in-progress, the API might still change without prior notice.
For periodic systems, the coord file and the periodicity is represented
through a turbomoleio.core.periodic.PeriodicSystem object. This has methods
to read and generate a coord file that can be read by TURBOMOLE, as well as the corresponding
periodic attributes.