Beispiel #1
0
import woo
from woo import utils,pack
from woo.dem import *
from woo.core import *
from minieigen import *
woo.master.usesApi=10101
woo.master.scene=S=Scene(fields=[DemField(gravity=(0,0,-10))])
mat=utils.defaultMaterial()
sp=pack.SpherePack()
sp.makeCloud((4,4,4),(14,14,14),.4,rRelFuzz=.5)
sp.toSimulation(S,mat=mat)
S.dem.par.add([utils.wall(1,axis=2,sense=0,mat=mat,glAB=((-10,-1),(20,11))),])
S.periodic=True
S.cell.setBox(20,20,20)
S.engines=utils.defaultEngines(damping=.4)
S.dtSafety=.5
S.dt=.5*utils.pWaveDt() # to compute oscillation freqs below
# create cylinders
for i,x in enumerate([-2,0,2,4,6,8,10.5,12,14]):
	c=InfCylinder.make((x,0,3),radius=.8,axis=1,mat=mat,glAB=(-1,11))
	c.angVel=(0,2.*(i+1),0)
	# each of cylinders will move haronically along global x and z axes (not y)
	c.impose=AlignedHarmonicOscillations(freqs=(1./(10000.*S.dt),float('nan'),1/(((i%3)+3)*1000.*S.dt)),amps=(.3*(i%2+1),0,.4*(i%4+1)))
	S.dem.par.add(c,nodes=True)

try:
	from woo import gl
	S.gl.wall.div=10
	S.gl.infCylinder.wire=True
except ImportError: pass
Beispiel #2
0
import sys
sys.path.append('.')
import clDem

from minieigen import *

from woo import utils
m=utils.defaultMaterial()
O.dem.par.append([
	utils.wall((0,0,0),axis=2,material=m,fixed=True),
	utils.sphere((0,0,1.3),radius=1,material=m)
])
O.dem.par[-1].vel=(-1.,0,0)
O.dem.par[-1].angVel=(0,1,0)
# O.dem.par[-1].material.tanPhi=0. # no friction
O.scene.dt=.003*utils.pWaveDt()
O.scene.trackEnergy=True
from woo.dem import *
from woo.core import*
O.scene.engines=[
	#PyRunner('if len(O.dem.con)>0 and O.dem.con[0].real: O.pause()'),
	Gravity(gravity=(0,0,-10)),
	Leapfrog(damping=.05,reset=True),
	InsertionSortCollider([Bo1_Sphere_Aabb(),Bo1_Wall_Aabb()]),
	ContactLoop([Cg2_Sphere_Sphere_L6Geom(),Cg2_Wall_Sphere_L6Geom()],[Cp2_FrictMat_FrictPhys()],[Law2_L6Geom_FrictPhys_IdealElPl()],applyForces=True),
]
import woo.qt
woo.qt.View()

O.scene.clDev=(1,0) # intel
sim=woo.cld.CLDemField.wooToClDem(O.scene,stepPeriod=1,relTol=-1)
Beispiel #3
0
import woo
from woo import utils,pack,plot
from woo.dem import *
from woo.core import *

woo.master.scene=S=Scene(fields=[DemField(gravity=(0,0,-10))])
mat=woo.dem.PelletMat(young=1e6,tanPhi=.5,ktDivKn=.2,density=1000)
if 1:
	sp=pack.SpherePack()
	sp.makeCloud((0,0,0),(10,10,10),.4,rRelFuzz=.5)
	sp.toSimulation(S,mat=mat)
else:
	S.dem.par.add(utils.sphere((0,0,1),.5,mat=mat))

S.dem.par.add(utils.wall(0,axis=2,sense=1,mat=mat))
S.engines=utils.defaultEngines(damping=0.,cp2=Cp2_PelletMat_PelletPhys(),law=Law2_L6Geom_PelletPhys_Pellet(plastSplit=True))+[
	PyRunner(1,'S.plot.addData(i=S.step,t=S.time,Eerr=(S.energy.relErr() if S.step>100 else 0),**S.energy)'),
]
	
