← Back to team overview

yade-users team mailing list archive

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

 

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

Description changed to:
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.