Young's modulus or the effect of the wall on the test

Asked by 孙灿

Hello, I completed a left-right symmetrical simulation, adding walls to the left, right, and bottom, and changing the default Young's modulus (1e9). According to the real situation, the symmetric simulation, its result must also be symmetrical, but in my recent simulation results, it is not very good to conform to this symmetry law, the left result and the right result deviation. Does this have anything to do with me changing Young's modulus? Or is it a wall?

Question information

Language:
English Edit question
Status:
Answered
For:
Yade Edit question
Assignee:
No assignee Edit question
Last query:
Last reply:
Revision history for this message
Karol Brzezinski (kbrzezinski) said :
#1

Hi,

Please provide the MVE [1]. If the results are not symmetric, the simulation is not symmetric either. You described symmetric boundary conditions, but we don't know anything about loading or granular packing in your simulation.

Best wishes,
Karol

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

Revision history for this message
孙灿 (suncan) said :
#2

The code is as follows:

#Material constants(1)
Density1 = 1836
FrictionAngle1 = 5
PoissonRatio1 = 0.4
Young1 = 1e8
Damp = 0.5
AvgRadius1 = 0.05
N_particles = 10000

#Material constants(23)
Density23 = 2000
FrictionAngle23 = 27
PoissonRatio23 = 0.35
Young23 = 1e8
Damp = 0.5
AvgRadius1 = 0.05
N_particles = 10000

#Material constants(28)
Density28 = 2142
FrictionAngle28 = 1
PoissonRatio28 = 0.3
Young28 = 1e8
Damp = 0.5
AvgRadius = 0.05
N_particles = 10000

#Material constants(37)
Density37 = 2244
FrictionAngle37 = 1
PoissonRatio37 = 0.3
Young37 = 1e9
Damp = 0.5
AvgRadius = 0.05
N_particles = 10000

#Wall constants
WDensity = 0
WFrictionAngle = 0.0
WPoissonRatio = 0.1
WYoung = 50e9

#time calculation
startT = O.time
endT = O.time
timeSpent = endT - startT

SphereMat37 = O.materials.append(FrictMat(young = Young37, poisson = PoissonRatio37, frictionAngle = radians(FrictionAngle37), density = Density37))
SphereMat28 = O.materials.append(FrictMat(young = Young28, poisson = PoissonRatio28, frictionAngle = radians(FrictionAngle28), density = Density28))
SphereMat23 = O.materials.append(FrictMat(young = Young23, poisson = PoissonRatio23, frictionAngle = radians(FrictionAngle23), density = Density23))
SphereMat1 = O.materials.append(FrictMat(young = Young1, poisson = PoissonRatio1, frictionAngle = radians(FrictionAngle1), density = Density1))

WallMat = O.materials.append(FrictMat(young = WYoung, poisson = WPoissonRatio, frictionAngle = radians(WFrictionAngle)))

from yade import pack,plot
O.bodies.append(geom.facetBox((0.05, 30, 30), (0.3, 30, 30), wallMask=63,material=WallMat))

sp = pack.SpherePack()
sp.makeCloud(Vector3(0.05,0,0),Vector3(0.05,60,46), rMean=0.08, rRelFuzz=0)
sp.toSimulation(material = SphereMat37)

sp = pack.SpherePack()
sp.makeCloud(Vector3(0.05,0,46),Vector3(0.05,60,51), rMean=0.06, rRelFuzz=0)
sp.toSimulation(material = SphereMat28)

sp = pack.SpherePack()
sp.makeCloud(Vector3(0.05,0,51),Vector3(0.05,60,57), rMean=0.03, rRelFuzz=0)
sp.toSimulation(material = SphereMat23)

sp = pack.SpherePack()
sp.makeCloud(Vector3(0.05,0,57),Vector3(0.05,60,60), rMean=0.05, rRelFuzz=0)
sp.toSimulation(material = SphereMat1)

(xdim,ydim,zdim)= aabbDim()

print("Height is ",zdim)

for b in O.bodies:
   if isinstance(b.shape,Sphere):
       b.state.blockedDOFs='ZxY'

       b.shape.color=(0,0,1.)

circleRadius=3.14
circleCenter = Vector3(0.05,30,12)
#myEngine.dead = True
O.engines = [
        ForceResetter(),
        InsertionSortCollider([Bo1_Sphere_Aabb(), Bo1_Facet_Aabb()]),
        InteractionLoop(
                [Ig2_Sphere_Sphere_ScGeom(), Ig2_Facet_Sphere_ScGeom()],
                [Ip2_FrictMat_FrictMat_FrictPhys()],
                [Law2_ScGeom_FrictPhys_CundallStrack()]
        ),
        NewtonIntegrator(gravity=(0, 0, -9.81), damping=0.4),
        PyRunner(command='checkUnbalanced()', realPeriod=2,label="myEngine"),
        PyRunner(command='addPlotData()', iterPeriod=100)
]
O.dt = 0.5 * PWaveTimeStep()
O.trackEnergy = True

