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

Dear Dr. Robert Caulk,

I'm trying to model three-point bending test in following paper.

"Modeling acoustic emissions inheterogeneous rocks duringtensile fracture with 
the DiscreteElement Method"

https://opengeomechanics.centre-mersenne.org/article/OGEO_2020__2__A2_0.pdf

After applying the model parameters and ran a simulation to obtained the 
results as shown in figure 7a of the paper.

The outcome is different from the reported one in the paper. I understand that 
maximum load ratio is obtained by the current load divided by the maximum load 
during the test. If I compare the vertical deflections in my simulation and the 
outcome from the paper, they are different.( at the peak load paper has 
deflection value of 0.2mm while my simulation shows 19 mm)

please see the comparison here,  
https://www.dropbox.com/sh/dzqwt14z3jljpi5/AADLoCXg-2iOMCBYXLVsPyiua?dl=0

Could you please help me to resolve this? 

I have followed following steps to model the problem

1. random dense pack algorithm is used to create the particle packing with 
radius range mentioned in the paper.

2. apply cpm material to the packing, used interaction detection factor value 
of 1.5

3. attached three facetcylinder with diameter of 14mm ( top middle one for 
applying load, remaining two at the corner of bottom to simulate the roller 
support)

please see the particle assembly and supports here, 
https://www.dropbox.com/s/5l09ujh20tz1z9b/assembly.PNG?dl=0

4. Then, constant velocity was imposed on the top middle facetcylinder   to 
apply loading.

The Minimum working example as follows,

# -*- coding: utf-8 -*-
# Code for three point bending test with crack mouth opening displacement and 
deflection
from yade import pack

############################################
###   DEFINING VARIABLES AND MATERIALS   ###
############################################

from yade import pack, plot,qt,ymport



# Damping:
damp=0.7

#Material parameters
young = 30e9
poisson = .3
frictionAngle = 0.33
sigmaT = 40e6
epsCrackOnset = 3e-4
relDuctility = 30
density = 2600
 # stress path
'''
# 3 point bending test sample preparation parameters
L= length of the sample
W= width of the sample
H= height of the sample
C=clearance from two ends(canteliver length
A= width of the crack opening
B= height of the crack opening
R=radius of the rollers/piston(radius of facet clyinder) all mm s (10^-3) scale
Length along x axis, height along y axis and width along z axis
'''

L=240e-3 #length of the sample
W=40e-3 #width of the sample
H=80e-3 #height of the sample
R=7e-3 #radius of the rollers/piston(radius of facet clyinder) all mm s (10^-3) 
scale
C=(12e-3+R)
A=3e-3
B=50e-3

psdmean=1.5e-3
rmin=1.5*psdmean
prepared=0
v=.01*10000 # applied velocity on piston

concMat=O.materials.append(CpmMat(young=young,poisson=poisson,density=density,damLaw=1,frictionAngle=frictionAngle,
sigmaT=sigmaT,epsCrackOnset=epsCrackOnset,neverDamage=False,label='concrete',relDuctility=relDuctility,))


frictMat = 
O.materials.append(CpmMat(young=100*young,poisson=poisson,frictionAngle=0,sigmaT=0,epsCrackOnset=epsCrackOnset,relDuctility=1.0001,neverDamage=True,density=3000,label='walls'))


if prepared<0.5:
        pred=pack.inAlignedBox((0,0,0),(L,H,W))
        
SpherePack=pack.randomDensePack(pred,spheresInCell=500,radius=psdmean,rRelFuzz=0.25,color=(0,0,1),material=concMat,returnSpherePack=True)
        sand=SpherePack.toSimulation() # assign all particles to sand object
else:
        
O.bodies.append(ymport.textExt('tpb_sample.txt',format='x_y_z_r',material=concMat))
        print ('I have previously prepared packing!!')  

for b in O.bodies:
        if isinstance(b.shape,Sphere):
                b.shape.color = (0.2,0.6,0.6)# give a colour



#piston for apply load
piston=O.bodies.append(geom.facetCylinder(center=(.5*L,H+R-0.3e-3,.5*W),radius=R,height=W,orientation=Quaternion((0,
 0, 1), pi/2),segmentsNumber=20,wire=False,material=frictMat)) #piston radius 
