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
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)
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
""" 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), ]
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)
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()
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()
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)
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)
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)
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
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),
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)
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()
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