------------------------------------------------------------ revno: 4140 committer: Anton Gladky <[email protected]> timestamp: Tue 2014-08-12 21:46:58 +0200 message: Add checkClumpHopper autotest. added: examples/clumps/clump-hopper-test.py scripts/checks-and-tests/checks/checkClumpHopper.py
-- lp:yade https://code.launchpad.net/~yade-pkg/yade/git-trunk Your team Yade developers is subscribed to branch lp:yade. To unsubscribe from this branch go to https://code.launchpad.net/~yade-pkg/yade/git-trunk/+edit-subscription
=== added file 'examples/clumps/clump-hopper-test.py' --- examples/clumps/clump-hopper-test.py 1970-01-01 00:00:00 +0000 +++ examples/clumps/clump-hopper-test.py 2014-08-12 19:46:58 +0000 @@ -0,0 +1,79 @@ +# -*- coding: utf-8 + +from yade import pack,export,qt,geom +import itertools +from numpy import * + + +kinEnergyMax = 100000 +# Parameters +tc=0.001# collision time +en=.3 # normal restitution coefficient +es=.3 # tangential restitution coefficient +frictionAngle=radians(35)# +density=2700 +# facets material +facetMat=O.materials.append(ViscElMat(frictionAngle=frictionAngle,tc=tc,en=en,et=es)) +# default spheres material +dfltSpheresMat=O.materials.append(ViscElMat(density=density,frictionAngle=frictionAngle,tc=tc,en=en,et=es)) + +O.dt=.05*tc # time step + +Rs=0.05 # particle radius + +# Create geometry + +x0=0.; y0=0.; z0=0.; ab=.7; at=2.; h=1.; hl=h; al=at*3 + +zb=z0; x0b=x0-ab/2.; y0b=y0-ab/2.; x1b=x0+ab/2.; y1b=y0+ab/2. +zt=z0+h; x0t=x0-at/2.; y0t=y0-at/2.; x1t=x0+at/2.; y1t=y0+at/2. +zl=z0-hl;x0l=x0-al/2.; y0l=y0-al/2.; x1l=x0+al/2.; y1l=y0+al/2. + +vibrationPlate = O.bodies.append(geom.facetBunker((x0,y0,z0), + dBunker=ab*4.0,dOutput=ab*1.7,hBunker=ab*3,hOutput=ab,hPipe=ab/3.0, + wallMask=4,segmentsNumber=10,material=facetMat)) + +# Create engines +O.engines=[ + ForceResetter(), + InsertionSortCollider([Bo1_Sphere_Aabb(),Bo1_Facet_Aabb()]), + InteractionLoop( + [Ig2_Sphere_Sphere_ScGeom(), Ig2_Facet_Sphere_ScGeom()], + [Ip2_ViscElMat_ViscElMat_ViscElPhys()], + [Law2_ScGeom_ViscElPhys_Basic()], + ), + DomainLimiter(lo=(-4,-4,-1),hi=(4,4,4),iterPeriod=5000,label='domLim'), + NewtonIntegrator(damping=0, gravity=[0,0,-9.81]), + PyRunner(iterPeriod=6500,command='addBodies()',nDo=7,label='addb'), + PyRunner(iterPeriod=1000,command='state()',label='state'), +] + +numSphereGen = 0 +def addBodies(): + global numSphereGen + # Create clumps... + clumpColor=(0.0, 0.5, 0.5) + for k,l in itertools.product(arange(0,10),arange(0,10)): + clpId,sphId=O.bodies.appendClumped([sphere(Vector3(x0t+Rs*(k*4+2),y0t+Rs*(l*4+2),i*Rs*2+zt+ab*3),Rs,color=clumpColor,material=dfltSpheresMat) for i in xrange(4)]) + numSphereGen += len(sphId) + + # ... and spheres + spheresColor=(0.4, 0.4, 0.4) + for k,l in itertools.product(arange(0,9),arange(0,9)): + sphAloneId=O.bodies.append( [sphere( Vector3(x0t+Rs*(k*4+4),y0t+Rs*(l*4+4),i*Rs*2.3+zt+ab*3),Rs,color=spheresColor,material=dfltSpheresMat) for i in xrange(4) ] ) + numSphereGen += len(sphAloneId) + +def state(): + global numSphereGen + print "Iter %d: Total number of generated spheres %d, removed particles %d, current particles %d, kinEnergy %g"%(O.iter, numSphereGen, domLim.nDeleted, numSphereGen-domLim.nDeleted, utils.kineticEnergy()) + if (utils.kineticEnergy() > kinEnergyMax): + print "Kinetic energy is over a threshold value! Error!" + +addBodies() + + +from yade import qt +qt.View() +O.saveTmp() + +#O.run(50001) === added file 'scripts/checks-and-tests/checks/checkClumpHopper.py' --- scripts/checks-and-tests/checks/checkClumpHopper.py 1970-01-01 00:00:00 +0000 +++ scripts/checks-and-tests/checks/checkClumpHopper.py 2014-08-12 19:46:58 +0000 @@ -0,0 +1,77 @@ +# -*- coding: utf-8 +# This script is used in --check to keep the functionality of adding/removal +# of particles and clumps functional + +import itertools +from numpy import * + + +kinEnergyMax = 100000 +# Parameters +tc=0.001# collision time +en=.3 # normal restitution coefficient +es=.3 # tangential restitution coefficient +frictionAngle=radians(35)# +density=2700 +# facets material +facetMat=O.materials.append(ViscElMat(frictionAngle=frictionAngle,tc=tc,en=en,et=es)) +# default spheres material +dfltSpheresMat=O.materials.append(ViscElMat(density=density,frictionAngle=frictionAngle,tc=tc,en=en,et=es)) + +O.dt=.05*tc # time step + +Rs=0.05 # particle radius + +# Create geometry + +x0=0.; y0=0.; z0=0.; ab=.7; at=2.; h=1.; hl=h; al=at*3 + +zb=z0; x0b=x0-ab/2.; y0b=y0-ab/2.; x1b=x0+ab/2.; y1b=y0+ab/2. +zt=z0+h; x0t=x0-at/2.; y0t=y0-at/2.; x1t=x0+at/2.; y1t=y0+at/2. +zl=z0-hl;x0l=x0-al/2.; y0l=y0-al/2.; x1l=x0+al/2.; y1l=y0+al/2. + +vibrationPlate = O.bodies.append(geom.facetBunker((x0,y0,z0), + dBunker=ab*4.0,dOutput=ab*1.7,hBunker=ab*3,hOutput=ab,hPipe=ab/3.0, + wallMask=4,segmentsNumber=10,material=facetMat)) + +# Create engines +O.engines=[ + ForceResetter(), + InsertionSortCollider([Bo1_Sphere_Aabb(),Bo1_Facet_Aabb()]), + InteractionLoop( + [Ig2_Sphere_Sphere_ScGeom(), Ig2_Facet_Sphere_ScGeom()], + [Ip2_ViscElMat_ViscElMat_ViscElPhys()], + [Law2_ScGeom_ViscElPhys_Basic()], + ), + DomainLimiter(lo=(-4,-4,-1),hi=(4,4,4),iterPeriod=5000,label='domLim'), + NewtonIntegrator(damping=0, gravity=[0,0,-9.81]), + PyRunner(iterPeriod=6500,command='addBodies()',nDo=7,label='addb'), + PyRunner(iterPeriod=10000,command='state()',label='state'), +] + +numSphereGen = 0 +def addBodies(): + global numSphereGen + # Create clumps... + clumpColor=(0.0, 0.5, 0.5) + for k,l in itertools.product(arange(0,10),arange(0,10)): + clpId,sphId=O.bodies.appendClumped([sphere(Vector3(x0t+Rs*(k*4+2),y0t+Rs*(l*4+2),i*Rs*2+zt+ab*3),Rs,color=clumpColor,material=dfltSpheresMat) for i in xrange(4)]) + numSphereGen += len(sphId) + + # ... and spheres + spheresColor=(0.4, 0.4, 0.4) + for k,l in itertools.product(arange(0,9),arange(0,9)): + sphAloneId=O.bodies.append( [sphere( Vector3(x0t+Rs*(k*4+4),y0t+Rs*(l*4+4),i*Rs*2.3+zt+ab*3),Rs,color=spheresColor,material=dfltSpheresMat) for i in xrange(4) ] ) + numSphereGen += len(sphAloneId) + +def state(): + global numSphereGen + global resultStatus + print "Iter %d: Total number of generated spheres %d, removed particles %d, current particles %d, kinEnergy %g"%(O.iter, numSphereGen, domLim.nDeleted, numSphereGen-domLim.nDeleted, utils.kineticEnergy()) + if (utils.kineticEnergy() > kinEnergyMax): + print "Kinetic energy is over a threshold value! Error!" + resultStatus += 1 + O.pause() + +addBodies() +O.run(50002, True)
_______________________________________________ Mailing list: https://launchpad.net/~yade-dev Post to : [email protected] Unsubscribe : https://launchpad.net/~yade-dev More help : https://help.launchpad.net/ListHelp

