How to freeze the particles in the imported dense granular packing
Hi all,
This question follows my previous one [1].
After successfully imported a dense packing with a specific range of size, I would like to further isotropically compress the cropped dense packing with additional two boundary walls.
When the isotropic compression is running, I find that all the particles also start to move around in any direction. I don't want this to happen since I want to maintain the initial thickness of the packing and all the particle position. I can imagine the reason behind this is that there are forces stored at the grain contacts whenever it is compacted.
I've tried to use "blockDOFs" to fix the position of all the particles but in this way, the desired state of isotropic compression cannot be reached.
So my question is how do I freeze the position of all the particles without removing their original energy states and still reach the desired state of isotropic compression?
Thanks in advance!
[1] https:/
Below are my two MWEs for packing generation and imported dense packing.
#######
from yade import pack,plot,export
sp=pack.
O.periodic=True
a=5
b=5
c=5
RADIUS_
OUT='mypacking'
length=
height=
width=c*
thickness=
### Particle size distribution
psdSizes=
psdCumm=[0,0.5,1]
### friction angles
spFRIC=0.5
### boundary conditions
PI=1.e5
#####Mair and Hazzard (2007)'s microproperties
O.materials.
O.cell.
sp.makeCloud(
O.bodies.
O.engines=[
ForceResetter()
,InsertionSort
,InteractionLoop(
[Ig2_
[Ip2_
[Law2_
)
,GlobalStiffne
,PeriTriaxCont
,NewtonIntegra
]
def triaxDone():
triax.dead=True
O.pause()
O.run(10000000,1)
export.
#######
from yade import pack,plot,
sp=pack.
O.periodic=True
a=2.5
b=2.5
c=2.5
RADIUS_
OUT='mypacking'
length=
height=
width=c*
thickness=
# Old packing size for spheres generation
a_old=5
b_old=5
c_old=5
length_
height_
width_old=
thickness_
### Packing ratio
packingRatio = a / a_old
### Particle size distribution
psdSizes=
psdCumm=[0,0.5,1]
# friction angles
wallFRIC=90
spFRIC=0.5
# boundary conditions
PI=1.e5
### Material properties
O.materials.
O.materials.
O.cell.
upBox = utils.box(
lowBox = utils.box(
O.bodies.
### Import isotropic-
packing = ymport.
### Filter only desired packing
def sphereWanted(b):
x,y,z = b.state.pos
return x >= 0 and x <= packingRatio*
packing = [b for b in packing if sphereWanted(b)]
O.bodies.
### Fix particle position
#for b in O.bodies:
# if isinstance(
# b.state.
# b.state.dynamics = False
# b.state.vel = Vector3(0,0,0)
effCellVol=
volRatio=
O.engines=[
ForceResetter()
,InsertionSort
,InteractionLoop(
[Ig2_
[Ip2_
[Law2_
)
,GlobalStiffne
,PeriTriaxCont
,NewtonIntegra
]
def triaxDone():
triax.dead=True
O.pause()
O.run(100000000,1)
print ('Normal stress (platen) = ',O.forces.
print ('Normal stress (contacts) = ',getStress(
#######
Cheers,
Chien-Cheng
Question information
- Language:
- English Edit question
- Status:
- Answered
- For:
- Yade Edit question
- Assignee:
- No assignee Edit question
- Last query:
- Last reply:
Can you help with this problem?
Provide an answer of your own, or ask Chien-Cheng Hung for more information if necessary.