LAMMPS WWW Site - LAMMPS Documentation - LAMMPS Mailing List Archives
Re: [lammps-users] Fw: Reading Energy in Custom Pair Function
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [lammps-users] Fw: Reading Energy in Custom Pair Function

From: Steve Plimpton <sjplimp@...24...>
Date: Mon, 3 Jul 2017 08:36:13 -0600

Any fix can produce output which other fixes, computes, output access.
See fix indent as a simple example.


On Sun, Jul 2, 2017 at 2:05 PM, S M <smatrix_2012@...8...> wrote:

 Thanks, Axel, I have followed the example in "fix_ave_atom.cpp" and implemented necessary computes in my fix. It works as expected now.

*Anybody in the mailing list interested in the BOND-BOOST METHOD is welcome to use this fix*

On a less important note:

This fix writes the amount of repulsive energy applied ("boostAmount") to a text file, which is in turn read by other fixes (e.g. fix_nve.cpp). Instead, I am thinking of whether boostAmount can be stored as a variable and compute, which can be accessed by other fixes without the need of a separate text file.

Can anybody help me out here?


From: Axel Kohlmeyer <akohlmey@...24...>
Sent: Saturday, July 1, 2017 6:38 PM
To: S M
Cc: lammps
Subject: Re: [lammps-users] Fw: Reading Energy in Custom Pair Function
On Sat, Jul 1, 2017 at 5:47 PM, S M <smatrix_2012@...8...> wrote:
> Hi, here is my update:
> I am writing a fix (fix_addboost) that identifies the particle in a group
> possessing the highest pair potential energy, and then applies a repulsive
> potential to that particle only (this principle is used in the bond-boost
> method, especially of Miron-Fichthorn).
> My code compiles, but I get a "segmentation fault (core dumped)" error upon
> running. I have located the problem in the following lines (lines 277-278 in
> the full code attached) that try to read "eatoms[i]".
> fprintf(screen,"eatom[i] = %f \n", eatom[i]);
> currentEnergy = eatom[i];
> I am guessing that eatoms[i] have not been called properly. I have followed
> the syntax in "compute_pe_atom.cpp" and used the following in my code:
> if (force->pair){
> double *eatom = force->pair->eatom;
>         ....
> }
> I have also included pair.h and force.h at the beginning. I have gone
> through the LAMMPS developer manual also, but I still cannot figure out what
> is going wrong.

with your current setup, LAMMPS doesn't know, that you want to use
per-atom energies, so the array is not allocated and the energy not
tallied into that array.
the clean way to deal with this would be:
- create an instance of compute pe/atom with the suitable arguments
from within your fix
- read the data from the compute's vector_atom member after having
called its compute_peratom() method
- call modify->clearstep_compute() /
modify->addstep_compute(nextstep), where nextstep is the next
timestep, where you need access to the data from the compute.

see other fixes that maintain their own compute instances for more details.


> Can anybody help me solve this problem?
> Thanks,
> S
> ________________________________
> From: S M
> Sent: Sunday, June 18, 2017 2:16 PM
> To: lammps
> Subject: Re: [lammps-users] Reading Energy in Custom Pair Function
> Ok, here is the full scenario:
> I have a group of atoms at low temperature that interact with each other
> only via a LJ potential. At every timestep, I want to read the potential
> energy (from the LJ interaction) of every atom. Then, I want to identify the
> atom with the maximum potential energy, and weaken the forces acting on it,
> so that it is able to rapidly escape from the vicinity of the rest of the
> atoms.
> - When writing my previous email, I was thinking of applying a repulsive
> pair potential to the atom having the maximum potential energy, that would
> effectively weaken the original LJ interaction. That is why I thought about
> writing a custom pair potential that applies only to that specific atom in
> the group.
> - Now, I am thinking that the same can be achieved by applying an additional
> force on that same atom (and subsequent reaction forces on the other atoms),
> similar to the 'fix addforce' function. In this case, I would have to write
> a custom fix.
> In either of the above, I have to identify the atom with the maximum
> potential energy at every timestep.
> Can anybody provide some advice about how to proceed?
> Thanks,
> S

Check out the vibrant tech community on one of the world's most
engaging tech sites,!
lammps-users mailing list