temperature control when some atoms frozen

Dear all,

I wish to melt an alloy while fixing positions of a small group of atoms, which initially form a slab. So I increased the temperature of the mobile atoms via NPT step by step (a step is to increase 100 K and relax for some time), and at each step I set the force of the frozen atoms to zero. what puzzled me is that the temperature of the mobile atoms is higher than the set value. For example, when set T is 300 K, I got average T (of mobile atoms) around 340 K, and when set T is 2100 K, and got T around 2500 K. I tried decreasing Tdamp from 0.1 ps to 0.01 ps (MD step is 1 fs), it didn't help.

Could someone tell me how to more accurately fix the temperature of the mobile atoms? Thanks.

(I also tried fixing the temperature of the small group of atoms (slab) to 300 K and heating the other atoms. The temperature of slab eventually went towards zero and that of the other atoms went to higher than the specified temperature.)


The complete input file (for the case of frozen-atoms) reads:

units metal
boundary p p p
atom_style atomic
read_data geoin.lmp
pair_style eam/fs
pair_coeff * * \{home\}/code/lammps/lammps\-15Jan11/potentials/Cu\-Zr\_2\.eam\.fs Cu Zr region inblk block INF INF INF INF 17\.0 23\.5 side in units box region outblk block INF INF INF INF 17\.0 23\.5 side out units box group cu type 1 group zr type 2 group fixblk region inblk group freeblk region outblk compute freetemp freeblk temp compute freeke freeblk ke thermo 1000 velocity freeblk create 300\.0 4928459 rot yes dist gaussian thermo\_style custom step c\_freetemp pe c\_freeke etotal vol press timestep 0\.001 dump dumptrj all atom 2000 trj\.lammpstrj dump\_modify dumptrj scale no sort id restart 400000 restart variable tmp index 3 4 5 6 7 8 \# up to 21 variable temperature equal v\_tmp\*100 label looptemp      fix ffree freeblk npt temp {temperature} ${temperature} 0.1 iso 0.0 0.0 1.0
     fix ffix fixblk setforce 0.0 0.0 0.0
     run 200000
next tmp
jump in.eam looptemp

I would just try it with NVT first. You can certainly define
a group containing the mobile atoms, and just thermostat
those (with NVT) and just monitor/print the temperature
of the atoms in that group. For the frozen atoms,
you can either not integrate them, or set their vel and force
to zero.


Dear Steve and others,

I changed the thermo_style line such that it prints the temperature of the whole system. It came out that this whole temperature was equal to the specified temperature for the mobile group. It looks that LAMMPS takes the temperature specified for the group of mobile atoms as the temperature specified for the whole system and changes the temperatures of the sub-systems (i.e., mobile and fixed groups) in such a way that the overall temperature is equal to the specified temperature. In other words, it does not control the temperature of subsystems. Has anyone else got similar problems before? Thanks.


I changed the thermo_style line such that it prints the temperature of the
whole system

That is the default behavior. What LAMMPS does is very simple.
It lets you define temperature computes for any group of atoms. It lets you
print out (via thermo_style custom) any of those temperatures.
And it lets you use any of those computes to control one or more thermostats
via the fix modify command. How you put all that together
is up to you.