← Back to team overview

yade-users team mailing list archive

[Question #694706]: Cpm model

 

New question #694706 on Yade:
https://answers.launchpad.net/yade/+question/694706

Hello everyone,
I'm using the cpm model to do a simple 2D unconfined compression test. After generating the packing, I load the packing into the compression test in which I erase the other walls except the upper and the lower walls but it seems that there is no cohesion since the packing explodes after loading. I wonder why there is  no cohesion within the particles.

Here is my srcipts for making the packing:

from yade import pack

O.materials.append(CpmMat(young=24e9,frictionAngle=0.,poisson=0.2,density=4800,sigmaT=300.e6,relDuctility=30,epsCrackOnset=1.e-4,isoPrestress=0.,label='concrete'))
O.materials.append(FrictMat(young=2e11,poisson=.4,frictionAngle=0,density=0,label='frictionlessWalls'))
sp = pack.SpherePack()
size = .3
sp.makeCloud(minCorner=(0,0,.05),maxCorner=(size,size,.05),rMean=.005,rRelFuzz=0.2,num=400,periodic=False,seed=1)
O.bodies.append([sphere(center,rad,material='concrete') for center,rad in sp])
walls=aabbWalls(thickness=0,material='frictionlessWalls')
wallIds=O.bodies.append(walls)
#O.bodies.erase(wallIds[4])
#O.bodies.erase(wallIds[5])

#O.cell.hSize = Matrix3(size,0,0, 0,size,0, 0,0,.1)
print len(O.bodies)
r = numpy.zeros(400)
zdim = 5.e-2
for i in range(400):
   p=O.bodies[i]
   p.state.blockedDOFs = 'zXY'
   p.state.mass = 2650 * zdim * pi * p.shape.radius**2 # 0.1 = thickness of cylindrical particle
   inertia = 0.5 * p.state.mass * p.shape.radius**2
   p.state.inertia = (.5*inertia,.5*inertia,inertia)
   r[i] = p.shape.radius

O.dt = .5*utils.PWaveTimeStep()
print O.dt

triax=TriaxialStressController(
   wall_bottom_id=wallIds[2],
   wall_top_id=wallIds[3],
   wall_left_id=wallIds[0],
   wall_right_id=wallIds[1],
   wall_back_id=wallIds[4],
   wall_front_id=wallIds[5],
   internalCompaction=False,
   stressMask = 3, #1 is x, 2 is y, 4 is z, Bitmask, if imposed goal`s are stresses (0 for none, 7 for all, 1 for direction 1, 5 for directions 1 and 3, etc. :ydefault:`7)
   goal1 = -1.e7*(zdim/max(r)/2),
   goal2 = -1.e7*(zdim/max(r)/2), # positive is tension, negative is compression
   #goal1 = -1.e7,
   #goal2 = -1.e7,
   goal3 = 0.,
   max_vel=0.01,
   label = 'triax'
)

O.engines = [
   ForceResetter(),
   InsertionSortCollider([Bo1_Sphere_Aabb(),Bo1_Box_Aabb()]),
   InteractionLoop(
      [Ig2_Sphere_Sphere_ScGeom6D(),Ig2_Box_Sphere_ScGeom()],
      [Ip2_FrictMat_FrictMat_FrictPhys(),
       Ip2_CpmMat_CpmMat_CpmPhys(
          label='cohesiveIp',
          cohesiveThresholdIter=0)],
      [Law2_ScGeom_FrictPhys_CundallStrack(),
       Law2_ScGeom_CpmPhys_Cpm()]
   ),
   triax,
   NewtonIntegrator(damping=.2)
]

while 1:
   O.run(1000,True)
   unb=unbalancedForce()
   area=0.
   for i in range(400):
      p = O.bodies[i]
      area += pi*p.shape.radius**2
   areatotal = triax.width*triax.height
   void=areatotal-area
   voidratio=void/area
   print 'unbalanced force:',unb,'voidratio:',voidratio
   if unb<0.001:
      O.save('rve_1st.yade.gz')
      break

any kind of help is appreciated.

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