yade-users team mailing list archive
-
yade-users team
-
Mailing list archive
-
Message #08712
Re: [Question #240275]: Avoid interaction between two particles in a four particles experiment
Question #240275 on Yade changed:
https://answers.launchpad.net/yade/+question/240275
Description changed to:
Hello all,
I am doing a special biaxial test which only content Four particles laying to be a rhombus, like this
1
o
2 o --- o 0
o
3
how can I avoid interaction between axial line particles 1 and 3 if they
contact?
I already tried the 'mask' and 'avoidSelfInteractionMask' to cooperate,
as
O.bodies[0].groupMask=1;O.bodies[2].groupMask=1
O.bodies[1].groupMask=2;O.bodies[3].groupMask=2
[engines]collider.avoidSelfInteractionMask=2
but when the 1,3 interaction is avoided it is also impossible to
establish interactions between two different mask's particles, then all
interaction will lose by using 'avoidSelfInteractionMask'.
Do you have any idea to achieve that? thank you.
Huaxiang
here is my code
-------------------------------------------------------------------------------------------------------
import math
from yade import plot
conf=100000
poisson=0.5
kn=1.0e8
E=kn/1.0
ks=poisson*kn
rate=5e-4
status=[0.0,0.0,0.0,0.0]
O.materials.append(FrictMat(young=E,poisson=poisson,frictionAngle=radians(99.0),density=2600,label='spheres'))
O.materials.append(FrictMat(young=1.0e3*kn,poisson=0.3,frictionAngle=radians(99.0),density=0,label='walls'))
mn,mx=Vector3(-math.sqrt(2)-1,-math.sqrt(2)-1,-1.1),Vector3(math.sqrt(2)+1,math.sqrt(2)+1,1.1)
walls=utils.aabbWalls([mn,mx],thickness=0.001,material='walls')
wallIds=O.bodies.append(walls)
O.bodies.append([
utils.sphere(center=(math.sqrt(2),0.0,0.0),radius=1.0,material='spheres'),
utils.sphere(center=(0.0,math.sqrt(2),0.0),radius=1.0,material='spheres'),
utils.sphere(center=(-math.sqrt(2),0.0,0.0),radius=1.0,material='spheres'),
utils.sphere((0.0,-math.sqrt(2),0.0),1.0,material='spheres')
])
for k in O.bodies:
if isinstance(k.shape, Sphere): k.state.blockedDOFs='zXY'
O.dt=.5*utils.PWaveTimeStep()
O.usesTimeStepper=True
O.engines=[
ForceResetter(),
InsertionSortCollider([Bo1_Sphere_Aabb(),Bo1_Box_Aabb()]),
InteractionLoop(
[Ig2_Sphere_Sphere_ScGeom(),Ig2_Box_Sphere_ScGeom()],
[Ip2_FrictMat_FrictMat_FrictPhys()],
[Law2_ScGeom_FrictPhys_CundallStrack()]
),
GlobalStiffnessTimeStepper(active=1,timeStepUpdateInterval=100,timestepSafetyCoefficient=0.8, defaultDt=4*utils.PWaveTimeStep()),
NewtonIntegrator(damping=0.01),
]
O.dt=.5e-3*utils.PWaveTimeStep()
def setVel(velX,velY):
O.bodies[0].state.vel=Vector3(velX,0.0,0.0)
O.bodies[1].state.vel=Vector3(-velX,0.0,0.0)
O.bodies[2].state.vel=Vector3(0.0,velY,0.0)
O.bodies[3].state.vel=Vector3(0.0,-velY,0.0)
rateTmp=rate
while 1:
meanS=(abs(O.forces.f(1)[0])+abs(O.forces.f(3)[1]))
unb=unbalancedForce()
if rateTmp>0.0 and meanS>conf:
print 'convert'
rateTmp=-0.5*rateTmp
elif rateTmp<0.0 and meanS<conf:
print 'convert'
rateTmp=-0.5*rateTmp
setVel(rateTmp,rateTmp)
O.run(1, True)
unb=unbalancedForce()
meanS=(abs(O.forces.f(1)[0])+abs(O.forces.f(3)[1]))*0.5
print 'unbalanced force:',unb,' mean stress: ',meanS
if unb<0.001 and abs(meanS-conf)/conf<0.005:
break
plot.plots={'e2':'q'}
plot.plot()
raw_input('confining finish')
'''
ini=O.bodies[7].state.se3[0][1]
e22=0.0
e11=0.0
#rate=1e2*rate
while 1:
setVel(0.0,rate);e22+=rate
O.run(1,True)
while unbalancedForce()>0.001:
setVel(0.0,0.0)
O.run(1,True)
rateTmp=-0.5*rate
lateralS=(abs(O.forces.f(0)[0])+abs(O.forces.f(1)[0]))*0.5
while abs(lateralS-conf)/conf>0.001:
lateralS=(abs(O.forces.f(0)[0])+abs(O.forces.f(1)[0]))*0.5
if rateTmp>0.0 and lateralS>conf:
rateTmp=-0.5*rateTmp
elif rateTmp<0.0 and lateralS<conf:
rateTmp=-0.5*rateTmp
setVel(rateTmp,0.0)
O.run(1, True);e11+=rateTmp
lateralS=(abs(O.forces.f(0)[0])+abs(O.forces.f(1)[0]))*0.5
print O.forces.f(3)[1]-O.forces.f(1)[0],O.forces.f(1)[0],(ini-O.bodies[7].state.se3[0][1])/ini
plot.addData(e2=e22,e1=e11,q=O.forces.f(3)[1]-O.forces.f(1)[0],i=O.iter)
'''
rate=10.0*rate
adjust=math.cos(75.0*pi/180.0)/math.sin(75.0*pi/180.0)*rate*1e-1
ini=O.bodies[7].state.se3[0][1]
e22=0.0
e11=0.0
rateX=0.0
while 1:
lateralS=(abs(O.forces.f(0)[0])+abs(O.forces.f(1)[0]))*0.5
if lateralS>conf:
adjust=-abs(adjust)
elif lateralS<conf:
adjust=abs(adjust)
rateX+=adjust
setVel(rateX,rate);e22+=rate
O.run(1,True)
while unbalancedForce()>0.01:
setVel(0.0,0.0)
O.run(1,True)
print O.forces.f(3)[1]-O.forces.f(1)[0],O.forces.f(1)[0],(ini-O.bodies[7].state.se3[0][1])/ini,unbalancedForce()
plot.addData(e2=e22,e1=e11,q=O.forces.f(3)[1]-O.forces.f(1)[0],i=O.iter)
--
You received this question notification because you are a member of
yade-users, which is an answer contact for Yade.