profile unbiased thermostat

The documentation for ‘compute temp/profile’ says “Using this compute in conjunction with a thermostatting fix, as explained there, will effectively implement a profile-unbiased thermostat (PUT), as described in (Evans).” I think that this is not quite true. The Evans and Morriss paper defines the local temperature in a given spatial chunk with the degrees-of-freedom given by d*(n-1) where d is the dimension and n is the number of particles in the given local chunk. This means that the degrees-of-freedom for the total system temperature would be dN - dNchunk, where N is the total number of atoms and Nchunk is the number of spatial bins. In LAMMPS, however, this adjustment to the degrees-of-freedom is not made. While it is easy to implement using ‘compute_modify … extra’, it seems to me that an adjustment to the documentation would be helpful. Please correct me if i’m wrong.


I’'ll add something to the doc page to clarify. I think LAMMPS is

subtracting 3 DOF for the entire system (by default). It’s not clear

to me that subtracting 3Nchunk = 3Nlayers is correct, or any

more correct than just 3.


Ok, thanks. I’m not asking you to do any more, but for completeness, I thought i’d give you the evidence that it is the correct thing to do. In a simulation with no net flow, you’d expect the standard temperature to be the same as the temperature computed after removing a local streaming velocity, since the local streaming velocity averages to zero. Without this adjustment to the DOF, the two temperatures are not equal (on average) in a simulation with no flow. With the adjustment they are equal. Attached is a script that demonstrates this in 3d; comment the ‘compute_modify’ line to see the disagreement when the DOF is not adjusted. The same is true in 2d as well, although the script requires a little more modification to work in 2d.

in.test (727 Bytes)