Bond broken and non movement of cohesive particles

Asked by Akm on 2019-09-15

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()

Question information

Language:
English Edit question
Status:
Expired
For:
Yade Edit question
Assignee:
No assignee Edit question
Last query:
2019-09-18
Last reply:
2019-10-03
Jan Stránský (honzik) said : #1

Hello,

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

Note: Kindly make your question self-contained [1] (also see below)

Try to make a MWE [1], I think something like 8 + 8 predefined particles for lower and upper part should be enough to illustrate the problem.
Often you can find the problem yourself creating such MWE.

cheers
Jan

[1] https://www.yade-dem.org/wiki/Howtoask, section "Please, no external links!"

Akm (arunkumarmurali) said : #2

Hi Jan, Thanks for the call. But if I do not use the gts surface, then the essence of the question will be lost. I will try to upload an MWE though.

Jan Stránský (honzik) said : #3

Ok, maybe not 8+8, maybe 60+60..
A good approach could be to preserve the geometry and just use larger particles. Then even you can paste these a few lines of saved .txt files inside one question.
Thanks
Jan

Launchpad Janitor (janitor) said : #4

This question was expired because it remained in the 'Open' state without activity for the last 15 days.