control of pressure

Asked by Chiara Modenese

Hi Bruno,

do you think that servo-control algorithm in the TriaxialCompression should work well also for non linear contact relationships? I mean, do you think that the formula is tuned specifically for linear law or is it general? I am having some trouble to maintain constant stresses on the walls, though I have to say only when I want to maintain very low cell pressures.

Thanks a lot,
Chiara

Question information

Language:
English Edit question
Status:
Solved
For:
Yade Edit question
Assignee:
No assignee Edit question
Solved by:
Bruno Chareyre
Solved:
Last query:
Last reply:
Revision history for this message
Jérôme Duriez (jduriez) said :
#1

Hi Chiara,

I used this kind of algorithm in my simulations with non linear contac relationships : to maintain a contact normal stress on a box, while contact law was "bilinear" (kn(loading) = cst # kn(unloading) = cst ). Probably different from your case, but for me it worked.
I paid attention to use the right stifness in the algorithm, using kn(loading) if my box goes into the sample, and the contrary otherwise.

You could maybe use an updated stifness value in your case (with derivative ?) ??? if the changes of stifness during interpenetration is really the problem

Not Bruno (sorry ;-) )

Revision history for this message
Bruno Chareyre (bruno-chareyre) said :
#2

It's a bit like for globalStiffness time-stepper.
The algorithm uses stiffness of contacts, so it matters if the law is
linear or not.
For HM, the engine should work correctly if it can get relevant tangent
(i.e. dFn/dUn for current Fn) stiffnesses of each boundary-particle
contacts.
Is that possible with current implementation of HM? What is the meaning
of i->phys->kn?
If it is a bit unstable, playing with servo-damping could help
(https://yade-dem.org/doc/yade.wrapper.html?highlight=triaxial#yade.wrapper.TriaxialStressController.wallDamping).

Bruno

Revision history for this message
Chiara Modenese (chiara-modenese) said :
#3

Hi Jerome,

thanks for answering. I also use to update contact stiffness. As I said, the
problem occurs at low cell pressures, say 1kPa or so. It has also to be said
that this is combined with high stiffness values which make time step
already very tiny. Am not really sure what could trigger oscillations in
such a case or if there is any solution other than going for lower
stiffnesses or higher pressures likewise.

Chiara

On 24 May 2011 16:11, jduriez <email address hidden> wrote:

> Your question #158839 on Yade changed:
> https://answers.launchpad.net/yade/+question/158839
>
> Status: Open => Answered
>
> jduriez proposed the following answer:
> Hi Chiara,
>
> I used this kind of algorithm in my simulations with non linear contac
> relationships : to maintain a contact normal stress on a box, while contact
> law was "bilinear" (kn(loading) = cst # kn(unloading) = cst ). Probably
> different from your case, but for me it worked.
> I paid attention to use the right stifness in the algorithm, using
> kn(loading) if my box goes into the sample, and the contrary otherwise.
>
> You could maybe use an updated stifness value in your case (with
> derivative ?) ??? if the changes of stifness during interpenetration is
> really the problem
>
> Not Bruno (sorry ;-) )
>
> --
> If this answers your question, please go to the following page to let us
> know that it is solved:
> https://answers.launchpad.net/yade/+question/158839/+confirm?answer_id=0
>
> If you still need help, you can reply to this email or go to the
> following page to enter your feedback:
> https://answers.launchpad.net/yade/+question/158839
>
> You received this question notification because you asked the question.
>

Revision history for this message
Chiara Modenese (chiara-modenese) said :
#4

On 24 May 2011 17:15, Chareyre <email address hidden> wrote:

> Your question #158839 on Yade changed:
> https://answers.launchpad.net/yade/+question/158839
>
> Chareyre proposed the following answer:
> It's a bit like for globalStiffness time-stepper.
> The algorithm uses stiffness of contacts, so it matters if the law is
> linear or not.
> For HM, the engine should work correctly if it can get relevant tangent
> (i.e. dFn/dUn for current Fn) stiffnesses of each boundary-particle
> contacts.
> Is that possible with current implementation of HM? What is the meaning
> of i->phys->kn?
>
Yes, kn (and also ks) is computed as the current value of normal contact
stiffness (tangential value).

> If it is a bit unstable, playing with servo-damping could help
>
It is not very clear to me whether playing means increasing or decreasing
such a value. What about the coefficient 0.8 in the formula?

Chiara

> (
> https://yade-dem.org/doc/yade.wrapper.html?highlight=triaxial#yade.wrapper.TriaxialStressController.wallDamping
> ).
>
> Bruno
>
> --
> If this answers your question, please go to the following page to let us
> know that it is solved:
> https://answers.launchpad.net/yade/+question/158839/+confirm?answer_id=1
>
> If you still need help, you can reply to this email or go to the
> following page to enter your feedback:
> https://answers.launchpad.net/yade/+question/158839
>
> You received this question notification because you asked the question.
>

Revision history for this message
Jérôme Duriez (jduriez) said :
#5

> Chareyre proposed the following answer:

> The algorithm uses stiffness of contacts, so it matters if the law is
> linear or not.

But the algorithm uses stiffness at iteration i : k_i, to compute displacements of the wall that should give the wanted correction dSigmaCorr

Once walls are moved, at the following time step, there might be different stiffnesses (= k_{i+1}) leading to a real increment of sigma which might be different from wanted dSigmaCorr : more and more different as k_{i+1} is more and more different from k_i.

Don't you think there might be something like that ? At least "theorytically" ? Probably differences between k_{i+1} and k_i are generally small, but maybe not always ?

Revision history for this message
Bruno Chareyre (bruno-chareyre) said :
#6

https://yade-dem.org/doc/yade.wrapper.html?highlight=triaxial#yade.wrapper.TriaxialStressController.wallDamping:

"wallDamping=0 implies a (theoretical) perfect control, wallDamping=1 means no movement"

If you want slower walls motion, you would better be closer to 1. Not clear?

The hardcoded 0.8 is not damping (the explanation is my PhD thesis).

Revision history for this message
Chiara Modenese (chiara-modenese) said :
#7

Today I was wondering why, say in the periodic case, the servo mechanism
cannot be simply coded like this:
strain_rate+=gain*(sigma_goal - sigma_current)
where gain is what people call "gain parameter" as can be found in many
papers.

Why do you we need to write this
strain_rate+=dampFactor*scene->dt* ( goal[axis]-stress[axis] ) /mass;
in PeriIsoCompressor.cpp? In this case, there are two parameters other than
one, mass and dampFactor. What is the advantage to have to calibrate two
parameters and why it should work better?

Thanks for clarification,
Chiara

PS: I do not create a new question, since it is somewhat related to the
previous points.

Revision history for this message
Best Bruno Chareyre (bruno-chareyre) said :
#8

General rule: anything you can do with one parameter can also be done
with two parameters. ;-)

