← Back to team overview

yade-users team mailing list archive

Re: [Question #404135]: intRadius(aabbenlargefactor) doesn't work

 

Question #404135 on Yade changed:
https://answers.launchpad.net/yade/+question/404135

Description changed to:
Hi All,

I am a beginner and have been trying to remodel the triaxial compression process  in below paper:
[1] Scholt E S L and Donz E F E D E. 2013. A DEM model for soft and hard rocks: Role of grain interlocking on strength [J]. J. Mech. Phys. Solids.,61(2): 352-369.
In chapter 2.2 interaction range is introduced. 
Relavent contents can be found in Yade documentation: 
https://yade-dem.org/doc/user.html#scene-construction
(user's manual--->scene construction-->creating interactions)

I tried to run a simpler triaxial test using CohFrictMat as a first
step. There are 500 particles, and parameters goes as follows: young =
5e6, normalcohesion = shearcohesion = 4500, confining pressure = 10kPa.
Particles are packed randomly in a 0.15*0.15*0.3 box. Confining pressure
is reached by internal compaction.

After a stable status is reached, count the number of all interactions. Then the aabbenlargefunctor and interactiondetection factor is altered to 1.25(or 1.5). Next step, count the total number of interactions again and the two factors are set to 1. 
This method didn't work correctly:

1. Whatever the two factor is, 1.25 or 1.5, total interactions before and after alteration show little difference. 
2. Besides, after the alteration, the utils.avgNumInteractions() is printed instantly and always turn out to be less than 7. According to [1], this number should be around 10 when intRaius is 1.25, and around 14 when intRadius is 1.5.
3. Stress and strain data is recorded, stress-strain curve show no obvious difference under different intRadius.

The code is like this:

*********************************************************************
from yade import pack

num_intr = 0
O.materials.append(CohFrictMat(young=5e6, poisson=0.333,frictionAngle=0,normalCohesion = 4500, shearCohesion = 4500, density=2600, label='spheres'))
O.materials.append(FrictMat(young=5e6, poisson=0.333,frictionAngle=0,density=0,label='walls'))
O.bodies.append(aabbWalls([Vector3(0,0,0),Vector3(0.15,0.3,0.15)],thickness=0,material='walls'))
sp = pack.SpherePack()
sp.makeCloud(Vector3(0,0,0),Vector3(0.15,0.3,0.15),-1,0.3333,500)
O.bodies.append([sphere(center,rad,material='spheres') for center,rad in sp])
triax=TriaxialStressController(maxMultiplier=1.+4e-3,finalMaxMultiplier=1.+1e-4,stressMask = 7,internalCompaction=True)
triax.goal1=triax.goal2=triax.goal3=-1e4

O.engines=[
    ForceResetter(),
	InsertionSortCollider([Bo1_Sphere_Aabb(label = 'bo1s'),Bo1_Box_Aabb()]),
	InteractionLoop(
		[Ig2_Sphere_Sphere_ScGeom6D(label = 'ig2ss'),Ig2_Box_Sphere_ScGeom()],
		[Ip2_FrictMat_FrictMat_FrictPhys(),Ip2_CohFrictMat_CohFrictMat_CohFrictPhys(label = 'ip2cc')],
		[Law2_ScGeom_FrictPhys_CundallStrack(),Law2_ScGeom6D_CohFrictPhys_CohesionMoment()]
	),
	GlobalStiffnessTimeStepper(active=1,timeStepUpdateInterval=100,timestepSafetyCoefficient=0.8),
    triax,
    NewtonIntegrator(damping=0.2),
    PyRunner(command = 'isotropic_compaction()', iterPeriod = 1000, label = 'checker'),
]

def isotropic_compaction():
    global num_intr
    if unbalancedForce()<0.01 and abs(-1e4-triax.meanStress)/1e4<0.001:
        for i in O.interactions:
            num_intr = num_intr + 1
        print '*************************************************'
        print 'total interactions before reset intR is ', num_intr
        print 'current step is ',O.iter               
        bo1s.aabbEnlargeFactor = 1.25
        ig2ss.interactionDetectionFactor = 1.25
        ip2cc.setCohesionNow = True        
        num_intr = 0
        checker.iterPeriod = 1
        checker.command = 'set_interaction()'
        O.pause()
        
def set_interaction():
    global num_intr
    bo1s.aabbEnlargeFactor = -1
    ig2ss.interactionDetectionFactor = -1
    for i in O.interactions:
        num_intr = num_intr + 1
    print '************************************************'
    print 'current step is ',O.iter
    print 'coordn = ', utils.avgNumInteractions()
    print 'total interactions after reset intR is ', num_intr    
    num_intr = 0
    O.pause()

-- 
You received this question notification because your team yade-users is
an answer contact for Yade.