yade-users team mailing list archive
-
yade-users team
-
Mailing list archive
-
Message #19670
[Question #680689]: time for reaching a static equilibrium
New question #680689 on Yade:
https://answers.launchpad.net/yade/+question/680689
Hi,
I want to ask a question I have encountered, every time I change box size, it becomes very difficult to reach equilibrium. for example,mn,mx=Vector3(0,0,0),Vector3(1e-3,1e-3,1e-3) is Ok, but I change it to mn,mx=Vector3(0,0,0),Vector3(1e-2,1e-2,1e-2), it will take a long time or hard to reach equilibrium.
MWE:
from yade import pack
import math
nRead=utils.readParamsFromTable(
young = 0.858e9,
poisson = 0.3,
compFricDegree = 8,
finalFricDegree = 30.0,
num_spheres = 10000,
#young_wall=3.0e7
confiningS = 100e3,
isoconfining = 5e3,
AxialStrainLimit = 0.3,
rate = -0.02,
damp = 0.2,
unknownOk = True
)
from yade.params import table
mn,mx=Vector3(0,0,0),Vector3(1e-2,1e-2,1e-2) # corners of the initial packing
young = table.young
poisson = table.poisson
compFricDegree = table.compFricDegree
finalFricDegree = table.finalFricDegree
num_spheres = table.num_spheres
confiningS = table.confiningS
isoconfining = table.isoconfining
damp = table.damp
rate = table.rate
AxialStrainLimit=table.AxialStrainLimit
key='_cf-'+str(compFricDegree)+'_ff-'+str(finalFricDegree)+'_Y-'+str(young/1e6)+'_p-'+str(poisson)+'_S-'+str(confiningS/1000)
cd = 1 # cd=1 - consolidate drained cd=0- undrained
porosity = 0.72
stabilityThreshold = 0.001
thick = 0.01
d_limit = 0.15 # (d_limit/dmin = 0.25)
roll_stiff = 0.01
targetPorosity = 0.43
O.materials.append(FrictMat(
young=young,
poisson=poisson,
density=2650,
frictionAngle=radians(compFricDegree),
label='spheres')
)
O.materials.append(FrictMat(
young=young/10,
poisson=poisson,
frictionAngle=0,
density=0,
label='walls')
)
# create walls around the packing
walls=aabbWalls([mn,mx],thickness=0,material='walls')
wallIds=O.bodies.append(walls)
sp=pack.SpherePack()
sp.makeCloud(mn,mx,-1,1.0/7.0,num_spheres,False,porosity,seed=1)# porosity=0.65 is the default value
O.bodies.append([sphere(center,rad,material='spheres') for center,rad in sp])
triax=TriaxialStressController(
## TriaxialStressController will be used to control stress and strain. It controls particles size and plates positions. (Documention p290)
maxMultiplier=1.001, # spheres growing factor (fast growth)
finalMaxMultiplier=1.00001, # spheres growing factor (slow growth)
thickness = thick,
stressMask = 7, # 1*1 + 1*2 + 1*3 = 7 means x,y,z are on
internalCompaction=True, # if true the confining pressure is generated by growing particles.
)
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_MindlinPhys()],
[Law2_ScGeom_MindlinPhys_Mindlin()]
),
GlobalStiffnessTimeStepper(active=1,timeStepUpdateInterval=100,timestepSafetyCoefficient=0.8),
triax,
TriaxialStateRecorder(iterPeriod=1000,file='TriaxialRecorder'+key,truncate=1),
newton,
]
triax.goal1=triax.goal2=triax.goal3=-isoconfining #(5kpa)
timing.reset()
while 1:
O.run(1000, True)
unb=unbalancedForce()
print 'unbalanced force:',unb,' mean stress: ',triax.meanStress
if unb < stabilityThreshold and abs(-isoconfining-triax.meanStress)/isoconfining<0.001:
break
O.save('InitialState'+key+'.yade.gz')
print "### Initial state saved ###"
Thank you in advance!
--
You received this question notification because your team yade-users is
an answer contact for Yade.