Basis functions
Gaussian type orbitals (GTO)
PyQInt uses cartesian Gaussian type orbitals as given by
wherein \(\alpha\) is the exponent, \(\vec{R} = \left(X,Y,Z\right)\) the position of the orbital, \((l,m,n)\) the orders of the pre-exponential polynomial, and \(N\) a normalization constant such that
GTOs are a fundamental building block of CGF (see below) and typically a user would not directly work with them (a notable exception is provided below). Nevertheless, GTO objects can be constructed as follows:
from pyqint import PyQInt, CGF, GTO
coeff = 1.0 # coefficients only have meaning for GTOs within a CGF
alpha = 0.5
l,m,n = 0,0,0
p = (0,0,0)
G = GTO(coeff, p, alpha, l, m, n)
Note
The normalization constant is automatically calculated by PyQInt based on the value of \(\alpha\) and \((l,m,n)\) and does not have to be supplied by the user.
If you work with individual GTOs, the first parameter to construct the GTO should have a value of 1.0. This first parameter corresponds to the linear expansion coefficient used in the formulation of Contracted Gaussian Functions (see below).
Contracted Gaussian Functions (CGF)
Several GTOs can be combined to produce a so-called Contracted Gaussian Functional which is esentially a linear combination of GTOs as given by
To build a CGF, we first have to produce the CGF object and then add GTOs to it:
from pyqint import PyQInt, CGF
cgf = CGF([0.0, 0.0, 0.0])
cgf.add_gto(0.154329, 3.425251, 0, 0, 0)
cgf.add_gto(0.535328, 0.623914, 0, 0, 0)
cgf.add_gto(0.444635, 0.168855, 0, 0, 0)
Note
The first argument of the add_gto function is the linear expansion coefficient
\(c_{i}\) and the second argument is \(\alpha\).
Position Handling and Advanced Usage
A CGF object carries an explicit spatial position \(\vec{R}\),
which is specified when the object is constructed. This position is used as
the default center for all Gaussian Type Orbitals (GTOs) added to the CGF via
the standard add_gto method.
When using
cgf.add_gto(c, alpha, l, m, n)
the position of the CGF itself is implicitly copied to the newly created GTO. This is the typical and intended usage pattern for atom-centered basis sets, where all primitive Gaussians contributing to a contracted function are located on the same atomic center. Under this assumption, the CGF represents a single atomic basis function composed of multiple primitives sharing a common center.
Non-Atom-Centered GTOs and Mixed-Center CGFs
In more advanced scenarios, it may be desirable to construct contracted functions composed of GTOs located at different spatial positions. This can arise, for example, when building symmetry-adapted basis functions or other non-standard orbital constructions.
For such cases, the CGF class provides the method
add_gto_with_position, which allows explicit specification of the GTO
center:
cgf.add_gto_with_position(c, p, alpha, l, m, n)
where p is a three-component array specifying the Cartesian coordinates
of the GTO center.
When this method is used, the position stored in the CGF object itself is ignored for that particular GTO, and the explicitly provided position is stored with the primitive instead.
Integral Evaluation and Position Resolution
It is important to emphasize that all integral evaluations are performed using
the positions of the individual GTOs, not the position stored in the CGF
object. The CGF position serves only as a convenient default when adding
atom-centered primitives via add_gto. Consequently, CGFs containing GTOs
at mixed centers are handled correctly by the integral engine, provided that
add_gto_with_position is used where appropriate.
Users are therefore encouraged to:
Use
add_gtofor standard atom-centered basis functionsUse
add_gto_with_positionwhen constructing non-standard or symmetry-adapted contracted functionsRely on GTO positions - not CGF positions — when reasoning about integral evaluation