-
Notifications
You must be signed in to change notification settings - Fork 27
Description
Description
Improve the robustness of the Poisson solvers that grid uses to evaluate the Coulomb potential due to a charge distribution,
As pointed out by Becke, this is more efficiently treated, numerically, as a solution to the corresponding Poisson equation.
📚 Package Description and Impact
Grid is a pure Python library for numerical integration, interpolation and differentiation of interest for the quantum chemistry community.
👷 What will you do?
Grid has two different Poisson solvers, one using a boundary-value method (which seems more robust, but is not perfect #215) and one using an initial-value method which is less robust (see #162). You will attempt to find robust default parameters for these methods. It is conceivable that one needs (much) larger grids for solving the Poisson equation than we routinely use in numerical integration. (Our Gaussian-quadrature-ish grids are especially adapted to integration; for differentiation their accuracy is diminished. Solving the Poisson equation is essentially a differentiation.)
One approach, which would potentially make the method more robust, would be to use a screened Coulomb kernel instead; that approach can remove the singularity in the equation and, by taking the limit to zero screening, give robust results.
Another approach, which might be much easier, would be to use the strategy proposed in #16. That is, estimate the density with a linear combination of Gaussians using BFit, so that one only needs to solve the Poisson equation for the error in the fit.
🏁 Expected Outcomes
- Explore the boundary value solver. Find good values for the default parameters.
- See if the initial value problem can be made more robust or, failing that, if circumstances where it is robust can be identified.
- Develop a protocol where a sufficient grid, algorithm, and algorithm parameters can be selected, allowing high-level porcelain to be designed for the function.
- Explore whether using the "promolecular" trick is beneficial.
- Explore whether screened Coulomb potentials behave better.
- Write comprehensive tests and documentation for all new functionality.
- Write tutorial Jupyter notebooks that show how to use the new functionality.
| Required skills | Python, OOP |
| Preferred skills | Be comfortable with math and numerical algorithms. Experience with scientific programming can help |
| Project size | 350 hours, Large |
| Difficulty | Medium 🤔 |
🙋 Mentors
| Marco Martínez-González | mmg870630_at_gmail_dot_com | @marco-2023 |
| Derrick Yang | yxt1991_at_gmail_dot_com | @tczorro |
| Esteban Vöhringer-Martinez | estebanvohringer_at_qcmmlab_dot_com | @evohringer |
| Ali Tehrani | 19at27_at_queensu_dot_ca | @Ali-Tehrani |