I've renamed the old "InternalEnergyDensity" observable to "ActionDensity", created a corrected version of the "InternalEnergyDensity" observable, and also created a new "InternalEnergyDensitySquared" observable. All of these are in "supervillain/observables/energy.py". I've also created a file "examples/test-energy.py" which I used to test my implementation of these observables using both the Villain and Worldline formulations. A warning: sphinx-doc stopped working on both my laptop and desktop (no idea why), so while I updated the documentation in the code, I was not able to see that it compiles properly into HTML. Sorry about that!
Assuming that the code looks good to you, I think it should be simple to use the functions I've defined along with the formula in my newly-revised version of "Heat capacity in 2d villain.pdf" file in our supervillain dropbox folder to define the heat capacity non-primary observable.
I've renamed the old "InternalEnergyDensity" observable to "ActionDensity", created a corrected version of the "InternalEnergyDensity" observable, and also created a new "InternalEnergyDensitySquared" observable. All of these are in "supervillain/observables/energy.py". I've also created a file "examples/test-energy.py" which I used to test my implementation of these observables using both the Villain and Worldline formulations. A warning: sphinx-doc stopped working on both my laptop and desktop (no idea why), so while I updated the documentation in the code, I was not able to see that it compiles properly into HTML. Sorry about that!
Assuming that the code looks good to you, I think it should be simple to use the functions I've defined along with the formula in my newly-revised version of "Heat capacity in 2d villain.pdf" file in our supervillain dropbox folder to define the heat capacity non-primary observable.