← Back to team overview

yade-users team mailing list archive

[Question #685323]: Friction between walls and 'rock'

 

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

Hello everyone,
I am trying to simulate an indirect tensile test. I would like
to take in account the friction between the walls and ‘rock’.
Even thought i assign properties to the  walls the results
do not differ.
Could you point what am i doing wrong. Thanx
Here is the code.

from __future__ import print_function
from yade import pack, plot

################# BRAZILIAN SIMULATION DEFINED HERE
####Material microproperties from table
readParamsFromTable(noTableOk=True, # unknownOk=True,
	Specimen_Radius = 0.02735,
	Specimen_Thickness = 0.025,
	Sphere_Radius = 1e-3,
	intR=1.15,
	DENSITY=2700,
	YOUNG=100e9,
	FRICTION_ANGLE=30,
	POISSON=1, 
	TENS=10e6,
	COH=100e6,
)

from yade.params.table import *

#### material definition
Sample = O.materials.append(JCFpmMat(
young=YOUNG,
poisson=POISSON, 
frictionAngle=radians(FRICTION_ANGLE), 
cohesion=COH, 
tensileStrength=TENS,
density = DENSITY,
label='spheres'
))

#### create the specimen
sp=pack.randomDensePack(
	pack.inCylinder((0,0,0),(Specimen_Thickness,0,0),Specimen_Radius),
	radius = Sphere_Radius,
	spheresInCell = 1000,
	material=Sample,
	rRelFuzz=0.2,
	memoizeDb = '/tmp/packing-brazilian.db',
	returnSpherePack = True,
)
sp.toSimulation()

# walls
zMin,zMax=[pt[2] for pt in aabbExtrema()]
wallIDs = O.bodies.append([wall((0,0,z),2) for z in (zMin,zMax)])
O.materials.append(JCFpmMat(young=150e9,poisson=1,frictionAngle=radians(65),density=150e10,label='wall'))
walls = wallMin,wallMax = [O.bodies[i] for i in wallIDs]
v =1
wallMin.state.vel = (0,0,+v)
wallMax.state.vel = (0,0,-v)

#engines
O.engines=[
ForceResetter(),
	InsertionSortCollider([Bo1_Sphere_Aabb(aabbEnlargeFactor=intR,label='is2aabb'),Bo1_Wall_Aabb()]),
	InteractionLoop(
		[Ig2_Sphere_Sphere_ScGeom(interactionDetectionFactor=intR,label='ss2sc'),Ig2_Wall_Sphere_ScGeom()],
		[Ip2_JCFpmMat_JCFpmMat_JCFpmPhys(cohesiveTresholdIteration=1,label='interactionPhys')],
		[Law2_ScGeom_JCFpmPhys_JointedCohesiveFrictionalPM(recordCracks=True,Key=OUT,label='interactionLaw')],
	),
     GlobalStiffnessTimeStepper(active=1,timeStepUpdateInterval=10,timestepSafetyCoefficient=0.5, defaultDt=utils.PWaveTimeStep()),
	NewtonIntegrator(damping=0.5),
	PyRunner(iterPeriod=100,command='addPlotData()',initRun=True),
     	PyRunner(iterPeriod=100,command='stopIfDamaged()'),
		
]

# stop condition
def stopIfDamaged():
	if O.iter < 10: # do nothing at the beginning
		return
	SMax = max(plot.data["stress"])
	S = plot.data["stress"][-1]
	if S<(0.8*SMax):
		print("Damaged, stopping.")
		print("ft = ",max(plot.data["stress"]))
		O.pause()

# plot stuff
def addPlotData():
	# forces of walls. f1 is "down", f2 is "up" (f1 needs to be negated for evlauation)
	f1,f2 = [O.forces.f(i)[2] for i in wallIDs]
	f1*=-1
	# average force
	f = 0.5*(f1+f2)
	# displacement (2 times each wall)
	wall = O.bodies[wallIDs[0]]
	dspl = 2*wall.state.displ()[2]
	# stress (according to standard brazilian test evaluation formula)
	stress = f/(pi*Specimen_Radius*Specimen_Thickness)
	# store values
	yade.plot.addData(
		t = O.time,
		i = O.iter,
		dspl = dspl,
		stress = stress,
		te = interactionLaw.nbTensCracks,
        	se = interactionLaw.nbShearCracks,
	)
        plot.saveDataTxt(OUT)

# plot dspl on x axis, stress on y1 axis and f,f1,f2 in y2 axis
plot.plots={'dspl':'stress'}


O.step(); 
ss2sc.interactionDetectionFactor=1.
is2aabb.aabbEnlargeFactor=1.

plot.plot()
O.run()

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