barostat-iso

Dear all,

I believe the current implementation of iso barostat in lammps is inappropriate for tricubic systems.
For example, if you have a system defined as: (the red lines in the attached figure corresponds to the xy projection)
0 10 xlo xhi
0 8 ylo yhi
0 10 zlo zhi
-4 0 0 xy xz yz

After some time of evolution, e.g., driven by the pressure approaching their targets, if "lx" is expected to increase from 10 to 11,
one would expect a box like (green lines in the attached figure):
0 11 xlo xhi
0 8.8 ylo yhi
0 11 zlo zhi
-4.4 0 0 xy xz yz

However, in the present implementation of iso barostat, lammps will give a box like (the blue lines):

0 11 xlo xhi
0 8.8 ylo yhi
0 11 zlo zhi
-4 0 0 xy xz yz

Consequently, the geometry of the original box is destroyed. I think the correct way should be to rescale xy, xz and yz
simultaneously when one rescales lx, ly, and lz when barostating a tricubic system in the iso mode.

Any objection?

Lingti Kong

baro-iso.png

Maybe Aidan wants to comment on this.
I will note that LAMMPS is doing what the documentation
says it does for "iso". You can also specify additional
keywords for xy, etc to let them adjust.

But it might be nice to have an option to ramp the
triclinic params along with the diagonal params.

Steve

Ho-ho. I had hoped that this would not come up until maybe next year, as it
raises some tricky questions about how to interpret "iso" and "couple" for
triclinic systems. These keywords completely ignore diagonal components of
strain, instantaneous stress, and external stress, because these keywords
predate the addition of triclinic cells to LAMMPS. Hence the observed
behavior. It is not wrong, but it does not conserve the Euler angles (unless
they are all 90 degrees), which many would view as changing the "shape" of
the box.

The behavior of "iso" could be changed, so that xy, xz, and yz are also
scaled, conserving the Euler angles. "couple xyz" could do the same thing,
so the documentation would remain consistent.

The meaning of "aniso" can not be modified in the same way. If x is rescaled
by etax, and y is rescaled by etay, how much should xy be scaled by? So
"aniso" would have to keep it's current meaning. I suppose that's okay.

What about the couple values "xy", "xz", and "yz"? Can these be made
consistent with the new behavior of "couple xyz"? "xy" could trigger scaling
xy as ly, conserving Euler angle gamma, which depends only on (ly,xy).
However, "xz" would have to scale xz *and* yz, in order to conserve Euler
angle beta, which depends on (lz,xz,yz). "yz" would have to scale xy, xz,
yz, in order to conserve Euler angle alpha, which depends on (ly, lz, xy,
xz, yz). Just documenting this starts to get pretty messy, never mind
implementing it. A simpler prescription would be: "xy" scales xy, "xz"
scales xz, "yz" scales yz, and "xyz" scales everything.

I think this last version could be implemented fairly easily, but I would
like to hear some more comments from users before doing it.

I will copy Jeff Greathouse on this, as I think this might have come up in a
discussion with him before.

Aidan

Thanks Aidan, what you said is exactly what I am thinking.

I believe at the current stage, although we cannot make everything clear about the aniso mode,
at least we can make iso do what it should do.

Thanks.

Lingti