← Back to team overview

yade-users team mailing list archive

[Question #659715]: Understanding why sometimes does not occurs contact between Facet/Spheres using the same script

 

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

Dear all,

I am starting a script to reach a specified porosity using REFD method. But right at the beginning, I have found some code behaviors that I still do not understand. In the script below:

1) If I use num=1 in the makeCloud there are no contacts between Facet/Sphere;
2) In the same script, if I activate the gravity=(0,0,-9,81) in NewtonIntegrator, there are contacts between Facet/Sphere;
3) Even without using gravity, but if I use, for example, 100 spheres (num=100 in the makeCloud), there are contacts between Facet/Sphere.

I'm a little unsure of these behaviors, could you tell me what's going on?

Thank you very much.

Marcus.

#############
##  Script used  ##
#############

from yade import utils,pack,geom,qt,plot

radius=.05
damp=0.2

O.materials.append(FrictMat(young=1e10,poisson=0.3,density=1e3,frictionAngle=radians(20),label='sphereMat'))
O.materials.append(FrictMat(young=1e10,poisson=0.3,density=1e3,frictionAngle=0,label='facetMat'))

O.bodies.append(geom.facetBox((.5,.5,.5),(.5,.5,.5),wallMask=63,material='facetMat'))

sp=pack.SpherePack()
sp.makeCloud((0,0,0),(1,1,1),rMean=radius,num=100)
sp.toSimulation(material='sphereMat',color=(0,0,1))

triax=TriaxialStressController(
	maxMultiplier=0.01,
	finalMaxMultiplier=0.001,
	stressMask = 7,
	internalCompaction=True,
)

O.engines=[
	ForceResetter(),
	InsertionSortCollider([Bo1_Sphere_Aabb(),Bo1_Facet_Aabb()]),
	InteractionLoop(
		[Ig2_Sphere_Sphere_ScGeom(),Ig2_Facet_Sphere_ScGeom()],
		[Ip2_FrictMat_FrictMat_FrictPhys()],
		[Law2_ScGeom_FrictPhys_CundallStrack()]
	),
	NewtonIntegrator(gravity=(0,0,0),damping=damp),
	PyRunner(command='radiusExpansion()',iterPeriod=200),
	PyRunner(command='contactForces()',iterPeriod=200),
]

O.dt=.5*PWaveTimeStep()

O.trackEnergy=True

def radiusExpansion():
	for n in range(0,len(O.bodies)):
		if isinstance(O.bodies[n].shape,Sphere):
			if O.bodies[n].shape.radius<0.6:
				O.bodies[n].shape.radius=O.bodies[n].shape.radius+0.0005

def contactForces():
	for i in O.interactions:
		if not i.isReal: continue
		cp = i.geom.contactPoint
		nf = i.phys.normalForce
		sf = i.phys.shearForce
		print cp

def fabricTensor():
	utils.plotDirections()

rr=yade.qt.Renderer()

plot.plots={'i':('unbalanced'),'i ':('sxx','syy','szz'),' i':('exx','eyy','ezz'),
	' i ':(O.energy.keys,None,'Etot'),
}

yade.qt.View()
O.saveTmp()

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