I need to simulate uniaxial compaction
Hello all,
As a part of a trixal test with my own implemented model in YADE, I need to compact my sample in the vertical direction to reach to a target void ratio. Dimensions of the sample are 3.5*3.5mm*7.1mm and it will be confined in six frictionless walls. The method of compaction is UCM and the sample will be compacted in 5 layers. As I am going to produce 100000 particles (based on a PSD), I may assume that each layer has 2000 spheres in it. Here is the sequence of compacting:
1- First layer is deposited and then compacted to a target void ratio of 0.73.
2- After depositing the second layer on top of the first layer, both layers will be compacted to reach a target void ratio of 0.71.
3- After depositing the third layer on top of the second layer, all three layers will be compacted to reach a target void ratio of 0.69.
4- After depositing the fourth layer on top of the third layer, all four layers will be compacted to reach a target void ratio of 0.67.
5- After depositing the fifth layer on top of the fourth layer, all five layers will be compacted to reach a target void ratio of 0.65.
This 0.65 is the target void ratio for the whole assembly.
After reaching to the assembly target ratio (0.65), I need to move the top wall to produce a pressure equal to 50 kPa on top of the sample. The rest of the simulation related to design alternations for effective model parameters, applying confining pressure and finally deviatoric stress. I am wondering if someone has the experience of modelling such phenomenon and share with me their scripts or guide me through the simulation. Any helps are highly appreciated.
Thanks so much,
Nima
Question information
- Language:
- English Edit question
- Status:
- Expired
- For:
- Yade Edit question
- Assignee:
- No assignee Edit question
- Last query:
- Last reply:
Revision history for this message
|
#1 |
In the name of God
Hi Nima
If you are familiar with triaxialStressC
compaction can be applied with a plate.
Regards
Mohsen
Revision history for this message
|
#2 |
Hi Mohsen,
Thanks so much. Have you done this before? if yes, would you please share this part of the code with me if possible? I basically don't know why we need to use triaxialStressC
first
and then apply the vertical pressure on top of a rigid plate to compact the layer. If required I can send you my script to take a look and modify.
Thanks sincerely for your kind attention.
Nima
On Thursday, October 5, 2017, 6:28:02 AM PDT, mohsen <email address hidden> wrote:
Your question #658905 on Yade changed:
https:/
Status: Open => Answered
mohsen proposed the following answer:
In the name of God
Hi Nima
If you are familiar with triaxialStressC
compaction can be applied with a plate.
Regards
Mohsen
--
If this answers your question, please go to the following page to let us
know that it is solved:
https:/
If you still need help, you can reply to this email or go to the
following page to enter your feedback:
https:/
You received this question notification because you asked the question.
Revision history for this message
|
#3 |
i have not done exactly the same thing, but you can generate your sample in a box (look at Oedometer example in tutorial) layer by layer and then save and load the grains (or grain positions and diameters) to do a triaxial shearing; so basically triaxial engine is not the only way!
Note that by deactivating the triaxial walls, they would not have any movement:
https:/
Regards
Mohsen
Revision history for this message
|
#4 |
Hi Mohsen,
Thanks again for your hint. Do you mean I need to have two distinct scripts if I want to follow the instructions like in odeometer test? I don't need an exact script for what I am doing, even if you have an approximate solution (script) regarding deactivating walls that would be enough for me. Another critical question is about how recognizing the surface of previous layers. I mean, I am compacting layers based on the geometry before compaction. How we can enforce the code to understand the new position of layers (top surface of layers will be lower after compaction but I am generating the next layer exactly from the original height of top surface of previous layer (before compaction)). Is there any solution?
Sincerely,
Nima On Thursday, October 5, 2017, 8:17:34 PM PDT, mohsen <email address hidden> wrote:
Your question #658905 on Yade changed:
https:/
Status: Open => Answered
mohsen proposed the following answer:
i have not done exactly the same thing, but you can generate your sample
in a box (look at Oedometer example in tutorial) layer by layer and
then save and load the grains (or grain positions and diameters) to do a
triaxial shearing; so basically triaxial engine is not the only way!
Note that by deactivating the triaxial walls, they would not have any movement:
https:/
Regards
Mohsen
--
If this answers your question, please go to the following page to let us
know that it is solved:
https:/
If you still need help, you can reply to this email or go to the
following page to enter your feedback:
https:/
You received this question notification because you asked the question.
Revision history for this message
|
#5 |
>>Thanks again for your hint. Do you mean I need to have two distinct scripts if I want to follow the instructions like in odeometer test?
Nima If you follow this, you need to scripts. the first one is for sample generation and compaction; and the second one for shearing. i do not have any script regarding this approach.
>> I don't need an exact script for what I am doing, even if you have an approximate solution (script) regarding deactivating walls that would be enough for me.
You can easily deactivates walls:
wall_front_
there are 6 walls which in your case all of them should be deactivate. you may define a plate for compaction. After compaction of each layer you may move or delete the plate and then you can generate again the next layer and compact and so on
>Another critical question is about how recognizing the surface of previous layers. I mean, I am compacting layers based on the geometry before compaction. How we can enforce the code to understand the new position of layers (top surface of layers will be lower after compaction but I am generating the next layer exactly from the original height of top surface of previous layer (before compaction)). Is there any solution?
You easily can distinguish the new position of the recent layer that has been just compacted:
MaxZ=max(
MaxZ is the coordination of the grain with maximum height (Note that Z is defined as the axis which grain are compacted in).
Regards
Mohsen
Revision history for this message
|
#6 |
Thanks so much Mohsen,
Do you know how I can stop the plate (if I follow the Odeometric approach ) when I reach to a specific porosity. I don’t use triaxialStressC
If we resolve this, I need to know how to save and load the final position in my main triaxial script.
Is it possible to compact layers by triaxial goal in one direction while all other walls are deactivated?
Sincerely,
Nima
> On Oct 8, 2017, at 5:28 AM, mohsen <email address hidden> wrote:
>
> Your question #658905 on Yade changed:
> https:/
>
> Status: Open => Answered
>
> mohsen proposed the following answer:
>>> Thanks again for your hint. Do you mean I need to have two distinct
> scripts if I want to follow the instructions like in odeometer test?
>
> Nima If you follow this, you need to scripts. the first one is for
> sample generation and compaction; and the second one for shearing. i do
> not have any script regarding this approach.
>
>>> I don't need an exact script for what I am doing, even if you have
> an approximate solution (script) regarding deactivating walls that would
> be enough for me.
>
> You can easily deactivates walls:
>
> wall_front_
>
> there are 6 walls which in your case all of them should be deactivate.
> you may define a plate for compaction. After compaction of each layer
> you may move or delete the plate and then you can generate again the
> next layer and compact and so on
>
>
>> Another critical question is about how recognizing the surface of previous layers. I mean, I am compacting layers based on the geometry before compaction. How we can enforce the code to understand the new position of layers (top surface of layers will be lower after compaction but I am generating the next layer exactly from the original height of top surface of previous layer (before compaction)). Is there any solution?
>
> You easily can distinguish the new position of the recent layer that has
> been just compacted:
>
> MaxZ=max(
> MaxZ is the coordination of the grain with maximum height (Note that Z is defined as the axis which grain are compacted in).
>
> Regards
> Mohsen
>
> --
> If this answers your question, please go to the following page to let us
> know that it is solved:
> https:/
>
> If you still need help, you can reply to this email or go to the
> following page to enter your feedback:
> https:/
>
> You received this question notification because you asked the question.
Revision history for this message
|
#7 |
>>Do you know how I can stop the plate (if I follow the Odeometric approach ) when I reach to a specific porosity. I don’t use triaxialStressC
you can use:
if Por_osity<
Be careful you should define mn and mx for each layer specifically. maxz would help to define mx:
>>If we resolve this, I need to know how to save and load the final position in my main triaxial script:
Saving:
# creating a list with position and radius of particles
ParticlePos=[]
for b in O.bodies:
if isinstance(
#saving the position and radius of particles
with open(str(
pickle.
Nw Then you have a text file with position and radius of particles
Loading:
ParticlePos=[]
with open("ParticleP
ParticlePos
Generating spheres:
while i+1<len(
# here you can optomize your grid network
i=i+1
c,r=
s = utils.sphere(
O.bodies.
>>Is it possible to compact layers by triaxial goal in one direction while all other walls are deactivated?:
I think defining a plate is easier since you need to compact several layers. But you can compact the total specimen by deactivating all of wall except the desired one.
Mohsen
Revision history for this message
|
#8 |
Hi Mohsen,
Thanks sincerely for your hint. I tried to implement what you said for odeometric-like approach with no success. I'm bringing this part of my code. If possible please take a look to see if you can fix it.
from yade.pack import *from yade import utilsfrom yade import exportfrom yade import plotn_s = 2000n_band = 26# For now I'm using Sobieski's PSD. I need to change it to my own PSD latertargetPoro
i = 0while i < n_band: psdSizes[
#If the bed volume is defined, then the average diameter of particles (when the target porosity is reached) is the same like in the measurement#
mn = Vector3(0,0,0)mx = Vector3(l,l,h/5)
O.materials.
def checkUnbalanced(): # at the very start, unbalanced force can be low as there is only few contacts, but it does not mean the packing is stable if O.iter<5000: return # the rest will be run only if unbalanced is < .1 (stabilized packing) if unbalancedForce
Thanks so much,
Nima
On Tuesday, October 10, 2017, 1:04:19 AM CDT, mohsen <email address hidden> wrote:
Your question #658905 on Yade changed:
https:/
Status: Open => Answered
mohsen proposed the following answer:
>>Do you know how I can stop the plate (if I follow the Odeometric
approach ) when I reach to a specific porosity. I don’t use
triaxialStressC
can’t stop the plate by target porosity criterion.
you can use:
if Por_osity<
Be careful you should define mn and mx for each layer specifically. maxz would help to define mx:
>>If we resolve this, I need to know how to save and load the final position in my main triaxial script:
Saving:
# creating a list with position and radius of particles
ParticlePos=[]
for b in O.bodies:
if isinstance(
#saving the position and radius of particles
with open(str(
pickle.
Nw Then you have a text file with position and radius of particles
Loading:
ParticlePos=[]
with open("ParticleP
ParticlePos
Generating spheres:
while i+1<len(
# here you can optomize your grid network
i=i+1
c,r=
s = utils.sphere(
O.bodies.
>>Is it possible to compact layers by triaxial goal in one direction while all other walls are deactivated?:
I think defining a plate is easier since you need to compact several layers. But you can compact the total specimen by deactivating all of wall except the desired one.
Mohsen
--
If this answers your question, please go to the following page to let us
know that it is solved:
https:/
If you still need help, you can reply to this email or go to the
following page to enter your feedback:
https:/
You received this question notification because you asked the question.
Revision history for this message
|
#9 |
Sorry mohsen. Attached please find the code. Please ignore the one I sent you in the last email.
Thanks
Nima
On Tuesday, October 17, 2017, 5:10:23 PM CDT, Nima Goudarzi <email address hidden> wrote:
Your question #658905 on Yade changed:
https:/
Status: Answered => Open
You are still having a problem:
Hi Mohsen,
Thanks sincerely for your hint. I tried to implement what you said for odeometric-like approach with no success. I'm bringing this part of my code. If possible please take a look to see if you can fix it.
from yade.pack import *from yade import utilsfrom yade import exportfrom yade import plotn_s = 2000n_band = 26# For now I'm using Sobieski's PSD. I need to change it to my own PSD latertargetPoro
i = 0while i < n_band: psdSizes[
#If the bed volume is defined, then the average diameter of particles (when the target porosity is reached) is the same like in the measurement#
mn = Vector3(0,0,0)mx = Vector3(l,l,h/5)
O.materials.
def checkUnbalanced(): # at the very start, unbalanced force can be low as there is only few contacts, but it does not mean the packing is stable if O.iter<5000: return # the rest will be run only if unbalanced is < .1 (stabilized packing) if unbalancedForce
Thanks so much,
Nima
On Tuesday, October 10, 2017, 1:04:19 AM CDT, mohsen <email address hidden> wrote:
Your question #658905 on Yade changed:
https:/
Status: Open => Answered
mohsen proposed the following answer:
>>Do you know how I can stop the plate (if I follow the Odeometric
approach ) when I reach to a specific porosity. I don’t use
triaxialStressC
can’t stop the plate by target porosity criterion.
you can use:
if Por_osity<
Be careful you should define mn and mx for each layer specifically. maxz would help to define mx:
>>If we resolve this, I need to know how to save and load the final position in my main triaxial script:
Saving:
# creating a list with position and radius of particles
ParticlePos=[]
for b in O.bodies:
if isinstance(
#saving the position and radius of particles
with open(str(
pickle.
Nw Then you have a text file with position and radius of particles
Loading:
ParticlePos=[]
with open("ParticleP
ParticlePos
Generating spheres:
while i+1<len(
# here you can optomize your grid network
i=i+1
c,r=
s = utils.sphere(
O.bodies.
>>Is it possible to compact layers by triaxial goal in one direction while all other walls are deactivated?:
I think defining a plate is easier since you need to compact several layers. But you can compact the total specimen by deactivating all of wall except the desired one.
Mohsen
--
If this answers your question, please go to the following page to let us
know that it is solved:
https:/
If you still need help, you can reply to this email or go to the
following page to enter your feedback:
https:/
You received this question notification because you asked the question.
You received this question notification because you asked the question.
Revision history for this message
|
#10 |
This question was expired because it remained in the 'Open' state without activity for the last 15 days.