← 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

    Status: Answered => Open

weijy is still having a problem:
Thank Bruno Chareyre and Jerome! 
When I said "strength" in #4 I actually meant "force", sorry for the language mistake.

I tried to use this JCMpm model. But there is still something wrong. Firstly the isotropic state is reached by internal compaction. Then the cohesiveTresholdIteration is set two steps ahead of current step, so that new contact could be set cohesive. Meanwhile intR is set to 1.5. But when cohesive contact is checked at next step, it turn out that:
1. Only new contacts(created by sphere enlarge factor) is set cohesive. Other contacts are still frictional. Is there a way to set all interaction between particles cohesive?
2. When intR is set to 1.5, the coordination number remains to be about 9.8(almost the same with intr=1.25). Expected coord number should be 13. How might this be explained?

More about question 1. I tried to set the cohesiveTresholdIteration a
big number(like 100000) to ensure that this number exceeds the
compaction-finish timestep, then reset it as soon as compaction process
finish. But in this way, some cohesive contacts break during compaction
process. So it might be best if all contacts can be set within one
single timestep.

Here is the code. Many thanks!

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

num_intr = 0

O.materials.append(JCFpmMat(young=5e6, poisson=0.333,frictionAngle=0,cohesion = 4500, tensileStrength = 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_ScGeom(label = 'ig2ss'),Ig2_Box_Sphere_ScGeom()],
		[Ip2_FrictMat_FrictMat_FrictPhys(),Ip2_JCFpmMat_JCFpmMat_JCFpmPhys(label = 'ip2jj')],
		[Law2_ScGeom_FrictPhys_CundallStrack(),Law2_ScGeom_JCFpmPhys_JointedCohesiveFrictionalPM()]
	),
	GlobalStiffnessTimeStepper(active=1,timeStepUpdateInterval=100,timestepSafetyCoefficient=0.8),
    triax,
    NewtonIntegrator(damping=0.2),
    PyRunner(command = 'isotropic_compaction()', iterPeriod = 1000, label = 'checker'),
]

#############################
#######Key Part Below############
#############################
def isotropic_compaction():
    global num_intr
    if unbalancedForce()<0.01 and abs(-1e4-triax.meanStress)/1e4<0.001:
        for i in O.interactions:
            if isinstance(O.bodies[i.id1].shape,Sphere) and isinstance(O.bodies[i.id2].shape,Sphere):
                num_intr += 1
        triax.internalCompaction=False
        print '*************************************************'
        print 'current step is ',O.iter  
        print 'total interactions before reset intR is ', num_intr 
        ip2jj.cohesiveTresholdIteration = O.iter + 2        
        bo1s.aabbEnlargeFactor = 1.5
        ig2ss.interactionDetectionFactor = 1.5       
        num_intr = 0
        checker.iterPeriod = 1
        checker.command = 'set_interaction()'
        O.pause()
        
def set_interaction():
    O.pause()
    print '************************************************'
    print 'current step is ',O.iter
    bo1s.aabbEnlargeFactor = -1
    ig2ss.interactionDetectionFactor = -1     
    print 'coordn = ',utils.avgNumInteractions()
    num_intr=0
    num_coh=0
    for i in O.interactions:
        if isinstance(O.bodies[i.id1].shape,Sphere) and isinstance(O.bodies[i.id2].shape,Sphere):
            num_intr += 1
            if i.phys.isCohesive: 
                num_coh +=1   
    print 'num_coh = ', num_coh
    print 'total interactions after set intR is ', num_intr

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