is 7mm 

#rollers for support
left_roller=O.bodies.append(geom.facetCylinder(center=(C,-R,.5*W),radius=R,height=W,orientation=Quaternion((0,
 0, 1), pi/2),segmentsNumber=20,wire=False,material=frictMat))

right_roller=O.bodies.append(geom.facetCylinder(center=(L-C,-R,.5*W),radius=R,height=W,orientation=Quaternion((0,
 0, 1), pi/2),segmentsNumber=20,wire=False,material=frictMat))

newton=NewtonIntegrator(damping=damp)
#interaction detection factor
enlargeFactor=1.5
#colour the particles
for b in O.bodies:
        if isinstance(b.shape,Sphere):
                b.shape.color = (0.2,0.6,0.6)
print len(O.bodies)

O.engines=[
        ForceResetter(),
        InsertionSortCollider([
                Bo1_Sphere_Aabb(aabbEnlargeFactor=enlargeFactor,label='bo1s'),
                Bo1_Facet_Aabb()
        ]),
        InteractionLoop(
                [
                        
Ig2_Sphere_Sphere_ScGeom(interactionDetectionFactor=enlargeFactor,label='ig2ss'),
                        Ig2_Facet_Sphere_ScGeom()
                ],
                [
                        
Ip2_CpmMat_CpmMat_CpmPhys(cohesiveThresholdIter=O.iter+5),
                        Ip2_FrictMat_CpmMat_FrictPhys(),
                        Ip2_FrictMat_FrictMat_FrictPhys(),
                ],
                [
                        Law2_ScGeom_CpmPhys_Cpm(),
                        Law2_ScGeom_FrictPhys_CundallStrack(),
                ],
        ),
        ## We will use the global stiffness of each body to determine an 
optimal timestep (see 
https://yade-dem.org/w/images/1/1b/Chareyre&Villard2005_licensed.pdf)
        #TranslationEngine(ids=[piston.id],translationAxis=[0,0,1],velocity=1),
        
GlobalStiffnessTimeStepper(active=1,timeStepUpdateInterval=100,timestepSafetyCoefficient=0.3),
        PyRunner(iterPeriod=1,command='apply()',label='apply'),
        PyRunner(iterPeriod=1,command='addPlotData()',label='graph'),
        newton,
]

#Display spheres with 2 colors for seeing rotations better
Gl1_Sphere.stripes=0
qtr=yade.qt.Renderer()
qtr.bgColor=(1,1,1)
yade.qt.Controller(), yade.qt.View()

#run 1 step and set interaction detection factor to 1
O.step()
bo1s.aabbEnlargeFactor=ig2ss.interactionDetectionFactor=1.

cylinderIds=[]
for i in range(0,len(piston)):
        cylinderIds.append(piston[i])
        #print piston[i]
#print cylinderIds

'''
#for i in range(0,len(left_roller)):
        #O.bodies[left_roller[i]].state.blockedDOFs='y'
#for i in range(0,len(right_roller)):
        #O.bodies[right_roller[i]].state.blockedDOFs='y'

#for i in range(0,len(piston)):
        #O.bodies[piston[i]].state.blockedDOFs='XYZxyz'
'''
#function to apply load
def apply():
        for i in range(0,len(piston)):
                O.bodies[piston[i]].state.vel[1]=-v


def addPlotData():
        f_2=utils.sumForces(ids=cylinderIds,direction =(0,1,0))# measure total 
force induced on the cylinder
        delta_z=v*O.time*1000 #beam deflection
        plot.addData(t = O.time,f_2 = f_2,delta_z=delta_z)


plot.plots={'delta_z':('f_2',)}
plot.plot()


from yade import qt
qt.Controller()
qt.View()










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

_______________________________________________
Mailing list: https://launchpad.net/~yade-users
Post to     : yade-users@lists.launchpad.net
Unsubscribe : https://launchpad.net/~yade-users
More help   : https://help.launchpad.net/ListHelp

Reply via email to