S.dt=.3*utils.pWaveDt(S)

S.dem.collectNodes()
S.trackEnergy=True
S.saveTmp()
S.plot.plots={'i':(S.energy,None,('Eerr','g--'))}
S.plot.plot()
S.run(500)
#from woo import gl
#gl.Gl1_Wall.div=10
#gl.Gl1_InfCylinder.wire=True
Beispiel #4
0
"""
Show basic wall functionality (infinite axis-aligned planes).
"""
from woo import utils
O.materials.append(FrictMat(young=30e9,density=1000,poisson=.2,frictionAngle=.5)
O.bodies.append([
    utils.wall(1,axis=2,sense=-1),
    utils.wall(-5,axis=0,sense=1),
    utils.wall(1,axis=1),
    utils.wall((1,0,0),0),
    utils.sphere([0,0,0],.5),
    utils.sphere([-5,-4,-3],.5)
])
Gl1_Wall(div=10)

from woo import qt
qt.Controller()
qt.View()


O.engines=[
    ForceResetter(),
    InsertionSortCollider([Bo1_Sphere_Aabb(),Bo1_Facet_Aabb(),Bo1_Wall_Aabb()]),
    InteractionLoop(
        [Ig2_Sphere_Sphere_Dem3DofGeom(),Ig2_Facet_Sphere_Dem3DofGeom(),Ig2_Wall_Sphere_Dem3DofGeom()],
        [Ip2_FrictMat_FrictMat_FrictPhys()],
        [Law2_Dem3DofGeom_FrictPhys_CundallStrack()],
    ),
    GravityEngine(gravity=[1e2,1e2,1e2]),
    NewtonIntegrator(damping=0.01),
    ]
Beispiel #5
0
import woo
from woo import utils, pack
from woo.dem import *
from woo.core import *
from minieigen import *
woo.master.usesApi = 10101
woo.master.scene = S = Scene(fields=[DemField(gravity=(0, 0, -10))])
mat = utils.defaultMaterial()
sp = pack.SpherePack()
sp.makeCloud((4, 4, 4), (14, 14, 14), .4, rRelFuzz=.5)
sp.toSimulation(S, mat=mat)
S.dem.par.add([
    utils.wall(1, axis=2, sense=0, mat=mat, glAB=((-10, -1), (20, 11))),
])
S.periodic = True
S.cell.setBox(20, 20, 20)
S.engines = utils.defaultEngines(
    damping=.4) + [POVRayExport(out='/tmp/pov', stepPeriod=20)]
S.dtSafety = .5
S.dt = .5 * utils.pWaveDt()  # to compute oscillation freqs below
# create cylinders
for i, x in enumerate([-2, 0, 2, 4, 6, 8, 10.5, 12, 14]):
    c = InfCylinder.make((x, 0, 3), radius=.8, axis=1, mat=mat, glAB=(-1, 11))
    c.angVel = (0, 4. * (i + 1), 0)
    # each of cylinders will move haronically along global x and z axes (not y)
    c.impose = AlignedHarmonicOscillations(
        freqs=(1. / (10000. * S.dt), float('nan'),
               1 / (((i % 3) + 3) * 1000. * S.dt)),
        amps=(.3 * (i % 2 + 1), 0, .4 * (i % 4 + 1)))
    S.dem.par.add(c)
Beispiel #6
0
from woo.dem import *
from woo.core import *
from miniEigen import *
from math import *
from woo import utils,pack
S=woo.master.scene=Scene(fields=[DemField()])

m=FrictMat(young=1e6,density=1e3,ktDivKn=2.,tanPhi=.5)
for axis in 0,1,2: S.dem.par.append(utils.wall((0,0,0),axis=axis,mat=m,mask=0b011))
sp=pack.SpherePack()
sp.load(sys.argv[1])
sp.cellSize=(0,0,0) # make the packing aperiodic
sp.toSimulation(S,mat=m,mask=0b001)
S.dem.collectNodes()
S.dt=.3*utils.pWaveDt()
S.engines=utils.defaultEngines(gravity=(-4,-5,-10),damping=.4,verletDist=-.3)
S.loneGroups=0b010  # no contacts of walls with themselves
S.run(2000)
# S.wait()
Beispiel #7
0
from woo.dem import *
from woo.core import *
from miniEigen import *
from math import *
from woo import utils, pack

S = woo.master.scene = Scene(fields=[DemField()])

m = FrictMat(young=1e6, density=1e3, ktDivKn=2., tanPhi=.5)
for axis in 0, 1, 2:
    S.dem.par.append(utils.wall((0, 0, 0), axis=axis, mat=m, mask=0b011))
sp = pack.SpherePack()
sp.load(sys.argv[1])
sp.cellSize = (0, 0, 0)  # make the packing aperiodic
sp.toSimulation(S, mat=m, mask=0b001)
S.dem.collectNodes()
S.dt = .3 * utils.pWaveDt()
S.engines = utils.defaultEngines(gravity=(-4, -5, -10),
                                 damping=.4,
                                 verletDist=-.3)
S.loneGroups = 0b010  # no contacts of walls with themselves
S.run(2000)
# S.wait()
Beispiel #8
0
from woo import pack,log,timing,utils
log.setLevel("SubdomainBalancer",log.INFO)
#log.setLevel("BodyContainer",log.TRACE)
utils.readParamsFromTable(noTableOk=True,num=12000)
import woo.params.table
sp=pack.SpherePack()
sp.makeCloud((0,0,0),(1,1,1),.03*((12000./woo.params.table.num)**(1/3.)),.5)
sp.toSimulation()
O.bodies.append(utils.wall((0,0,0),axis=2))
O.bodies.append(utils.wall((0,0,0),axis=1))
#O.bodies.append(utils.wall((0,0,0),axis=0))
#O.bodies.append(utils.wall((0,2,0),axis=1))
#O.bodies.append(utils.wall((2,0,0),axis=0))
O.engines=([SubdomainBalancer(axesOrder='xyz',colorize=True)] if 'SubdomainBalancer' in dir() else [])+[
	ForceResetter(),
	InsertionSortCollider([Bo1_Sphere_Aabb(),Bo1_Wall_Aabb()],sweepLength=.05*.05),
	InteractionLoop([Ig2_Sphere_Sphere_ScGeom(),Ig2_Wall_Sphere_ScGeom()],[Ip2_FrictMat_FrictMat_FrictPhys()],[Law2_ScGeom_FrictPhys_CundallStrack()]),
	GravityEngine(gravity=(0,0,-10)),
	NewtonIntegrator(),
	#PyRunner(iterPeriod=5000,command='O.pause(); timing.stats();')
]
O.dt=utils.PWaveTimeStep()
O.timingEnabled=True
#O.step(); #O.run(10000,True)
timing.stats()
from woo import qt
qt.View()
#O.step()
#O.run(5000,True)
Beispiel #9
0
from woo import pack, log, timing, utils
log.setLevel("SubdomainBalancer", log.INFO)
#log.setLevel("BodyContainer",log.TRACE)
utils.readParamsFromTable(noTableOk=True, num=12000)
import woo.params.table
sp = pack.SpherePack()
sp.makeCloud((0, 0, 0), (1, 1, 1),
             .03 * ((12000. / woo.params.table.num)**(1 / 3.)), .5)
sp.toSimulation()
O.bodies.append(utils.wall((0, 0, 0), axis=2))
O.bodies.append(utils.wall((0, 0, 0), axis=1))
#O.bodies.append(utils.wall((0,0,0),axis=0))
#O.bodies.append(utils.wall((0,2,0),axis=1))
#O.bodies.append(utils.wall((2,0,0),axis=0))
O.engines = ([
    SubdomainBalancer(axesOrder='xyz', colorize=True)
] if 'SubdomainBalancer' in dir() else []) + [
    ForceResetter(),
    InsertionSortCollider(
        [Bo1_Sphere_Aabb(), Bo1_Wall_Aabb()], sweepLength=.05 * .05),
    InteractionLoop([Ig2_Sphere_Sphere_ScGeom(),
                     Ig2_Wall_Sphere_ScGeom()],
                    [Ip2_FrictMat_FrictMat_FrictPhys()],
                    [Law2_ScGeom_FrictPhys_CundallStrack()]),
    GravityEngine(gravity=(0, 0, -10)),
    NewtonIntegrator(),
    #PyRunner(iterPeriod=5000,command='O.pause(); timing.stats();')
]
O.dt = utils.PWaveTimeStep()
O.timingEnabled = True
#O.step(); #O.run(10000,True)
Beispiel #10
0
from woo.core import*
from woo.dem import *
import woo.gl
from woo import utils
S=woo.master.scene=Scene(fields=[DemField(gravity=(0,0,-10))])
S.dem.par.add([
	utils.wall((0,0,0),axis=2,sense=1),
	utils.sphere((0,0,1),.2)
])
S.dem.par[1].vel=(0,1,0)
S.dt=.7*utils.pWaveDt()
S.engines=utils.defaultEngines()+[woo.dem.Tracer(num=512,compress=2,stepPeriod=10,compSkip=1)]
S.saveTmp()
import woo.qt
woo.qt.View()
S.run(2000)
Beispiel #11
0
import sys
sys.path.append('.')
import clDem

from minieigen import *

from woo import utils
m = utils.defaultMaterial()
O.dem.par.append([
    utils.wall((0, 0, 0), axis=2, material=m, fixed=True),
    utils.sphere((0, 0, 1.3), radius=1, material=m)
])
O.dem.par[-1].vel = (-1., 0, 0)
O.dem.par[-1].angVel = (0, 1, 0)
# O.dem.par[-1].material.tanPhi=0. # no friction
O.scene.dt = .003 * utils.pWaveDt()
O.scene.trackEnergy = True
from woo.dem import *
from woo.core import *
O.scene.engines = [
    #PyRunner('if len(O.dem.con)>0 and O.dem.con[0].real: O.pause()'),
    Gravity(gravity=(0, 0, -10)),
    Leapfrog(damping=.05, reset=True),
    InsertionSortCollider([Bo1_Sphere_Aabb(),
                           Bo1_Wall_Aabb()]),
    ContactLoop([Cg2_Sphere_Sphere_L6Geom(),
                 Cg2_Wall_Sphere_L6Geom()], [Cp2_FrictMat_FrictPhys()],
                [Law2_L6Geom_FrictPhys_IdealElPl()],
                applyForces=True),
]
import woo.qt
Beispiel #12
0
margin=10
r=.005

ktDivKn=.2


m=FrictMat(young=1e6,density=1e3,tanPhi=0)

import woo.pack
sp=woo.pack.SpherePack()
sp.makeCloud((2*r*margin,2*r*margin,2*r),((dim[0]-margin)*2*r,(dim[1]-margin)*2*r,dim[2]*2*r),r,rRelFuzz=.5)
sp.toSimulation(material=m)
for p in O.dem.par: p.vel=(0,0,-.05)

O.dem.par.append([
	utils.wall((0,0,2*r),sense=1,axis=2,material=m),
	utils.wall((0,0,0),sense=1,axis=0,material=m),
	utils.wall((0,0,0),sense=1,axis=1,material=m),
])

O.scene.dt=.5*utils.pWaveDt()

O.scene.engines=[
	InsertionSortCollider([Bo1_Sphere_Aabb(),Bo1_Wall_Aabb()],verletDist=.05*r),
	ContactLoop([Cg2_Sphere_Sphere_L6Geom(),Cg2_Wall_Sphere_L6Geom()],
		[Cp2_FrictMat_FrictPhys(ktDivKn=ktDivKn)],
		[Law2_L6Geom_FrictPhys_IdealElPl(noSlip=True)],
		applyForces=True
	),
	Gravity(gravity=(-4,-5,-10)),
	Leapfrog(damping=.4,reset=True),
Beispiel #13
0
from woo.core import *
from woo.dem import *
import woo.gl
from woo import utils
S = woo.master.scene = Scene(fields=[DemField(gravity=(0, 0, -10))])
S.dem.par.add(
    [utils.wall((0, 0, 0), axis=2, sense=1),
     utils.sphere((0, 0, 1), .2)])
S.dem.par[1].vel = (0, 1, 0)
S.dt = .7 * utils.pWaveDt()
S.engines = utils.defaultEngines() + [
    woo.dem.Tracer(num=512, compress=2, stepPeriod=10, compSkip=1)
]
S.saveTmp()
import woo.qt
woo.qt.View()
S.run(2000)
Beispiel #14
0
import woo
from woo import utils
from woo.core import *
from woo.dem import *
from woo import plot
import woo.log
m=FrictMat(density=1e3,young=1e7,ktDivKn=.2,tanPhi=.5)
S=woo.master.scene=Scene(fields=[DemField(gravity=(0,0,-10))])
S.dtSafety=0.1
S.dem.par.add([
	utils.wall(-.5,axis=2,sense=1,mat=m),
	utils.sphere((0,0,1),.5,fixed=False,wire=True,mat=m)
])
# S.dem.par[1].vel=(0,0,-1)
S.dem.collectNodes()
S.dtSafety=0.06
S.engines=utils.defaultEngines(damping=.0,cp2=Cp2_FrictMat_HertzPhys(gamma=0.,en=1.,label='cp2'),law=Law2_L6Geom_HertzPhys_DMT(noAttraction=True),dynDtPeriod=10)+[
	LawTester(ids=(0,1),abWeight=1.,label='tester',stages=[LawTesterStage(values=(0,0,0,0,0,0),whats='......',until='False',
		#,until='stage.rebound'
	)],done='tester.restart(); S.stop()'),
	PyRunner(1,'import woo; S.plot.addData(i=S.step,x=S.dem.par[1].pos,v=S.dem.par[1].vel,t=S.time,dt=S.dt,Etot=S.energy.total(),bounces=S.lab.tester.stages[0].bounces,vRel=S.lab.tester.v,**S.energy)'),
]
S.trackEnergy=True
S.plot.plots={'t':('x_z'),'i ':('**S.energy'),'t ':('v_z')} #,None,('Etot','g--'))}# ,'i':('v_z','vRel_xx')}
S.plot.plot()
S.saveTmp()

Beispiel #15
0
import woo
from woo import utils,pack
from woo.dem import *
from woo.core import *
from minieigen import *
woo.master.usesApi=10101
woo.master.scene=S=Scene(fields=[DemField(gravity=(0,0,-10))])
mat=utils.defaultMaterial()
sp=pack.SpherePack()
sp.makeCloud((4,4,4),(14,14,14),.4,rRelFuzz=.5)
sp.toSimulation(S,mat=mat)
S.dem.par.add([utils.wall(1,axis=2,sense=0,mat=mat,glAB=((-10,-1),(20,11))),])
S.periodic=True
S.cell.setBox(20,20,20)
S.engines=utils.defaultEngines(damping=.4)
S.dtSafety=.5
S.dt=.5*utils.pWaveDt() # to compute oscillation freqs below
# create cylinders
for i,x in enumerate([-2,0,2,4,6,8,10.5,12,14]):
    c=InfCylinder.make((x,0,3),radius=.8,axis=1,mat=mat,glAB=(-1,11))
    c.angVel=(0,2.*(i+1),0)
    # each of cylinders will move haronically along global x and z axes (not y)
    c.impose=AlignedHarmonicOscillations(freqs=(1./(10000.*S.dt),float('nan'),1/(((i%3)+3)*1000.*S.dt)),amps=(.3*(i%2+1),0,.4*(i%4+1)))
    S.dem.par.add(c)

try:
    from woo import gl
    S.gl.wall.div=10
    S.gl.infCylinder.wire=True
except ImportError: pass