Collocation Example¶
Single Collocation¶
A collocation grid between a single basis and a Cartesian grid can be computed
with the collocation()
function. For example, we will use a grid
starting at the origin along the z
axis:
>>> import gau2grid
>>> import numpy as np
>>> xyz = np.zeros((3, 5))
>>> xyz[2] = np.arange(5)
We can then create a gaussian with only a single coefficient and exponent of 1 centered on the origin:
>>> L = 0
>>> coef = [1]
>>> exp = [1]
>>> center = [0, 0, 0]
The collocation grid can then be computed as:
>>> ret = gau2grid.collocation(xyz, L, coef, exp, center)
>>> ret["PHI"]
[[ 1.00000e+00 3.67879e-01 1.83156e-02 1.23409e-04 1.12535e-07]]
The p
gaussian can be also be computed. Note that since our grid points are
along the z
axis, the x
and y
components are orthogonal and thus
zero.
>>> L = 1
>>> ret = gau2grid.collocation(xyz, L, coef, exp, center, spherical=False, grad=1)
>>> ret["PHI"]
[[ 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00] # P_x
[ 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00] # P_y
[ 0.00000e+00 3.67879e-01 3.66312e-02 3.70229e-04 4.50140e-07]] # P_z
As the previous execution used grad=1
, the X
, Y
, and Z
cartesian gradients are also available and can be accessed as:
>>> ret["PHI_Z"]
[[ 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00]
[ 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00]
[ 1.00000e+00 -3.67879e-01 -1.28209e-01 -2.09797e-03 -3.48859e-06]]
Basis Collocation¶
Often it is beneficial to compute the collocation matrix between several basis
functions and a set of grid points at once the
collocation_basis()
helper function provides this
functionality. To begin, a set of basis sets can be constructed with the
following form:
>>> basis = [{
'center': [0., 0., 0.],
'exp': [38, 6, 1],
'coef': [0.4, 0.6, 0.7],
'am': 0
}, {
'center': [0., 0., 0.],
'exp': [0.3],
'coef': [0.3],
'am': 1
}]
Execution of this basis results in a collocation matrix where basis results are vertically stacked on top of each other:
>>> ret = gau2grid.collocation_basis(xyz, basis, spherical=False)
>>> ret["PHI"]
[[ 1.70000e+00 2.59003e-01 1.28209e-02 8.63869e-05 7.87746e-08] # S
[ 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00] # P_x
[ 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00] # P_y
[ 0.00000e+00 2.22245e-01 1.80717e-01 6.04850e-02 9.87570e-03]] # P_z