So this should be the end of the story \o/. Basically, for the pressure to converge to the target pressure in NPT MC simulations of rigid molecules, one needs to use the molecular definition of the virial.
The problem is that constraining the molecules to be rigid is equivalent to having some extra forces acting on the atoms, and these forces can not be computed in the generic case. These forces do not appear in the molecular definition of the virial.
A problem occurs in lumol because we have both code for MD (where the atomic definition of the virial makes more sense) and MC with rigid molecules (where the molecular definition makes sense). To work around this, I dynamically select which virial definition to use based on the number of simulated degrees of freedom, introduced in #225.
Fix #79 Fix #103
Adds tests for #58
So this should be the end of the story \o/. Basically, for the pressure to converge to the target pressure in NPT MC simulations of rigid molecules, one needs to use the molecular definition of the virial.
The problem is that constraining the molecules to be rigid is equivalent to having some extra forces acting on the atoms, and these forces can not be computed in the generic case. These forces do not appear in the molecular definition of the virial.
A problem occurs in lumol because we have both code for MD (where the atomic definition of the virial makes more sense) and MC with rigid molecules (where the molecular definition makes sense). To work around this, I dynamically select which virial definition to use based on the number of simulated degrees of freedom, introduced in #225.