yade-users team mailing list archive
-
yade-users team
-
Mailing list archive
-
Message #25999
Re: [Question #698285]: How to make each polyhedron break only once?
Question #698285 on Yade changed:
https://answers.launchpad.net/yade/+question/698285
Status: Open => Answered
Jan Stránský proposed the following answer:
Hello,
one option: before the splitter, check and change material to a non-
breakable one for the polyhedrons that are not "original"
Upgraded script:
###
# -*- encoding=utf-8 -*-
# This script demonstrates polyhedra splitting/crushing under compression.
from yade import polyhedra_utils
gravel1 = PolyhedraMat()
gravel1.IsSplitable = True
gravel1.strength = 1e0
gravel2 = PolyhedraMat()
gravel2.IsSplitable = True
gravel2.strength = 2e0
gravel3 = PolyhedraMat()
gravel3.IsSplitable = True
gravel3.strength = 4e0
# new non splitable material
nonSplitableMat = PolyhedraMat()
#nonSplitableMat.IsSplitable = False # False is default?
steel = PolyhedraMat()
steel.young = 1e10
d = .05
p1 = polyhedra_utils.polyhedra(gravel1, size=(d,d,d), seed=1)
p2 = polyhedra_utils.polyhedra(gravel2, size=(d,d,d), seed=1)
p3 = polyhedra_utils.polyhedra(gravel3, size=(d,d,d), seed=1)
p2.state.pos = (2*d,0,0)
p3.state.pos = (4*d,0,0)
p2.state.ori = p3.state.ori = p1.state.ori
d = .035
w1 = utils.wall(+d, axis=1, sense=-1, material=steel)
w2 = utils.wall(-d, axis=1, sense=+1, material=steel)
v = 5e-1
w1.state.vel = (0,-v,0)
w2.state.vel = (0,+v,0)
O.bodies.append((p1,p2,p3,w1,w2))
# IDs of original bodies
originalIds = set(b.id for b in O.bodies)
def changeMaterial():
for b in O.bodies:
if not isinstance(b.shape,Polyhedra): # only polyhedrons
continue
if b.id not in originalIds: # only non-original polyhedrons
b.mat = nonSplitableMat # set the non splitable material
O.engines=[
ForceResetter(),
InsertionSortCollider([Bo1_Polyhedra_Aabb(),Bo1_Wall_Aabb()]),
InteractionLoop(
[Ig2_Wall_Polyhedra_PolyhedraGeom(), Ig2_Polyhedra_Polyhedra_PolyhedraGeom()],
[Ip2_PolyhedraMat_PolyhedraMat_PolyhedraPhys()],
[Law2_PolyhedraGeom_PolyhedraPhys_Volumetric()]
),
NewtonIntegrator(),
# check / change material before splitting
PyRunner(iterPeriod=100,command="changeMaterial()"),
PolyhedraSplitter(iterPeriod=100),
]
O.dt=1e-6
try:
from yade import qt
qt.Controller()
v = qt.View()
v.ortho = True
except:
pass
O.run(30000)
###
Cheers
Jan
--
You received this question notification because your team yade-users is
an answer contact for Yade.