yade-users team mailing list archive
-
yade-users team
-
Mailing list archive
-
Message #17347
[Question #669485]: ¿How to create a cylindrical solid body filled with uniformly distributed spheres for compression?
New question #669485 on Yade:
https://answers.launchpad.net/yade/+question/669485
Hi there:
I need to simulate a compression of a cylinder. First, I didn't know that the spheres shouldn't have the same radius, so I created a cylindrical predicate and filled it with regularOrtho and it worked fine (the compression). Later I was told that in order to be realistic the spheres should have an uniform or normal distribution so I filled the predicate this time using randomDensePack but then, the compression doesn't work well. What I can see is that the spheres don't behave like a body but like simply spheres in space, so what I need is a way to make them behave as being part of a solid body. I saw an example in which CohFrictMat was used and I thought that that was the solution but I get the same behaviour.... I post the source code I have right now...Thanks in advance
from yade import utils
from yade import pack
from yade import qt
sample_material=CohFrictMat(
young=4e9
,poisson=1
,density=1400
,frictionAngle=radians(30)
,isCohesive=True
,normalCohesion=1e8*1.2
,shearCohesion=.4e8*1.2
,momentRotationLaw=True
,label='sample_mat')
O.materials.append(sample_material)
O.materials.append(FrictMat(young=210e10,poisson=.7,frictionAngle=.1,label="steel")) # Acero
#DATOS PROBETA
RADIO = 0.075 #7.5 cm
ALTURA = 0.3 #30 cm
radio_particulas = 0.005 #5 mm
radio_fuzz = 0.001 #1 mm
#DATOS CAJAS SUPERIOR e INFERIOR
ancho = RADIO*2 #el mismo ancho que la probeta (cilindro)
largo = RADIO*2 #el mismo largo que la probeta (cilindro)
alto=0.01 #1 cm
#DATOS CAJAS LATERALES
alto_lat = ALTURA
ancho_lat = 0.01 #1 cm
largo_lat = RADIO*2
# randomDensePack packing
pred = pack.inCylinder((0,0,0),(0,0,ALTURA),radius=RADIO)
assembly = pack.randomDensePack(pred,radius=radio_particulas,rRelFuzz=radio_fuzz/radio_particulas,returnSpherePack=True)
assembly.toSimulation(material='sample_mat')
upperBox = box(center=(0,0,ALTURA+alto/2), extents=(ancho/2,largo/2,alto/2),fixed=True,wire=True,material='steel')
bottomBox = box(center=(0,0,-alto/2), extents=(ancho/2,largo/2,alto/2),fixed=True,wire=True, material='steel')
frontBox = box(center=(0,-(RADIO+ancho_lat/2),alto_lat/2), extents=(largo_lat/2,ancho_lat/2,alto_lat/2),fixed=True,wire=True,material='steel')
backBox = box(center=(0,RADIO+ancho_lat/2,alto_lat/2), extents=(largo_lat/2,ancho_lat/2,alto_lat/2),fixed=True,wire=True,material='steel')
leftBox = box(center=(-(RADIO+ancho_lat/2),0,alto_lat/2), extents=(ancho_lat/2,largo_lat/2,alto_lat/2),fixed=True,wire=True,material='steel')
rightBox = box(center=(RADIO+ancho_lat/2,0,alto_lat/2), extents=(ancho_lat/2,largo_lat/2,alto_lat/2),fixed=True,wire=True,material='steel')
O.bodies.append(upperBox)
O.bodies.append(bottomBox)
O.bodies.append(frontBox)
O.bodies.append(backBox)
O.bodies.append(leftBox)
O.bodies.append(rightBox)
###########################
# ENGINES
###########################
O.engines=[
ForceResetter(),
InsertionSortCollider([Bo1_Sphere_Aabb(aabbEnlargeFactor=1.25),Bo1_Box_Aabb()]),
InteractionLoop(
[Ig2_Sphere_Sphere_ScGeom6D(interactionDetectionFactor=1.2),Ig2_Box_Sphere_ScGeom()],
[Ip2_FrictMat_FrictMat_FrictPhys(),
Ip2_CohFrictMat_CohFrictMat_CohFrictPhys(setCohesionNow=True,setCohesionOnNewContacts=True)],
[Law2_ScGeom_FrictPhys_CundallStrack(),
Law2_ScGeom6D_CohFrictPhys_CohesionMoment(useIncrementalForm=True,label='cohesiveLaw')]
),
NewtonIntegrator(damping=0.3,gravity=(0,0,-9.81)),
TranslationEngine(translationAxis=[0,0,-1],velocity=0.5,ids=[upperBox.id]),
TranslationEngine(translationAxis=[0,0,1],velocity=0.5,ids=[bottomBox.id])
#VTKRecorder(iterPeriod=100,recorders=['spheres','boxes'],fileName='./videoFrames')
]
O.dt = utils.PWaveTimeStep()
try:
qt.Controller()
qt.View()
except:
pass
--
You received this question notification because your team yade-users is
an answer contact for Yade.