The two equations are almost the same. The only difference is that we
have different gain in loading and unloading, it helps stabilizing.
If you set growDamping=0, then you get eq. 1, where gain will be
constantly equal to 1/mass.

Bruno

Revision history for this message
Chiara Modenese (chiara-modenese) said :
#9

Thanks Chareyre, that solved my question.

Revision history for this message
Chiara Modenese (chiara-modenese) said :
#10

Ok, I see.. Thanks :-)
Chiara

On 27 May 2011 18:41, Chareyre <email address hidden> wrote:

> Your question #158839 on Yade changed:
> https://answers.launchpad.net/yade/+question/158839
>
> Status: Open => Answered
>
> Chareyre proposed the following answer:
> General rule: anything you can do with one parameter can also be done
> with two parameters. ;-)
>
> The two equations are almost the same. The only difference is that we
> have different gain in loading and unloading, it helps stabilizing.
> If you set growDamping=0, then you get eq. 1, where gain will be
> constantly equal to 1/mass.
>
> Bruno
>
> --
> If this answers your question, please go to the following page to let us
> know that it is solved:
> https://answers.launchpad.net/yade/+question/158839/+confirm?answer_id=7
>
> If you still need help, you can reply to this email or go to the
> following page to enter your feedback:
> https://answers.launchpad.net/yade/+question/158839
>
> You received this question notification because you asked the question.
>