Hi there,
I am trying to impose a sinusoidal rotation to a region of my 2D simulations.
The idea is to do something related to oscillatory rheology.
I can create a probe, for example a square filled with particles with no force.
After that, I would like to rotate the the square of an angle following the evolution equation:
theta(t) = theta(0) * sin (w * t)
so that I will have an oscillatory deformation with amplitude that follow a sin law.
I have tried to explore
but those not seem to do what I want, since the rotation is continuos
in principle i can make a loop to rotate the particle of a delta theta every # steps.
However, it does not appear to be a clean solutiom
Ideally I would need a fix semilar to move but with time evolution as in the equation above.
I probably can extend the fix move to do that, but I wanted to ask if you see a different way to do this (I am not a superpro user).
Thanks in Advance
Hi there,
I am trying to impose a sinusoidal rotation to a region of my 2D simulations.
The idea is to do something related to oscillatory rheology.
I can create a probe, for example a square filled with particles with no force.
After that, I would like to rotate the the square of an angle following the evolution equation:
theta(t) = theta(0) * sin (w * t)
so that I will have an oscillatory deformation with amplitude that follow a sin law.
I have tried to explore
but those not seem to do what I want, since the rotation is continuos
in principle i can make a loop to rotate the particle of a delta theta every # steps.
However, it does not appear to be a clean solutiom
Ideally I would need a fix semilar to move but with time evolution as in the equation above.
I probably can extend the fix move to do that, but I wanted to ask if you see a different way to do this (I am not a superpro user).
Please review the fix move documentation again. I am certain that your motion can described with atom style variables.
Axel
Dear Axel,
thanks a lot for the feedback. According to de docs, if I am correct, in fix move there are 4 styles:

Linear: This will make a plane uniform translation in an arbitrary direction

Wiggle: sinusoidal translation in arbitrary direction

Rotation: Uniform rotation. Fixed angular velocity (i.e. peridod)

Variable: If understand this well, one can write an arbitrary variable to change position/velocity of particles with time.
So the Linear and Wiggle no use. Variable it seems that you apply the variable to all position of the region in the same way so I do not see how you can apply a rotation matrix to each particle, but perhaps you can do a perparticle operation.
Rotation, perhaps you can make the period timedependent? but then I have to see if you can implement a sinusoidal time dependence of angular amplitude.
Am I missing something?
Best
Dear Axel,
thanks a lot for the feedback. According to de docs, if I am correct, in fix move there are 4 styles:

Linear: This will make a plane uniform translation in an arbitrary direction

Wiggle: sinusoidal translation in arbitrary direction

Rotation: Uniform rotation. Fixed angular velocity (i.e. peridod)

Variable: If understand this well, one can write an arbitrary variable to change position/velocity of particles with time.
So the Linear and Wiggle no use. Variable it seems that you apply the variable to all position of the region in the same way so I do not see how you can apply a rotation matrix to each particle, but perhaps you can do a perparticle operation.
Yes, you can. You have to use atom style variables for the dimensions you want to modify. These are evaluated per atom an have access to peratom properties.
Try this with a simpler operation and you’ll see.
Axel
Hi Axel,
indeed this si probably doable in the way you suggested. I am not fully familiar with atom style variable, but it seems like a nice workaround, but maybe a bit cumbersome.
In any case, I took an alternative route.
I add a style “orotate” (oscillatory rotate) to the fix move. It was pretty straightforward to generalize it starting from “rotate”.
It seems to work, fine.
I will test it on my simulations. I do not know if this can be interesting for anyone, but in case I can make the patch (it is really norocketscience!) available.
Thanks again!
Hi Axel,
indeed this si probably doable in the way you suggested. I am not fully familiar with atom style variable, but it seems like a nice workaround, but maybe a bit cumbersome.
Yes, it is meant for people that do not want to write C++ code or for trying things out.
In any case, I took an alternative route.
I add a style “orotate” (oscillatory rotate) to the fix move. It was pretty straightforward to generalize it starting from “rotate”.
It seems to work, fine.
I will test it on my simulations. I do not know if this can be interesting for anyone, but in case I can make the patch (it is really norocketscience!) available.
You can submit patches or (even better) pull requests on the lammps github or bitbucket pages.
Axel
Thanks Axel,
I will test my implementation and once I think that it is ok, I will send patch (or the other method you suggested)
Thanks again all the best