← Back to team overview

yade-users team mailing list archive

[Question #683934]: Bond broken and non movement of cohesive particles

 

New question #683934 on Yade:
https://answers.launchpad.net/yade/+question/683934

Hi all,

Hope you all are doing well. I have a question with respect to the CohFric model. I am trying to implement a shearing mechanism between two body masses which are of different material properties. It is kind of like a direct shear test. The setup consists of two boxes - top and bottom. The material is contained in them.  I created the particles through radial expansion, used a gts surface predicate to cut them appropriately and then imported them in another file with different material properties. 

My yade version is Yade 2018.02b-142067caa7~xenial

Issue 1:

I tried to do the shearing through a translation engine after applying a cohesive bond between the particles of the same material. But when I apply a force on the upper box , the particles inside should move as well with the box. But only the box moves and the cohesive network of particles just stay there without any movement. Can anyone please tell me where I went wrong with the code?

Issue 2:

The particles in the lower box tend to break their cohesive bond after a particular iteration. I am unable to comprehend the reason why this is happening. 

I have attached the code below for your reference. Since I have created the particles separately using a gts predicate, I have attached the drive link for the particle import here as well. 

https://drive.google.com/drive/folders/1bCS_w917aP0Tr_Jfy6YfN20c9W0cdJYM?usp=sharing

Note: Kindly download the particle file using the download link above to impor the particles.
from yade import pack, qt, export, ymport, plot

#MATERIAL SPECIFICATION:
rock_material=CohFrictMat(
    young=6e10 ,poisson=0.21 ,density=3400 ,frictionAngle=radians(45) ,normalCohesion=1e20,shearCohesion=1e8 ,isCohesive=True, label='rock_mat')
mat1=O.materials.append(rock_material)

concrete_material=CohFrictMat(
    young=1e10 ,poisson=0.25 ,density=1400 ,frictionAngle=radians(30) ,normalCohesion=1e20,shearCohesion=1e6 ,isCohesive=True, label='concrete_mat')
mat2=O.materials.append(concrete_material)

O.materials.append(FrictMat(frictionAngle=0,density=0,label='walls'))

#UPPER PARTICLE IMPORT:
upbox_particles=ymport.text('Upperbox_particles-22.5.txt',material='rock_mat', color=(1,0,0)) #Arguement passed to utils.sphere
O.bodies.append(upbox_particles)

shiftlist=[]
for i in O.bodies:
    if (i.shape, Sphere):
        shiftlist.append(i.id)

shiftBodies(shiftlist, (0,0.005,0))

#LOWER PARTICLE IMPORT:
lowbox_particles=ymport.text('Lowerbox_particles-22.5.txt',material='concrete_mat', color=(0,1,0)) #Arguement passed to utils.sphere
O.bodies.append(lowbox_particles)



#GEOMETRY DESIGN:

#Creating the upper box
U_box=geom.facetBox((.13,.11,0.09),(.08,.02,.04),wallMask=51)
O.bodies.append(U_box)
#Creating the lower box
L_box=geom.facetBox((.13,.07,0.09),(.08,.02,.04),wallMask=55)
O.bodies.append(L_box)

#Creating the extension for sliding plane so particles don't fall out
#Give extra 1e-3 m in Y dir. so that the two facet walls... 
#...at the shear interface do not rub against each other
U_box_extension1=geom.facetBox((.01,.111,0.09),(.04,.02,.04),wallMask=4)   
O.bodies.append(U_box_extension1)
U_box_extension2=geom.facetBox((.25,.111,0.09),(.04,.02,.04),wallMask=4)
O.bodies.append(U_box_extension2)
L_box_extension1=geom.facetBox((.01,.11,0.09),(.04,.02,.04),wallMask=4)
O.bodies.append(L_box_extension1)
L_box_extension2=geom.facetBox((.25,.11,0.09),(.04,.02,.04),wallMask=4)
O.bodies.append(L_box_extension2)

intfactor = 1.2
T_Vel=10

#SIMULATION PROCESSES:
O.engines=[
    ForceResetter(),
    InsertionSortCollider([Bo1_Sphere_Aabb(aabbEnlargeFactor=intfactor,label='bo1s'),Bo1_Facet_Aabb(),Bo1_Wall_Aabb(),Bo1_Box_Aabb()]),
    InteractionLoop(
        [Ig2_Sphere_Sphere_ScGeom6D(interactionDetectionFactor=intfactor,label='ig2s'),Ig2_Facet_Sphere_ScGeom(),Ig2_Wall_Sphere_ScGeom(),Ig2_Box_Sphere_ScGeom6D()],
        [Ip2_FrictMat_FrictMat_FrictPhys(), Ip2_CohFrictMat_CohFrictMat_CohFrictPhys(setCohesionNow=True,label="cohesiveIp",
            normalCohesion=MatchMaker(matches=((mat1,mat1,1e20),(mat2,mat2,1e20),(mat1,mat2,0))), 
            shearCohesion=MatchMaker(matches=((mat1,mat1,1e9),(mat2,mat2,1e9),(mat1,mat2,0))))],
        [Law2_ScGeom_FrictPhys_CundallStrack(), Law2_ScGeom6D_CohFrictPhys_CohesionMoment()]
    ),
    NewtonIntegrator(gravity=(0,0,0),damping=0.3),    
    GlobalStiffnessTimeStepper(active=True,timeStepUpdateInterval=1,timestepSafetyCoefficient=0.8), #using global timestep for faster simulation
    #PyRunner(command='check()',iterPeriod=10,label='runner')
]


O.step()

#for i in O.interactions:
    #i.phys.normalAdhesion = 1e9
    #i.phys.shearAdhesion =  1e3


bo1s.aabbEnlargeFactor=1
ig2s.interactionDetectionFactor=1


#Setting default material values:
rock_material.normalCohesion=1e9
concrete_material.normalCohesion=1e9

O.engines=O.engines+[PyRunner(command='updatebond()',iterPeriod=1,label='runner')]

def updatebond():
    O.engines[2].physDispatcher.functors[1].normalCohesion=MatchMaker(matches=((mat1,mat1,1e9),(mat2,mat2,1e9),(mat1,mat2,0)))
    O.engines[2].physDispatcher.functors[1].shearCohesion=MatchMaker(matches=((mat1,mat1,5e7),(mat2,mat2,1e6),(mat1,mat2,0)))
    O.engines[2].physDispatcher.functors[1].setCohesionNow = True
    O.engines[2].physDispatcher.functors[1].setCohesionOnNewContacts = True

#Checking Interactions:
print "Total number of interactions :", len(O.interactions)
 
allIntrs = []
for b in O.bodies:
    for i in b.intrs():
            allIntrs.append(i)
print 'Interactions present : ',len(allIntrs)

#Adding ids for the translation engine:
id_list=[]
for i in U_box:id_list.append(i.id) 
for i in U_box_extension1: id_list.append(i.id)
for i in U_box_extension2: id_list.append(i.id)
O.engines=O.engines+[TranslationEngine(ids=id_list,translationAxis=[1,0,0], velocity=T_Vel)]

O.saveTmp()






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