Methods¶
BaderKit is based on the Henkelman group's excellent Fortran code. This page provides descriptions and recommendations for when to use each method.
Summary¶
Method | Speed | Accuracy | Single Basin Assignments |
---|---|---|---|
ongrid | Very Fast | Low | |
neargrid | Very Fast | High | |
weight | Medium | Very High |
Descriptions¶
Key Takeaways: Extremely fast, but prone to orientation errors
This is the original algorithm proposed by Henkelman et. al. It is extremely fast, but prone to error. For example, it gives slightly different oxidation states for different orientations of a molecule or material.
For each point on the grid, the gradient is calculated for the 26 nearest neighbors, and the neighbor with the steepest gradient is selected as the next point in the path. This path is followed until a maximum is reached or a previous point in the path is hit. In the former case, all of the points in the path are assigned to the maximum, and in the latter they are assigned to the same maximum as the colliding path.
Reference
G. Henkelman, A. Arnaldsson, and H. Jónsson, A fast and robust algorithm for Bader decomposition of charge density, Comput. Mater. Sci. 36, 354-360 (2006)
Key Takeaways: More accurate than the ongrid method with comparable speed. Requires edge refinement.
This algorithm was developed by Henkelman et. al. after the ongrid method to fix orientation errors. It is less accurate than the weight method, but useful where it is desirable to have only one basin assignment per point on the grid.
A gradient vector is calculated at each point using the three nearest neighbors. A step is made to the neighboring point closest to this gradient vector. A correction vector pointing from the new point to the original gradient is calculated to preserve information about the true gradient.
At each step, this correction vector is compounded. If any component of the correction vector is ever closer to a neighboring point than the current one, a correction is made to keep the path closer to the true gradient.
After all of the points are assigned, a refinement must be made to the points on the edge, as the accumulation of the gradient is technically only correct for the first point in the path.
Reference
W. Tang, E. Sanville, and G. Henkelman, A grid-based Bader analysis algorithm without lattice bias, J. Phys.: Condens. Matter 21, 084204 (2009)
Key Takeaways: Extremely accurate, but not suitable for codes relying on one assignment per grid point. Slower and more memory intensive.
This method reduces errors due to orientation by allowing each point to be partially assigned to multiple basins, resulting in high accuracy. A voronoi cell is generated at each point on the grid. A "flux" is calculated from this point to each neighbor sharing a voronoi facet using the difference in charge density modified by the distance to the neighbor and area of the shared voronoi facet. The total flux is normalized to create "weights" which indicate the fraction of the volume that flows to each neighbor.
Moving from highest to lowest, each point is assigned to basins by assigning the weight going to each neighbor to that neighbors own fractional assignments. The ordering from highest to lowest ensures that the higher neighbors have already received their assignment.
Note
The bader.basin_labels
and bader.atom_labels
properties
for this method are generated by assigning the points to the basin with
the highest weight, or the lowest basin index in the case of a tie. This
makes the assignments very unreliable for further analysis.
Reference
M. Yu and D. R. Trinkle, Accurate and efficient algorithm for Bader charge integration, J. Chem. Phys. 134, 064111 (2011)