tabulated bond potential behavior outside of range

Hi,

According to the documentation for bond_style table:

“The bond lengths must range from a LO value to a HI value, and increase from one line to the next. If the actual bond length is ever smaller than the LO value or larger than the HI value, then the bond energy and force is evaluated as if the bond were the LO or HI length.”

In a simple test of this behavior LAMMPS does seem to substitute the final force and energy values of the table if a bond is stretched past the HI value of the table. Is there a reason that this convention was chosen, despite the fact that the energy and force will be inconsistent outside of the LO-HI range? I think that it would be better to use the force at HI outside of the LO-HI range and to increase the energy values to be consistent with the force. Could this be made the default?

Regards,
K. Michael Salerno

Hi,

According to the documentation for bond_style table:

"The bond lengths must range from a LO value to a HI value, and increase
from one line to the next. If the actual bond length is ever smaller than
the LO value or larger than the HI value, then the bond energy and force is
evaluated as if the bond were the LO or HI length."
In a simple test of this behavior LAMMPS does seem to substitute the final
force and energy values of the table if a bond is stretched past the HI
value of the table. Is there a reason that this convention was chosen,
despite the fact that the energy and force will be inconsistent outside of
the LO-HI range? I think that it would be better to use the force at HI
outside of the LO-HI range and to increase the energy values to be
consistent with the force. Could this be made the default?

i have difficulties understanding what you are asking for and how this
is different from the current behavior.
would you mind posting the simple test of yours and highlight in which
way you would have it changed.

it almost looks as if you are misunderstanding the documentation.
perhaps a look at the source code might help?

axel.

> Hi,
>
> According to the documentation for bond_style table:
>
> "The bond lengths must range from a LO value to a HI value, and increase
> from one line to the next. If the actual bond length is ever smaller than
> the LO value or larger than the HI value, then the bond energy and force
is
> evaluated as if the bond were the LO or HI length."
> In a simple test of this behavior LAMMPS does seem to substitute the
final
> force and energy values of the table if a bond is stretched past the HI
> value of the table. Is there a reason that this convention was chosen,
> despite the fact that the energy and force will be inconsistent outside
of
> the LO-HI range? I think that it would be better to use the force at HI
> outside of the LO-HI range and to increase the energy values to be
> consistent with the force. Could this be made the default?

i have difficulties understanding what you are asking for and how this
is different from the current behavior.
would you mind posting the simple test of yours and highlight in which
way you would have it changed.

I will try to make what I say more clear. Right now what I find is
consistent with the documentation ( am attaching the input that
illustrates):

ENERGY(HI+delta) = ENERGY(HI)
and
FORCE(HI+delta) = FORCE(HI)
which produces forces and energies that are not consistent with each other.

I am proposing that it should be

FORCE(HI+delta) = FORCE(HI)
and
ENERGY(HI+delta) = ENERGY(HI)-FORCE(HI)*delta

there may need to be some additional logic that uses the shortest bond
distance taking into account PBC, although it is debatable what the
"correct" behavior should be.

mike

harmonic.txt (26.9 KB)

in.bond-stretch (596 Bytes)

simple.data (275 Bytes)

[...]

i have difficulties understanding what you are asking for and how this
is different from the current behavior.
would you mind posting the simple test of yours and highlight in which
way you would have it changed.

I will try to make what I say more clear. Right now what I find is
consistent with the documentation ( am attaching the input that
illustrates):

ENERGY(HI+delta) = ENERGY(HI)
and
FORCE(HI+delta) = FORCE(HI)
which produces forces and energies that are not consistent with each other.

I am proposing that it should be

FORCE(HI+delta) = FORCE(HI)
and
ENERGY(HI+delta) = ENERGY(HI)-FORCE(HI)*delta

there may need to be some additional logic that uses the shortest bond
distance taking into account PBC, although it is debatable what the
"correct" behavior should be.

i don't see much of a benefit in your suggestion. once you are "off
the chart" things are broken anyway. nothing is keeping you from
creating a with a larger range, that implements the behavior you want.
once a bond is stretched beyond the communication cutoff, it will
possibly get "lost" anyway.

other tabulated potentials, e.g. pair style table stop with an error
(which is what i would personally favor in these situations).

axel.

[...]

>> i have difficulties understanding what you are asking for and how this
>> is different from the current behavior.
>> would you mind posting the simple test of yours and highlight in which
>> way you would have it changed.
>>
>
> I will try to make what I say more clear. Right now what I find is
> consistent with the documentation ( am attaching the input that
> illustrates):
>
> ENERGY(HI+delta) = ENERGY(HI)
> and
> FORCE(HI+delta) = FORCE(HI)
> which produces forces and energies that are not consistent with each
other.
>
> I am proposing that it should be
>
> FORCE(HI+delta) = FORCE(HI)
> and
> ENERGY(HI+delta) = ENERGY(HI)-FORCE(HI)*delta
>
> there may need to be some additional logic that uses the shortest bond
> distance taking into account PBC, although it is debatable what the
> "correct" behavior should be.

i don't see much of a benefit in your suggestion. once you are "off
the chart" things are broken anyway. nothing is keeping you from
creating a with a larger range, that implements the behavior you want.
once a bond is stretched beyond the communication cutoff, it will
possibly get "lost" anyway.

My current need is for the bond to do something reasonable (physical!) at
very high energies/temperatures and to be as tabulated near the minimum at
low temperatures/energies. I also need to evaluate the configurations
based on the energy, so I really do need the energies to be correct. My
workaround has been to create a table with a wider range as you suggested.
I did not appreciate the fact that a bond could be lost, so thank you for
pointing that out. I don't think I've seen this situation but it's good to
be aware of it. I guess I also support giving an error rather than
allowing a simulation to run with unphysical output and (as far as I can
tell) no indication of it.