Puzzling pseudothermostats in DL_POLY

Dear all,

I’m wondering if anyone with more exposure to the pseudothermostat options in DL_POLY can help me evaluate the current situation (I’m currently at commit 6ab1ee126…, the latest code, though from poking around in the logs what I describe may stretch back significantly further).

For arguments sake, let’s suppose I am running calculations on a copy of TEST14 (Bulk Al with EAM potential). I’ve edited the CONTROL file to run for more steps (say 2000 for starters). I’ve run the simulation and nothing overtly surprising arises from the results. Now, suppose I run the same simulation with an extra CONTROL directive:

pseudo gauss 10.0 400.0

This ought to thermostat the outer region of the cell to 400K (bulk at 300K). Re-running, I find that nothing changes - the gaussian pseudothermostat appears to do nothing (same with 500K or 600K or 2000K, …). One can corroborate this in the source code, where it appears there is little use of PSEUDO_GAUSS. The source code does appear to make use of PSEUDO_LANGEVIN (and direct, langevin_direct options). Once again, I add to the basic test an extra CONTROL directive:

pseudo langevin 10.0 400.0

Re-running, this time I find that the system-wide temperature reported in STATIS falls to below 300K (around 280K).

Ok, this might be an issue with the (higher) pseudothermostat temperature. So, I run another test with:

pseudo langevin 10.0 300.0

where I’d loosely expect that (even if I’ve broken the ensemble from a theoretical standpoint) the system temperature would still be averaging around 300K. It’s not. The system temperature as reported in STATIS falls again and settles at around 170K.

``pseudo direct 10.0 300.0

leads to a slight (but significant) increase in the system temperature, growing beyond 330K.

pseudo direct 10.0 400.0

leads to a growth beyond 430K of the total system temperature in this case.

One can engineer even more bizarre (bordering paradoxical) scenarios on the system temperature using pseudothermostats which are very thin and therefore only affect a small fraction of particles.

This behaviour persists in both serial and parallel builds of the code and seems to affect various other calculations outside of this MWE.

Whilst I’m aware that pseudothermostats in general do not preserve ensembles in the strict mathematical sense, I feel as though they should at least mimic closely the temperatures which are being required of them.

Can anyone explain to me what’s going on here? Why are the pseudothermostat options that work in DL_POLY having this effect in practice?

Is what is described in the manual for the langevin, direct, langevin_direct pseudothermostats directly realised in the code currently?

Best wishes, and thanks in advance,

To unsubscribe from the DLPOLY list, click the following link: