Question #647446 on Yade changed:
https://answers.launchpad.net/yade/+question/647446

    Status: Open => Answered

Jan Stránský proposed the following answer:
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.

_______________________________________________
Mailing list: https://launchpad.net/~yade-users
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~yade-users
More help   : https://help.launchpad.net/ListHelp

Reply via email to