GSoC 2026: Improve Robustness of Poisson Solver
Nobody has claimed this yet.
- Dominant language
- Python
- Stars
- 101
- Forks
- 40
- PR merge metrics
- No merged PRs in 30d
Description
Description
Improve the robustness of the Poisson solvers that grid uses to evaluate the Coulomb potential due to a charge distribution,
$$
\Phi(\mathbf{r}) = \int \frac{\rho(\mathbf{r}')}{|\mathbf{r} - \mathbf{r}'|} d\mathbf{r}'
$$
As pointed out by Becke, this is more efficiently treated, numerically, as a solution to the corresponding Poisson equation.
$$
\nabla^2 \Phi(\mathbf{r}) = - 4 \pi \rho(\mathbf{r})
$$
📚 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 |
📝Notes
See the discussion in the closed issue
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Review the two existing Poisson solver implementations and the discussions in issues #215, #162, and #16 first. Benchmark solver parameters and grid sizes across representative cases, then establish a selection protocol; completion includes robust tests, documentation, and tutorial Jupyter notebooks for the supported approaches.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- jupyter-notebook, python
- Domain
- backend, documentation, testing
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 25/100