← Back to team overview

yade-users team mailing list archive

Re: [Question #676451]: optimize camputational time for vibrated granular media

 

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

Bruno Chareyre posted a new comment:
I see.
Well, as I just reduced the radius a little to make them all fit in I can give  you some results with -j4  (also reduced verletDist but the speedup is small, script below):

200 spheres: 0.52 sec for 10k iterations
2000 spheres: 5.5 sec for 10k iterations

That's nearly linear.
Unless the the cost in LAMMPS is sub-linear (how is that possible?!) I can't imagine how yade becomes 100x slower. Do you have approximately similar numbers?

Could it be that sphere insertions makes it *very* different?

Bruno

from yade import pack,ymport,export,geom,bodiesHandling,timing
import numpy as np
import math
import sys
import random

def adder():
     if(len(O.bodies)<Nball+nBodyCont):
		sp=pack.SpherePack()
		sp.makeCloud(minCorner=(-rcont/1.4,-rcont/1.4,hcone),maxCorner=(rcont/1.4,rcont/1.4,hcone+hcil),rMean=rball*0.8,num=Nball+60-len(O.bodies))
		sp.toSimulation()

#Dimensioni utili
rball=0.002
hcone=6.37*rball
rcont=22.5*rball
rconelow=4*rball
hcil=17.13*rball


Nball=int(sys.argv[1]) #Number Of Ball
A=0.00025 #amplitude shaker
fr=200 #freq shaker


#Steel
densSteel=8000
ySteel=21e7 #originale e9
poisSteel=0.293
shearModStell=ySteel/(2*(1+poisSteel))


#Plaexiglass
densPMMA=1190
yPMMA=33e6
poissPMMA=0.37


frictAngle=radians(26.57)


#Add material
#plexiglass as lammps
O.materials.append(FrictMat(young=yPMMA, poisson=poissPMMA,
frictionAngle=frictAngle,density=densPMMA, label='lmpPMMA'))


#Steel as lammps
O.materials.append(FrictMat(young=ySteel, poisson=poisSteel,
frictionAngle=frictAngle,density=densSteel, label='lmpSteel'))


#rayleigh time
tRay=math.pi*rball*(densSteel/shearModStell)**(0.5)/(0.1631*poisSteel+0.8766)

#container
coneId=O.bodies.append(geom.facetCone(Vector3(0,0,hcone/2.),rcont,rconelow,hcone,orientation=Quaternion((0,0,1),0),wallMask=(False*1+True*2+True*4),material='lmpPMMA'))
cyliId=O.bodies.append(geom.facetCylinder(Vector3(0,0,hcil/2.+hcone), rcont,hcil,orientation=Quaternion((0,0,1),0), wallMask=(True*1+False*2+True*4),material='lmpPMMA'))
contenitore=coneId+cyliId

nBodyCont=len(O.bodies) #60 facets

track=[]
for k in range(nBodyCont,len(O.bodies)):
     track.append(O.bodies[k])

O.engines=[
     ForceResetter(),
     InsertionSortCollider([Bo1_Sphere_Aabb(),Bo1_Facet_Aabb(),],label='collider',verletDist=rball*0.3),
     InteractionLoop([Ig2_Sphere_Sphere_ScGeom(),Ig2_Facet_Sphere_ScGeom(),
                 ], [Ip2_FrictMat_FrictMat_MindlinPhys(betan=0.4, betas=0.4),], [Law2_ScGeom_MindlinPhys_Mindlin(),],),
     NewtonIntegrator(gravity=(0,0,-9.8),damping=0.0),
     ]

O.engines = O.engines + [HarmonicMotionEngine(ids = contenitore, A = (0,0,A), f = (0,0,fr), label='shaker')]
O.engines = O.engines + [PyRunner(command = "print O.iter, O.time,O.speed, O.realtime,kineticEnergy()",iterPeriod=10000)]+[PyRunner(command =
"adder()",iterPeriod=10000)]

O.dt=0.2*tRay
O.timingEnabled=False
O.run(20000,1)
timing.reset()
O.timingEnabled=True
O.run(10000,1)
timing.stats()

-- 
You received this question notification because your team yade-users is
an answer contact for Yade.