Quasi-static compression test

Submitted by tapsab on Fri, 09/30/2011 - 19:55

Hi,
I want to simulate a quasi-static compression test for cohesive granular particles. In keeping with the quasi-static assumption I want to apply the total wall displacement in several tiny increments. After each increment the walls should be held in place and the particles should be allowed to reach equilibrium (that is the kinetic energy should go close to zero). Thus each displacement increment is to be followed by kind of a relaxation step. My question is how do I achieve this using liggghts?

For the case of atoms I could have done this using the "minimize" function after each displacement increment but unfortunately minimize will not work for the granular potentials implemented in liggghts.

ckloss's picture

ckloss | Mon, 10/03/2011 - 07:55

>>unfortunately minimize will not work for the granular potentials implemented in liggghts
there have been some updates in lammps that have not been implemented yet in liggghts - that will happen with the next major release in a couple months
but why don't you just use normal integration? I think that would picture the process best that happens in reality..

Christoph

tapsab | Mon, 10/03/2011 - 15:32

Christoph,
Thanks for responding. I did think of using normal integration...that is to use a series of interspersed commands in the following order

- run 1 (Apply a displacement increment to the wall in 1 step)
- unfix move (Stop the wall displacement)
- run N1 (Run for N1 steps till the kinetic energy is minimized)
- run 1 (Apply next displacement increment to the wall in 1 step)
- unfix move (Stop the wall displacement)
- run N2 (Run for N2 steps till the kinetic energy is minimized)

---and so on...

However I do not know beforehand how many steps (N1 and N2 in the example above) it would take for the granular assembly to reach equilibrium. Is there a way of ending a run based on some test condition ?

ckloss's picture

ckloss | Mon, 10/03/2011 - 16:10

you could try to use loops for that
e.g. two nested loops, one that does the mesh movement and an inner loop which does the relaxation
within this inner loop you make a sequence of say "run 500" commands until equilibrium is reached

Cheers, Christoph

tapsab | Mon, 10/03/2011 - 17:17

That should work....thanks.

jerry_1988 | Thu, 10/06/2011 - 13:14

Hi Christoph,

I'm not very practical with LIGGGHTS yet. May you explain the loop you said? Is the loop in the code by C++ or just in the input scrip file? Which command can generate a such loop?

Thanks

Jerry

tapsab | Thu, 10/06/2011 - 17:11

Jerry,
You can generate loops in liggghts using a combination of the "if", "next" and "jump" commands in the input script. If you look at the doc page on the "if" command you will find an example on how to use it for making loops in the script.