Backflow revival roadmap
First, please note what would be needed to restore backflow optimization? What is the specific functionality we were using in the old classes that is not present in the modern ones? This note is needed for future revisiting, and perhaps if it can be readily described we might be able to fix it sooner.
High order partial derivatives of SPOSet are needed to be called by determinants with backflow. Those implementations need to be added back.
Originally posted by @ye-luo in https://github.com/QMCPACK/qmcpack/issues/4688#issuecomment-1661159101
Could anyone with more experience with backflow provide a more detailed roadmap for bringing backflow back? Maybe a checklist of tasks..
- What specific classes need these higher order partial derivatives? What are the functions that need a derivative (and wrt what input parameters?)
- Once these derivatives are implemented will backflow just work? or is there additional plumbing required?
Pinging @Paul-St-Young
Based on #5400 it looks like a bit more plumbing might be needed if the goal is to have regular spline basis set wavefunctions running. This test also doesn't include a pseudopotential, so the grouped ("batched") evaluation used for pseudopotential evaluation might also need plumbing. This can be a loop over serial evaluation.
Thanks Paul getting the test in #5400 working seems like a good place to start
A good road map would seem to be, figuring out what functionality batched back flow requires at different module levels, writing unit tests that define correct output for that functionality, then developing that functionality at individual modules. Then writing appropriate integration tests as module functionality is combined, then passing those tests. That seems like a viable way to port the single walker code to this point. It may require testing and analysis of the old single walker backflow code which may not actually defined except as provided publishable output at the application level.
The idea that someone is going to just hack at the application code while repeatedly running this test doesn't encourage me that anything maintainable or well documented will be produced.