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.

Steve

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?

Thanks,
S



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.

axel.

>
> 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, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
lammps-users mailing list
lammps-users@...6297....sourceforge.net
https://lists.sourceforge.net/lists/listinfo/lammps-users