How to increase porosity

Asked by Leonard on 2019-09-21

Hi,
I am using example from [1] to achieve target porosity (for short, the MWE), the example works pretty well when ''targetPorosity=0.43". However, when I modify the 'targetPorosity' from 0.43 to 0.7 (because I'd like to generate a loose sand sample), and after the "Compacted state saved", I use "triax.porosity" to check the porosity of the sample, it is only 0.446.
I tried some ways such as changing the number of spheres, but it seems like the largest porosity they can achieve is around 0.45.
Here is the MWE, it may take 30 seconds to run it on Yade 2018.02b, ubuntu 18.04.
#####
from yade import pack, plot
nRead=readParamsFromTable(
 num_spheres=3000,
 compFricDegree = 30,
 key='_triax_base_',
 unknownOk=True
)
from yade.params import table

num_spheres=table.num_spheres
key=table.key
targetPorosity = 0.7 ### 0.43 works well
compFricDegree = table.compFricDegree
finalFricDegree = 30
rate=-0.001
damp=0.2
stabilityThreshold=0.001
young=5e7

mn,mx=Vector3(0,0,0),Vector3(0.7,1.4,0.7)

O.materials.append(FrictMat(young=young,poisson=0.5,frictionAngle=radians(compFricDegree),density=2600,label='spheres'))
O.materials.append(FrictMat(young=young,poisson=0.5,frictionAngle=0,density=0,label='walls'))
walls=aabbWalls([mn,mx],thickness=0,material='walls')
wallIds=O.bodies.append(walls)
sp=pack.SpherePack()
sp.makeCloud(mn,mx,-1,0.3333,num_spheres,False, 0.95,seed=1)
O.bodies.append([sphere(center,rad,material='spheres') for center,rad in sp])
Gl1_Sphere.quality=3

triax=TriaxialStressController(

 maxMultiplier=1.004,
 finalMaxMultiplier=1.0004,
 thickness = 0,
 stressMask = 7,
 internalCompaction=True,
)

newton=NewtonIntegrator(damping=damp)

O.engines=[
 ForceResetter(),
 InsertionSortCollider([Bo1_Sphere_Aabb(),Bo1_Box_Aabb()]),
 InteractionLoop(
  [Ig2_Sphere_Sphere_ScGeom(),Ig2_Box_Sphere_ScGeom()],
  [Ip2_FrictMat_FrictMat_FrictPhys()],
  [Law2_ScGeom_FrictPhys_CundallStrack()]
 ),
 GlobalStiffnessTimeStepper(active=1,timeStepUpdateInterval=100,timestepSafetyCoefficient=0.8),
 triax,
 TriaxialStateRecorder(iterPeriod=100,file='WallStresses'+table.key),
 newton
]

Gl1_Sphere.stripes=0
if nRead==0: yade.qt.Controller(), yade.qt.View()

triax.goal1=triax.goal2=triax.goal3=-10000
while 1:
  O.run(1000, True)
  unb=unbalancedForce()
  print 'unbF:',unb,' meanStress: ',-triax.meanStress,'top:',-triax.stress(triax.wall_top_id)[1]
  if unb<stabilityThreshold and abs(-10000-triax.meanStress)/10000<0.001:
 break

print "### Isotropic state saved ###"

import sys
while triax.porosity>targetPorosity:
 compFricDegree = 0.95*compFricDegree
 setContactFriction(radians(compFricDegree))
 print "\r Friction: ",compFricDegree," porosity:",triax.porosity,
 sys.stdout.flush()
 O.run(500,1)

print "### Compacted state saved ###"
###############
I think [1] is a very good example to decrease porosity, and I tried a stupid way as inversing it like:
####
while triax.porosity<targetPorosity:
 compFricDegree = 1.05*compFricDegree
 setContactFriction(radians(compFricDegree))
 print "\r Friction: ",compFricDegree," porosity:",triax.porosity,
 sys.stdout.flush()
 O.run(500,1)
####
And it failed, the porosity hardly changes. Is there any way to reach target porosity if current porosity < targetPorosity?

Thanks in advance,
Leonard

[1]https://github.com/yade/trunk/blob/master/examples/triax-tutorial/script-session1.py

Question information

Language:
English Edit question
Status:
Solved
For:
Yade Edit question
Assignee:
No assignee Edit question
Solved by:
Robert Caulk
Solved:
2019-09-24
Last query:
2019-09-24
Last reply:
2019-09-24
Robert Caulk (rcaulk) said : #1

It is not possible with the method you've chosen. Hint: exerting pressure on boundaries requires spheres to be touching.

Leonard (z2521899293) said : #2

Hi Robert,
Thanks for your answer.
If I understand correctly about your hint, it is related to the confining pressure, so I changed the confining pressure (e.g. from 10kPa to30kpa, and 100kPa), but the porosity after compacting is still around 0.44.
Could you please give more details about the hint?

Leonard

Robert Caulk (rcaulk) said : #3

Consider the geometry of the packing when you constrain the system so that the spheres must touch one another (i.e. adding confining pressure). Given this constraint, do you believe there should be upper and lower limits to the random dense packing porosity? I leave the rest to you :-)

Leonard (z2521899293) said : #4

Hi Robert,
I still don't have a cleat understanding about this due to my limited knowledge about DEM.
Anyway, many thanks for your reply.

Cheers,
Leonard

Robert Caulk (rcaulk) said : #6

This has nothing to do with DEM :-)

Leonard (z2521899293) said : #7

Thanks Robert Caulk, that solved my question.