def ranse():
 for b in O.bodies:
  if isinstance(b.shape,Sphere):
   #b.state.blockedDOFs='zxy'
   b.state.vel=(0,0,0)
   b.state.angVel=(0,0,0)
  if b.state.pos[2]<=23:
   b.shape.color=(0,1,1.)
  if b.state.pos[2]>23 and b.state.pos[2]<=25.5:
       b.shape.color=(2.,2.,1.)
  if b.state.pos[2]>28.5 :
       b.shape.color=(1,1,0)
  if b.state.pos[2]>30:
   O.bodies.erase(b.id)

def shuju():
 zMax = max(b.state.pos[2] for b in O.bodies if isinstance(b.shape,Sphere))
 print("Z ",zMax)
 ceng = zMax-0.2
 for b in O.bodies:
  if b.state.pos[2]>ceng:
   print(b.id,b.state.pos)
   shuzu.append(b.id)
 print(shuzu)

def addPlotData():
 plot.addData(i=O.iter, unbalanced=unbalancedForce(), **O.energy)

def duqu():
 for i in shuzu:
  b = O.bodies[i]
  print("voila",i,b.state.pos)
def wadong1():
 for b in O.bodies:
  d = (b.state.pos - circleCenter).norm()
  if d < circleRadius:
   O.bodies.erase(b.id)

O.saveTmp()

from yade import qt
qt.Controller()
qt.View()

I want to know if Young's modulus and walls cause asymmetry in the simulation results.

Revision history for this message
Jan Stránský (honzik) said :
#3

>> Please provide the MVE [1]
> The code is as follows:
> def shuju():
> def shuju():
> def duqu():

almost half of the code are definitions of functions, that are not used.
For a MWE, please remove such code (to satisfy M=minimal).

> I completed a left-right symmetrical simulation
> sp.makeCloud(...)

makeCloud is never symmetric, so your simulation is NOT symmetric.
Maybe something like roughly symmetric, but not perfectly symmetric.

> the left result and the right result deviation.

What are "the left and the right results"?
This should have been in the MWE.

> Does this have anything to do with me changing Young's modulus?
> I want to know if Young's modulus ... cause asymmetry in the simulation results.

No

> Or is it a wall?
> I want to know if ... walls cause asymmetry in the simulation results.

We don't know what are "the simulation results"...
But as the walls are symmetric, I would say not.

Cheers
Jan

Revision history for this message
孙灿 (suncan) said :
#4

Since makeCloud is not completely symmetrical, is there a way to generate particles as symmetrically as possible? If makeCloud is not symmetrical, then every simulation result will have a deviation, or even a large deviation, is this correct?

Revision history for this message
Jan Stránský (honzik) said :
#5

> Since makeCloud is not completely symmetrical, is there a way to generate particles as symmetrically as possible?

There are many options:
- using predefined regular (and therefor symmetric) packing [2,3]
- using a different custom packing (e.r. rectangular grid)
- using makeCloud on half of the domain and then mirror it to the remaining half
- ...

> If makeCloud is not symmetrical, then every simulation result will have a deviation, or even a large deviation, is this correct?

No.

Not every simulation uses makeCloud, so the question is meaningless (therefore no) for those simulations not using it.

Not every result will have deviation (from symmetry I assume) even if using makeCloud, it depends on the type of results, circumstances, using of makeCloud etc.
See above, you can simply mirror makeCloud to make the final packing symmetric, even if makeCloud itself is not symmetric.

I would state it as:
Simulation using makeCloud may have results which deviates (even largely) from symmetry, but not necessarily.

Cheers
Jan

[2] https://yade-dem.org/doc/yade.pack.html#yade.pack.regularHexa
[3] https://yade-dem.org/doc/yade.pack.html#yade.pack.regularOrtho

Revision history for this message
Bruno Chareyre (bruno-chareyre) said :
#6

Hi,
Without knowing anything of your problem. My first guess is that even a symmetric distribution of positions will result in non-symmetric results, provided that the number of particles "N" is large enough. That's due to chaotic behavior.
It may approach symmetry asymptotically if it's averaged on many different realizations, or if N tends to infinity.

If you want to force symmetric results you can simply simulate only one half of the problem...

Bruno

Can you help with this problem?

Provide an answer of your own, or ask 孙灿 for more information if necessary.

To post a message you must log in.