lumol-org / lumol

Universal extensible molecular simulation engine
http://lumol.org/
BSD 3-Clause "New" or "Revised" License
184 stars 18 forks source link

Adding path integral Monte Carlo and path integral molecular dynamics #268

Open amartyabose opened 2 years ago

amartyabose commented 2 years ago

This issue is to discuss the possibility of adding path integral methods to the already existing classical MD / MC framework. Quantum-classical isomorphism enables mapping of the thermodynamics of a quantum system to the thermodynamics of a classical system comprising of multiple copies of the original system connected by harmonic springs. Path integral molecular dynamics (PIMD) and path integral Monte Carlo (PIMC) are ways of accounting for the quantum nature of particles in simulations of thermodynamics. While both PIMD and PIMC solve the same problem, PIMC is possibly more general and can also easily deal with identical particles like bosons and fermions. Here is a short introduction to PIMC: https://courses.physics.illinois.edu/phys466/sp2013/lnotes/pimcnotes.pdf

Much like in i-PI, subsequent steps may be taken to incorporate approximate classical trajectory-based dynamics in the form of centroid and ring-polymer molecular dynamics as well.

Luthaf commented 2 years ago

Thanks for opening this issue! I don't know much about how PIMD/PIMC are usually implemented. For example with PIMD, using 10 beads per atom you are in practice running 10 simulations in parallel, where each atom interact with all other atoms in the same simulation & its "neighbors" in the bead polymer ring, is this right?

The best way to implement this might then be to have a new propagator, re-using bits and pieces of the MD propagator.

You mentioned on gitter being interested to contribute this kind of simulation to lumol, are you already familiar with the internals? If not, we can have a quick video chat one of these days and go over them quickly.

amartyabose commented 2 years ago

Well, you have got the basic idea. Now the actual question is how best to implement it. Does one have the 10 different simulations running in "parallel" (as you say) and communicate the forces due to the "springs" between each other? Or does one break the entire physical domain up and parallelize across that, keeping all the different copies of the same atom together?

I am not at all familiar with the internals. I just started poking around and then got caught up in a few things. I would be more free next week. We should do a video chat then.