Output of force chain in Periodic simulation looks very strange

Asked by Wang Yu on 2020-07-28

Hello!

I use "export.VTKExporter.exportInteractions(what=dict(forceN='i.phys.normalForce.norm()'))" to export force chain and "VTKRecorder" to export spheres' information like positions.

But I found that the force chain and the particles do not match perfectly when I observed them in paraview. In detail, some of the force chain seems to fly out of the periodic cell. For example, particles positions on the left/up side of the cell show no force chain(there should have been). On the right/down side of the cell, the force chain(should appear on the left/up) appear out of the cell.

I don't know if I made myself clear. I guess the problem can be solved by using "cell.wrap" properly but I don't know how.

Looking forward to your help. Thanks!

Question information

Language:
English Edit question
Status:
Open
For:
Yade Edit question
Assignee:
No assignee Edit question
Last query:
2020-07-29
Last reply:
2020-07-28
Jan Stránský (honzik) said : #1

Hello,

please provide a MWE [1]

If I got your point and remember correctly the implementation, what you describe is intended behavior.
I think (will test it on the MWE :-) that the export is such that the "periodic" interactions are all place to the one side, while they are not present on the other side.

cheers
Jan

[1] https://www.yade-dem.org/wiki/Howtoask

Wang Yu (wangyu93) said : #2

I intended to put my MWE last time but actually I am using the FEMxDEM framework by NingGuo and this forum doesn't allow me to upload .gz file.
So I made a similar situation using the origin RVEpacking in the /examples/FEMxDEM. My own RVE after running FEMxDEM framework is much worse(obvious) than this.

from __future__ import print_function
from yade import pack
from yade import export

O.materials.append(FrictMat(young=6.e8,poisson=.8,frictionAngle=.0))

sp = pack.SpherePack()
size = .24
sp.makeCloud(minCorner=(0,0,.05),maxCorner=(size,size,.05),rMean=.005,rRelFuzz=.4,num=400,periodic=True,seed=1)
sp.toSimulation()
O.cell.hSize = Matrix3(size,0,0, 0,size,0, 0,0,.1)
print(len(O.bodies))
for p in O.bodies:
   p.state.blockedDOFs = 'zXY'
   p.state.mass = 2650 * 0.1 * 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)

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

O.engines = [
   ForceResetter(),
   InsertionSortCollider([Bo1_Sphere_Aabb()]),
   InteractionLoop(
      [Ig2_Sphere_Sphere_ScGeom()],
      [Ip2_FrictMat_FrictMat_FrictPhys()],
      [Law2_ScGeom_FrictPhys_CundallStrack()]
   ),
   PeriTriaxController(
      dynCell=True,
      goal=(-1.e5,-1.e5,0),
      stressMask=3,
      relStressTol=.001,
      maxUnbalanced=.001,
      maxStrainRate=(.5,.5,.0),
      doneHook='term()',
      label='biax'
   ),
   NewtonIntegrator(damping=.1)
]

def term():
   O.engines = O.engines[:3]+O.engines[4:]
   print(getStress())
   print(O.cell.hSize)
   setContactFriction(0.5)
   O.cell.trsf=Matrix3.Identity
   O.cell.velGrad=Matrix3.Zero
   for p in O.bodies:
      p.state.vel = Vector3.Zero
      p.state.angVel = Vector3.Zero
      p.state.refPos = p.state.pos
      p.state.refOri = p.state.ori
   O.save('0.yade.gz')
   O.pause()

O.run();O.wait()

########below is output part###########
vtk1 = export.VTKExporter('./tmp/force_chain')
vtk1.exportInteractions(what=dict(forceN='i.phys.normalForce.norm()'))

vtk2 = VTKRecorder(fileName='./tmp/particles',recorders=['spheres'])
vtk2()

Jan Stránský (honzik) said : #3

Hello,
sorry, I could not reproduce the problem on the MWE you have provided. Please write me a private message where we can solve this using images etc.
Cheers
Jan

Can you help with this problem?

Provide an answer of your own, or ask Wang Yu for more information if necessary.

To post a message you must log in.