corrupted double-linked list

Asked by Najm

Hi all,

I am running my Yade model. when the Yade model is small (8000 particles), the code works well. But when the same model has 1000000 particles, I get the following error:

corrupted double-linked list
Aborted (core dumped)

Can anyone help me understand why I get this error? The model compiles well, but when the first iteration is solved, the error appears.

Thank you for your help.

MY CODE:

#MATERIAL PROPERTIES
intR = 0.20 #connectivity parameter
DENS = 2500.00 #Density (kg/mm^3)
YOUNG = 1800.00 #Young's modulus (N/mm^2)
FRICT = 18.00 #Friction angle (degrees)
ALPHA = 0.20 #Poisson's ratio
TENS = 100.00 #Tensile strength (N/mm^2)
COH = 1000.00 #Shear strength (N/mm^2)

mn,mx=Vector3(-0.500000,-0.500000,-0.500000),Vector3(100.500000,86.525190,86.236515) # corners of the initial packing

#CREATING NODES
with open('Nodes.txt') as f:
  Nodes = [[float(x) for x in line.split()] for line in f]

O.materials.append(JCFpmMat(type=1,density=DENS,young=YOUNG,poisson=ALPHA,frictionAngle=radians(FRICT),tensileStrength=TENS,cohesion=COH,label='mat1'))

walls=aabbWalls([mn,mx],thickness=0,material='mat1')
wallIds=O.bodies.append(walls)

# PARTICLES
for i in range(1000000):
  if Nodes[i][3] == 1:
    O.bodies.append([ sphere(center=(Nodes[i][0],Nodes[i][1],Nodes[i][2]),radius=0.50,color = (1,0,0),material='mat1'),])
  else:
    O.bodies.append([ sphere(center=(Nodes[i][0],Nodes[i][1],Nodes[i][2]),radius=0.50,color = (0,1,0),material='mat1'),])

nbSpheres = 1000000.00

# PRINTING
from yade import plot
from pprint import pprint

# SIMULATION LOOP
O.engines=[
    ForceResetter(),
    InsertionSortCollider([Bo1_Sphere_Aabb()]),
    InteractionLoop(
        [Ig2_Sphere_Sphere_ScGeom(interactionDetectionFactor=intR)],
        [Ip2_JCFpmMat_JCFpmMat_JCFpmPhys(cohesiveTresholdIteration=1)],
        [Law2_ScGeom_JCFpmPhys_JointedCohesiveFrictionalPM()]
    ),
    GlobalStiffnessTimeStepper(active=1,timeStepUpdateInterval=10,timestepSafetyCoefficient=0.5, defaultDt=utils.PWaveTimeStep()),
    DFNFlowEngine(dead=1,label="flow"),
    NewtonIntegrator(damping= 0.80),
    PyRunner(command='BreakingBonds()',iterPeriod=1),
    PyRunner(command='Writting()',iterPeriod= 500),
]

#WRITTING RESULTS
number = 0
def Writting():
  global number
  number = number + 1
  f= open("Info%d.txt" %(number),"w+")
  f.write("%5.10f \n" % (O.time))
  f.write("%5.10f \n" % (flow.getPorePressure((50.000,43.013,42.868))))
  for i in range (20000):
    f.write("%5.10f \n" % (SaveDataNodes[i][0]))
  f.close()

def history():
  plot.addData(t=O.time,p=flow.getPorePressure((50.000,43.013,42.868)))

#Apply Qin (volume flow rate) in the center of the model.
flow.dead = 0
flow.defTolerance=0.3
flow.meshUpdateInterval=1
flow.useSolver=3
flow.permeabilityFactor=1
flow.viscosity=10
flow.bndCondIsPressure=[1,1,1,1,1,1]
flow.bndCondValue=[0,0,0,0,0,0]
flow.boundaryUseMaxMin=[0,0,0,0,0,0]
O.dt= 0.0010000000
O.dynDt=False

