I have a question about how to scale temperature in the lj units. I have checked the lj units documentation and consulted with my colleagues, but we have different interpretations of what the Boltzmann constant should be. Therefore, can someone please settle the debate for us?
Let’s say that I want to use the velocity command with a temperature of 298 K. In lj units, would I input a scaled temperature scale as:
T* = (298*1)/epsilon
or would I use the actual SI unit Boltzmann constant, 1.3806e-23 J/K, assuming epsilon is in Joules? (And just to make sure, when I input T*, I should also use the actual dimensional value for epsilon?)
In reduced LJ units, there is some arbitrary energy scale, epsilon (which is NOT the value of epsilon in pair_coeff for LJ) and all energy units are expressed in terms of this. This includes temperatures, which are expressed in terms of k_B T. Therefore, if your typical physical energy scale (say, E0) is defined as 1 epsilon, then room temperature would be
T* = (298*1.3806e-23) / E0.
When you input T*, you only input the multiples of epsilon your k_B T is.
If you really want to simulate a particular real system at a particular temperature, you should probably not use LJ units, because as your example and Stefan’s example show, you then have to start applying conversion factors like 1.3806e-23 J/K everywhere in the script. Instead you should use…you guessed it…real units, or maybe metal units
The reason to use LJ units is if you are interested in universal behavior, in which case it is convenient to express temperature in units of energy (kB=1, LAMMPS does this for you), and you get to choose the unit of energy yourself. For example, but not required, you could set the energy unit to be the value of epsilon in the LJ potential. Similar arguments apply to other physical quantities, but you will have to read the documentation to learn more about those.