Build error: no suitable spherical body to calculate dt

Asked by henry

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

Question information

Language:
English Edit question
Status:
Answered
For:
Yade Edit question
Assignee:
No assignee Edit question
Last query:
Last reply:
Revision history for this message
Jan Stránský (honzik) said :
#1

Hello,
please provide the problematic code and other information (version of Yade, operating system ..) [1]
This code works fine form me (no surprise :-), but there is no PWave time step computing
cheers
Jan

[1] https://yade-dem.org/wiki/Howtoask

Revision history for this message
henry (henrykod) said :
#2

Please i am using Ubuntu 14.04 32bit system and Yade 1.07.0 .

Thanks

Revision history for this message
Jan Stránský (honzik) said :
#3

Hello,
those versions are relatively old.. so problems related to those versions will be difficult to test and will not be solved anyway..
Have you used the same code you showed in original post, or have you done some modifications?
cheers
Jan

Revision history for this message
henry (henrykod) said :
#4

Thank you very much for your response .. I got the code working now. I want to know how I can get the data from the trap door and the pressure from both sides of the box. Please how do i get these values so ı can plot graphs.

Is there any code i can add to output these values. No output is obtained after the simulation.

Thank You.

Revision history for this message
Jan Stránský (honzik) said :
#5

Hello,
please open a new topic if your new question is unrelated to the original problem. There please specify what "data from the trap door" actually means
The pressure is simply got by summing forces and divided by area of corresponding facets
###
ids = [...] # a list of ids of facets of interest
force = sum(O.forces.f(id)[2] for id in ids)
area = sum(O.bodies[id].shape.area for id in ids)
pressure = force / area
###
cheers
Jan

Can you help with this problem?

Provide an answer of your own, or ask henry for more information if necessary.

To post a message you must log in.