ti = O.time
O.engines=O.engines+[PyRunner(iterPeriod=2,command='history()')]
O.engines=O.engines+[PyRunner(iterPeriod=1,command='Pumping()')]
def Pumping():
  if O.time<(ti+0.2):
    flow.imposeFlux(Vector3(50.000,43.013,42.868),-1.0000000000)
  else:
    flow.imposeFlux(Vector3(50.000,43.013,42.868),0)

def BreakingBonds():
  global Bonds0
  CurrentBonds = 0
  for ii in O.interactions:
    CurrentBonds+=1
  if Bonds0 > CurrentBonds:
    Bonds0 = CurrentBonds
    print("BROKEN!")
    print(O.time)
    Writting()

#PLOTTING
plot.plots={'t':('p')}
plot.plot()

#CREATING CONNECTIVITY
with open('Connectivity.txt') as f:
  Connectivity = [[int(x) for x in line.split()] for line in f]

#CREATING INTERACTIONS
for i in range(5905449):
  if Connectivity[i][2] == 1:
    createInteraction(Connectivity[i][0],Connectivity[i][1])

Connectivity.clear()

#CREATING SAVEDATA
with open('SaveDataNodes.txt') as f:
  SaveDataNodes = [[int(x) for x in line.split()] for line in f]

#BOUND COUNT
Bonds0=0
for i in O.interactions:
  Bonds0+=1
print (Bonds0)

Question information

Language:
English Edit question
Status:
Expired
For:
Yade Edit question
Assignee:
No assignee Edit question
Last query:
Last reply:
Revision history for this message
Jan Stránský (honzik) said :
#1

Hello,
what is the output of
catchsegv ...
(where ... is how you run the script)
thanks
Jan

Revision history for this message
Robert Caulk (rcaulk) said :
#2

>Yade model is small (8000 particles), the code works well. But when the same model has 1000000 particles, I get the following error:

Please provide the system specs and the installation method [1].

FlowEngine is already pushing workstation limits with GPU acceleration around 300k particles [2][3]. So, I suspect you don't have the necessary hardware to decompose a matrix with 7 million DOFS :-).

[1]https://www.yade-dem.org/wiki/Howtoask
[2]https://www.sciencedirect.com/science/article/pii/S0010465519303340
[3]https://yade-dem.org/doc/GPUacceleration.html

Revision history for this message
Anton Gladky (gladky-anton) said :
#3

Smells like a heap corruption. Please create an issue on gitlab with the script which reproduces the problem. Thanks.

Revision history for this message
Najm (mrhappy) said :
#4

Thank you all for your suggestions.
My computer specs are as follows:

Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 16
On-line CPU(s) list: 0-15
Thread(s) per core: 2
Core(s) per socket: 8
Socket(s): 1
NUMA node(s): 1
Vendor ID: AuthenticAMD
CPU family: 23
Model: 113
Model name: AMD Ryzen 7 3800X 8-Core Processor
Stepping: 0
CPU MHz: 2195.457
CPU max MHz: 3900.0000
CPU min MHz: 2200.0000
BogoMIPS: 7785.27
Virtualization: AMD-V
L1d cache: 32K
L1i cache: 32K
L2 cache: 512K
L3 cache: 16384K
NUMA node0 CPU(s): 0-15
RAM 32897728 kB

I installed yade-2020.01a via the following commands:
GO TO BUILD DIRECTORY
cmake -DCMAKE_INSTALL_PREFIX=/home/nabid/Documents/myYade/install /home/nabid/Documents/myYade/trunk
cmake -DCMAKE_INSTALL_PREFIX=../install ../trunk
cmake -DENABLE_USEFUL_ERRORS=OFF ../trunk
cmake -ENABLE_USEFUL_ERRORS=OFF ../trunk
make
make install
make check

I run the script via the command line ./yade-2020.01a Model20.py and then I press play.

The output of catchsegv is:
corrupted double-linked list
Aborted (core dumped)

Thank you for your help

Revision history for this message
Launchpad Janitor (janitor) said :
#5

This question was expired because it remained in the 'Open' state without activity for the last 15 days.