[Triaxial test] Kinetic Energy is way too big, how to reduce it?

Asked by Hien Nguyen

Hello Yade Devs and Users,
I'm modelling a triaxial test and here is my code: http://pastebin.com/94dxzCbQ

Briefly, the triaxial test that I'm simulating passes these steps:

- Create the cloud of particles
- Compress until reaching the desired value of porosity and isotropic state
- Applying the deviatoric loading.

I found that with my script, the specimen have a high value of kinetic energy (about 2000J) right before the moment I apply the deviatoric loading, but I want to have a state of the specimen that the kinetic energy is equal to or lower than 10E-7J to have a quasi-static situation. Can you tell me how can I do that, or am I missing something important in my code?

(The compression method that I use is moving the boundary (the six walls), I tried to reduce this moving velocity as low as possible but kinetic energy is still big, I wonder is there any other resolution?)

Thanks in advance.

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
Bruno Chareyre (bruno-chareyre) said :
#1

What is the reason to consider 2000J is "high"?
What is the elastic energy?

The script you are showing looks familiar... :)
Please explain what is specific in this script, as for the moment it seems to be simply a copy/paste of the tutorial.

You mention reducing the walls velocity, how did you do that?

Revision history for this message
Hien Nguyen (giahien) said :
#2

Hello Bruno, thanks for your attention.
'What is the reason to consider 2000J is "high"?'
Because in order to have the quasi-static state + isotropic state, I was told that Ec (kinetic energy must be lower than 10E-7J), I was not clear about this parameter, honestly.

'What is the elastic energy?'
I don't understand what you are meaning: the 'elastic energy' term :) can you explain or cite some documents?

'The script you are showing looks familiar... :)'
The script look similar to you because I coded based on the example from the begining, I have another script which is better written but in this question, in order not to lead to another unnecessary discussion, I removed the part that I coded for further purpose (the stress probing using the TriaxialStressController, but this is off-topic).
The script I showed in this question is the script that I ran and have the big kinetic energy in the result obtained from the TriaxStateRecorder functor.
I reduced the wall velocity by max_vel in TriaxialStressController, for my case, I reduce it from the default value 10 to 2, and after that 0.5. (max_vel=2 and max_vel=0.5)

Revision history for this message
Hien Nguyen (giahien) said :
#3

Sorry the last statement is not exact.
max_vel=2 and max_vel0.5 are in two different simulations, not 'after that'.

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

Hi,

Just a small comment on what you want to achieve rather than how. I agree with Bruno saying that kinetic energy alone (however small in absolute value) will not tell you if your test is quasi-static. You need to compare the total kinetic energy with the elastic potential energy of your system and make sure that the former is a small fraction of the latter (that is to say that dynamic forces are always present but their effect is negligible). How small a fraction you will need to determine until the solution becomes insensitive to the walls' velocity (or strain rate). Alternatively you can also look at the unbalanced ratio.

Chiara

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

> I was told that Ec (kinetic energy must be lower than 10E-7J)

This is really questionable. A consistent criterion should be non-dimensional.

>what you are meaning: the 'elastic energy' term

Use the function of the Law functor. Give it a label in the instanciation:
O.engines=[ ...
[Law2_ScGeom_FrictPhys_CundallStrack(label=law)]
...]

Then use it like this:
law.elasticEnergy()

kinetic/elastic will be a non dimensional variable.
Alternatively, unbalancedForce() is a good measure to.

>I reduced the wall velocity by max_vel in TriaxialStressController

It has no effect on the axis at imposed strain rate. Your rate is:
triax.goal2=-rate

Revision history for this message
Hien Nguyen (giahien) said :
#6

@Chiara:
Well I figured something important from your advice.
In fact I'm using the unbalancedForce parameter to validate the isotropic state of the specimen, as you can see in the code the unbalancedForce condition is <0.001. I just don't understand why in the result from the TriaxialStateRecorder, the value of the output Kinetic Energy (kineticE) at that Iteration (the Iteration that the unbalancedForce is <0.001, or I can say the unbalancedForce meets the right condition) is about 2000, I think it should be a small value.

@Bruno:
You sir mentioned the strain rate of the triax.goal2=-rate is for the deviatoric loading process, but what I'm asking is the isotropic compression process, this process came before the deviatoric loading. This happens at the end of the process APPLYING CONFINING PRESSURE in the code (you can blame me for unclear explanation though).
And I don't know about the trick of calling elasticEnergy, thanks a bunch.

Well I will verify my code again and check the elastic energy, and I can see the reason.
Thanks a lot for your help.

Revision history for this message
Hien Nguyen (giahien) said :
#7

Thanks Bruno Chareyre, that solved my question.