yade-users team mailing list archive
-
yade-users team
-
Mailing list archive
-
Message #29597
[Question #706855]: Segmentation fault (core dumped) when increasing the GridConnection number
New question #706855 on Yade:
https://answers.launchpad.net/yade/+question/706855
I have a question when generating the geogrid sample.
When I increased the number of nodes (e.g., "nbL" from 10 to 60), the "Segmentation fault " appears in the terminal. I have confirmed that the program woks normally if only unidirectional ribs are generated.
My script is attched below:
___________________________________________________________________
# -*- encoding=utf-8 -*-
from builtins import zip
from builtins import range
from yade.gridpfacet import *
from yade import pack,ymport,export,geom,bodiesHandling, plot,utils,qt
import pylab
import matplotlib; matplotlib.rc('axes',grid=True)
#### tensile control
leftTensilePos = 0.002
rightTensilePos = 0.098
O.engines = [
ForceResetter(),
InsertionSortCollider([
Bo1_GridConnection_Aabb(),
]),
InteractionLoop(
[Ig2_GridNode_GridNode_GridNodeGeom6D()], [Ip2_CohFrictMat_CohFrictMat_CohFrictPhys(setCohesionNow=True, setCohesionOnNewContacts=False)],
[Law2_ScGeom6D_CohFrictPhys_CohesionMoment()]
),
NewtonIntegrator(gravity=(0, 0, -10), damping=0.1, label='newton'),
#VTKRecorder(iterPeriod=10000, recorders=['spheres','facets','boxes','stress','colors','intr'], fileName='vtkrecorder/p1-'),
PyRunner(command='history()',iterPeriod=1),
PyRunner(command='plotAddData1()',iterPeriod=100),
]
spherematid = O.materials.append(
CohFrictMat(
young=1.74e9,#1.74e9,
alphaKr=2,
alphaKtw=2,
poisson=0.5,
density=800,
frictionAngle=radians(10),
normalCohesion=9e9,
shearCohesion=9e9,
momentRotationLaw=True,
label='spheremat'
)
)
print('spherematid',spherematid)
### Parameters of a rectangular grid ###
L = 2.1 #length [m] aperture size = 30 mm, grid_gap=35 mm
l = 2.1 #width [m]
nbL =60 #number of grids for the length [#]
nbl =60 #number of grids for the width [#]
nbLL = nbL+1
nbll = nbl+1 #number of nodes for the width
rrr = 0.0025 #L / 100. #radius
color = [255. / 255., 102. / 255., 0. / 255.]
nodesIds1 = []
#Create all nodes first :
for i in range(0, nbLL):
for j in range(0, nbll):
nodesIds1.append(O.bodies.append(gridNode([i * L / nbL, j * l / nbl, 0], rrr, wire=True, fixed=False, material='spheremat', color=color)))
#print(nodesIds[:-1])
ConnectionIds1 = []
#Create connection between the nodes
for i in range(0, len(nodesIds1)):
for j in range(i + 1, len(nodesIds1)):
dist = (O.bodies[i].state.pos - O.bodies[j].state.pos).norm()
if (dist <= l / nbl * 1.01):
ConnectionIds1.append(O.bodies.append(gridConnection(i, j, rrr, color=color))) #
print(ConnectionIds1)
leftNode1 = [O.bodies[s] for s in nodesIds1 if O.bodies[s].state.pos[0]<leftTensilePos] #left node
rightNode1 = [O.bodies[s] for s in nodesIds1 if O.bodies[s].state.pos[0]>rightTensilePos]#right node
for s in leftNode1:
s.shape.color = (1,0,0)
s.dynamic = False
vel = 0
def history():
for s in leftNode1:
s.shape.color = (1,0,0)
s.state.blockedDOFs = 'xyzXYZ'
s.state.vel = (-vel,0,0)
def plotAddData1():
f_leftNode1 = sum(O.forces.f(b.id)[0] for b in leftNode1)
f_rightNode1 = sum(O.forces.f(b.id)[0] for b in rightNode1)
f_both1 = .5*(-f_rightNode1+f_leftNode1)
f1 =f_leftNode1
strain1 = (rightNode1[0].state.displ()[0] - leftNode1[0].state.displ()[0]) / (mx-mm)*100 #[%]
height1=rightNode1[0].state.refPos[2]-rightNode1[0].state.pos[2]
plot.addData(
i = O.iter,
f_both1 = f_both1,
height1 = height1,
strain1 = strain1,
)
plot.plots = { 'i':('height1',), }
plot.plot()
O.dt = 0.5*PWaveTimeStep()
O.saveTmp()
qt.View()
--
You received this question notification because your team yade-users is
an answer contact for Yade.