Imported spheres go through the walls
Dear all,
I find a question that is weird to me. This question is followed by my previous one [1].
I've created and saved a stress-free dense packing with a script (MWE 1) and then I load it with another script (MWE 2) and run isotropic compression.
While I was running the isotropic compression, some of the imported spheres went through the walls. To fix this problem, I've tried to decrease the timestep by setting a lower safety factor (0.8 --> 0.3) and also increase the stiffness of both particles and walls (1e8 --> 1e10). Unfortunately, both methods don't work. I have tried ever higher
So I ran another simulation (MWE 3) to check if this also happens a non-imported loose packing where I generate particles with makeCloud with identical material properties (1e8) and timestep (factor 0.8). The process of isotropic compression is successful as I expected where no particles going through the walls. For this reason, I don't think the particle penetration issue is related to stiffness or timestep.
For the imported dense packing, I imagine it's also a "loose" packing since it's stress-free and there is no overlap between particles.
Under this situation, why would I get particle penetration issue with imported dense packing?
Does someone have any idea about it? I've been struggling with this for a while...
Thanks in advance!
The MWEs are provided below.
[1] https:/
MWE 1
#######
######## Stress-free packing generation ############
#######
from yade import pack,plot,export
import numpy as np
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
### material properties
O.materials.
O.cell.
sp.makeCloud(
O.bodies.
O.engines=[
ForceResetter()
,InsertionSort
,InteractionLoop(
[Ig2_
[Ip2_
[Law2_
)
,GlobalStiffne
,PeriTriaxCont
,NewtonIntegra
]
### To achieve stress-free condition using stress control to unload the packing
def stressFree():
print("start stress-free unloading")
O.cell.
triax.
triax.
triax.
triax.
triax.
def triaxDone():
triax.dead=True
O.pause()
O.run(10000000,1)
### Check total contact stress within the system
print ('Total stress (contacts) = ',getStress(
### Reduce the radius of all particles to further make sure there is no overlap between particles
for b in range(len(
O.bodies[
O.step()
print ('Total stress (contacts) after size reduction = ',getStress(
export.
### Save the cell size
a = O.cell.size
np.save(
MWE 2
#######
######## Isotropic compression for imported dense packing ############
#######
from yade import pack,plot,
import numpy as np
sp=pack.
O.periodic=True
RADIUS_
a = np.load(
length= a[0]
height= a[1]/3
width= a[2]
thickness=
# 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 <= length and y >= height and y <= 2*height and z >= 0 and z <= width
packing = [b for b in packing if sphereWanted(b)]
O.bodies.
effCellVol=
volRatio=
O.engines=[
ForceResetter()
,InsertionSort
,InteractionLoop(
[Ig2_
[Ip2_
[Law2_
)
,GlobalStiffne
,PeriTriaxCont
,NewtonIntegra
]
def triaxDone():
triax.dead=True
O.pause()
O.step()
print ('Total stress (contacts) before isotropic compression = ',getStress(
O.run(100000000,1)
print ('Normal stress (platen) = ',O.forces.
print ('Total stress (contacts) after isotropic compression = ',getStress(
MWE3
#######
######## Isotropic compression for non-imported loose packing ############
#######
from yade import pack,plot,
import numpy as np
sp=pack.
O.periodic=True
RADIUS_
a = np.load(
length= a[0]
height= a[1]/3
width= a[2]
thickness=
sp1=pack.
### 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.
sp1.makeCloud(
sphere_id = O.bodies.
effCellVol=
volRatio=
O.engines=[
ForceResetter()
,InsertionSort
,InteractionLoop(
[Ig2_
[Ip2_
[Law2_
)
,GlobalStiffne
,PeriTriaxCont
,NewtonIntegra
]
def triaxDone():
triax.dead=True
O.pause()
print ('Total stress (contacts) before isotropic compression = ',getStress(
O.run(100000000,1)
print ('Normal stress (platen) = ',O.forces.
print ('Total stress (contacts) after isotropic compression = ',getStress(
#######
Best regards,
Chien-Cheng
Question information
- Language:
- English Edit question
- Status:
- Solved
- For:
- Yade Edit question
- Assignee:
- No assignee Edit question
- Solved by:
- Jan Stránský
- Solved:
- Last query:
- Last reply: