# The distribution of contact normal direction and contact normal force are not uniform after isotropic consolidation

After isotropic consolidation, I check the contact normal direction and contact normal force distribution which should be evenly distributed in all directions, and I found they are not uniform. I don't know what's wrong, can you help me, thank you!

1. The code of isotropic consolidation is as follows:

##______________ First section, generate sample_________

from __future__ import print_function

from yade import pack, qt, plot

from math import *

import matplotlib; matplotlib.

import pylab

nRead=readParam

## model parameters

## material parameters

young=2e8,

poisson=.2,

alphaKtw=0,

competaRoll=.1,

etaTwist=0,

## fluid parameters

## control parameters

damp=0,

## output specifications

)

from yade.params.table import *

mn,mx=Vector3(

psdSizes=

psdCumm=

# create materials for spheres

#shear strength is the sum of friction and adhesion, so the momentRotationL

O.materials.

O.materials.

walls=aabbWalls

wallIds=

# generate particles packing

sp=pack.

sp.makeCloud(

sp.toSimulation

O.engines=[

),

# specify target values and whether they are strains or stresses

# type of servo-control, external walls compaction

),

]

qt.View()

O.dt=0.

import sys

while True:

O.run(

unb=

print(

if unb<stabilityTh

break

# reaching a specified porosity precisely

while triax.porosity>

compFricDeg

setContactF

print(

sys.

while True:

if unb<stabilityTh

break

# check the position of spheres

maxX=O.

minX=O.

maxY=O.

minY=O.

maxZ=O.

minZ=O.

ball_out_

for b in O.bodies:

if b.state.pos[0]>maxX or b.state.

print('the walls or balls are moving too fast, the time step is too big')

elif b.state.pos[1]>maxY or b.state.

print('the walls or balls are moving too fast, the time step is too big')

if b.state.pos[2]>maxZ or b.state.

print('the walls or balls are moving too fast, the time step is too big')

print(ball_

# change the contact parameters to the final calibration value

setContactFrict

for b in O.bodies:

b.mat.

for i in O.interactions:

i.phys.

O.save(

print('Compacted state saved')

binsSizes, binsProc, binsSumCum=

pylab.semilogx(

pylab.show()

2. The code of contact normal distribution is as follows:

O.load(

def plotdirections(

"""Plot 3 histograms for distribution of interaction directions, in yz,xz and xy planes and

(optional but default) histogram of number of interactions per body. If sphSph only sphere-sphere interactions are considered for the 3 directions histograms.

:returns: If *noShow* is ``False``, displays the figure and returns nothing. If *noShow*, the figure object is returned without being displayed (works the same way as :yref:`

"""

import pylab,math

from yade import utils

for axis in [0,1,2]:

fc=[0,0,0]

fc[axis]=1.

theta1=d[0]

radii=d[1]

# 1.1 makes small gaps between values (but the column is a bit decentered)

if numHist:

if noShow: return pylab.gcf()

else:

pylab.ion()

plotdirections(

3. The code of contact normal force distribution is as follows:

import pylab,math

O.load(

nBins=20

def contact_

'''calculate the contact normal force distribution

param nBins: the number of histograms

return:

*

'''

contact_

contact_

contact_

contact_nXY=[0 for i in range(nBins)]

contact_nXZ=[0 for i in range(nBins)]

contact_nYZ=[0 for i in range(nBins)]

# use only sphere-sphere contacts

for i in O.interactions:

if not isinstance(

if not isinstance(

if angleXY<0:

if angleXZ<0:

if angleYZ<0:

if nXY==nBins:

if nXZ==nBins:

if nYZ==nBins:

for i in range(nBins):

return contact_

contact_

theta1=[0 for i in range(nBins)]

for i in range(nBins):

theta1[

theta2=[x+math.pi for x in theta1]

theta=theta1+theta2

contact_

contact_

contact_

contact_

contact_

contact_

contact_

for axis in [0,1,2]:

fc=[0,0,0]

fc[axis]=1.

subp=

pylab.

pylab.

pylab.savefig(

pylab.ion()

pylab.show()

The figure links of contact normal distribution and contact normal force distribution are as follows:

1. https:/

2. https:/

## Question information

- Language:
- English Edit question

- Status:
- Solved

- For:
- Yade Edit question

- Assignee:
- No assignee Edit question

- Solved by:
- Zhicheng Gao

- Solved:

- Last query:

- Last reply: