← Back to team overview

yade-users team mailing list archive

[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.