yade-users team mailing list archive
-
yade-users team
-
Mailing list archive
-
Message #15411
[Question #653755]: Build error: no suitable spherical body to calculate dt
New question #653755 on Yade:
https://answers.launchpad.net/yade/+question/653755
Am new of yade but doing similar work to a post you responded to and provided the code below. HOWEVER WHEN I RUN IT i get the erroe PWave time step has not found any spherical body to calculate dt. And the grahical interface do not show any animation. How can i resolve thjis problem.
Jan Stránský (honzik) said on 2017-07-12: #6
A MWE below. I used polyhedra, but it takes a lot of time. Spheres with high friction coefficient ma be used to simulate polyhedra and make the simulation faster. It very much depends on the purpose of the simulations and allowed level of simplification.
###########
######################################################################
# INPUTS
######################################################################
gravity = 100
# box dimensions
widthl = .3
widthr = .3
widthc = .3
height = .3
thick = .1
deep = -.2
# size of grains
sizeMin = 40e-3
sizeMax = 60e-3
frictionAngle = .5
young = 1e8 # stiffness
dt = 1e-3 # time step
nGravityDeposition = 250 # how long to run initial gravity deposition
nCycles = 3 # how many jumps to run afterwards
nStepsBetweenCycles = 200 # number of time steps between jumps
dspl = 20e-3
# how much larger the initial make cloud box should be
fillBoxHFactor = 3
######################################################################
from yade import polyhedra_utils
width = widthl+widthc+widthr
# mat, engines, ...
mat = PolyhedraMat(young=young,poisson=10,frictionAngle=frictionAngle)
O.materials.append(mat)
O.engines=[
ForceResetter(),
InsertionSortCollider([Bo1_Polyhedra_Aabb(),Bo1_Facet_Aabb()]),
InteractionLoop(
[Ig2_Polyhedra_Polyhedra_PolyhedraGeom(), Ig2_Facet_Polyhedra_PolyhedraGeom()],
[Ip2_PolyhedraMat_PolyhedraMat_PolyhedraPhys()],
[Law2_PolyhedraGeom_PolyhedraPhys_Volumetric()],
),
NewtonIntegrator(damping=0.4,gravity=(0,0,-gravity)),
PyRunner(iterPeriod=1,command='checker()'),
]
O.dt = dt
def checker():
for i in range(nCycles):
ii = nGravityDeposition+i*nStepsBetweenCycles
if O.iter == ii:
moveBottom()
if O.iter == ii+1:
stopBottom()
if O.iter == nGravityDeposition+nCycles*nStepsBetweenCycles:
O.pause()
def moveBottom():
v = dspl / O.dt
for b in movables:
b.state.vel = (0,0,-v)
def stopBottom():
for b in movables:
b.state.vel = (0,0,0)
# box
p000 = Vector3(0,0,0)
p100 = Vector3(widthl,0,0)
p200 = Vector3(widthl+widthc,0,0)
p300 = Vector3(widthl+widthc+widthr,0,0)
pxs = (p000,p100,p200,p300)
p001,p101,p201,p301 = [p+Vector3(0,0,height) for p in pxs]
p010,p110,p210,p310 = [p+Vector3(0,thick,0) for p in pxs]
p011,p111,p211,p311 = [p+Vector3(0,thick,height) for p in pxs]
p00b,p10b,p20b,p30b = [p+Vector3(0,0,deep) for p in pxs]
p01b,p11b,p21b,p31b = [p+Vector3(0,thick,deep) for p in pxs]
def rect(vs,**kw):
v1,v2,v3,v4 = vs
return [
facet((v1,v2,v3),**kw),
facet((v1,v3,v4),**kw),
]
movables = rect((p100,p200,p210,p110)) # bottom center
rects = (
(p000,p100,p110,p010), # bottom left
(p200,p300,p310,p210), # bottom left
(p000,p010,p011,p001), # left
(p300,p310,p311,p301), # right
(p000,p100,p101,p001), # front left
(p100,p200,p201,p101), # front center
(p200,p300,p301,p201), # front right
(p010,p110,p111,p011), # back left
(p110,p210,p211,p111), # back center
(p210,p310,p311,p211), # back right
(p100,p200,p20b,p10b), # front center below
(p110,p210,p21b,p11b), # back center below
(p100,p110,p11b,p10b), # left below
(p200,p210,p21b,p20b), # right below
)
rects = movables + sum((rect(r) for r in rects),[])
O.bodies.append(rects)
# gravel
polyhedra_utils.fillBox((0,0,0),(width,thick,fillBoxHFactor*height),mat,sizemin=3*[sizeMin],sizemax=3*[sizeMax],seed=1)
###########
cheers
Jan
--
You received this question notification because your team yade-users is
an answer contact for Yade.