Public bug reported:

I seem to get a Segmentation fault (core dumped) when using
GridConnection, PFacet, and randomDensePack. And I am not sure why. I
have attached an image and "working" example.


Thanks in advance,
Justin


Edit: I could not seem to upload an picture or example code. Thus code
below:


from yade.gridpfacet import *
import numpy as np
from yade import utils
from yade import ymport
import sys,time,math,random

from yade import qt
qt.View()

#print(os.path.basename(__file__))
#quit()
########### ParallelEngine, -j4

boxCenter = (0,0,.025)
## double check that /2 would create correct length, I.e., import based_70 to 
see if they match... they should
boxDem = (.2123/2,.212/2,.064/2)  ### based_70 is 212.3x212.21x63.65

boxDem = (.07,.07,.025)  ###

blen = boxDem[0]*2  ## Length of Ball pit
bhei = .025       ## Height of Ball pit

# Spheres information
sphereRadius = .004 # [m]
nu = .48 
#G = 300000 # [Pa]
den_rub = 89724 # [kg/m^3]
yng_rub = 3000000 # [Pa] 
fric_rub = radians(38)  # [degrees] 
O.materials.append(FrictMat(frictionAngle=fric_rub,young=yng_rub,density=den_rub,poisson=nu,label='rubber'))
O.materials.append(FrictMat(young=200e9,density=8050,poisson=.3, 
label='steel')) # used steel properties to make rigid

## Stud informtion
#studStartZ = (.01+.022+.01905)
studStartZ = (.01+bhei+.01905)
transVel = 0.000222*2
rotVel = 0.00872665*2

### pack auto fills, i.e., I no longer pick the amount of spheres
pred = 
pack.inAlignedBox((-(boxDem[0]-.001),-(boxDem[0]-.001),bhei+sphereRadius/2+.001),((boxDem[0]-.001),(boxDem[0]-.001),bhei+.045))
sp = pack.randomDensePack(pred, radius=sphereRadius, 
memoizeDb='tmp/single_grass.sqlite', returnSpherePack=True)
sp.toSimulation(wire=False,material='rubber')

## Time step set to 20% of Rayleigh Wave
O.dt=.2*utils.RayleighWaveTimeStep() # 0.0011302534626965682
print(O.dt)

### Steps needed to run sim
sphereFalls = 1000                                                              
                                                ### Steps spheres need to fall 
and level out and turn on studs
startRot = sphereFalls+math.floor((studStartZ-bhei-.01)/transVel/O.dt)          
### Step needed for transVel to get studs level with spheres

## Rotation steps
deg_to_rad_length = (60*pi/180); # [rad]
num_sec_roto = deg_to_rad_length/rotVel; # [s]
num_of_steps_roto = num_sec_roto/O.dt;

endSim   = startRot     + math.floor(num_of_steps_roto)
### total steps in sim

O.engines=[
                ###Reset all forces stored in Scene::forces (O.forces in 
python). Typically, this is the first engine to be run at every step.          
In addition, reset those energies that should be reset, if energy tracing is 
enabled.
                ## Resets forces and moments that act on bodies
                ForceResetter(),

                ## Using bounding boxes find possible body collisions.
                InsertionSortCollider([
                Bo1_Facet_Aabb(), 
                Bo1_PFacet_Aabb(),
                Bo1_Sphere_Aabb(),
                Bo1_GridConnection_Aabb(),
                Bo1_PFacet_Aabb(),
                ]),
                InteractionLoop([
                        Ig2_Facet_Sphere_ScGeom(),
                        Ig2_Wall_PFacet_ScGeom(),
                        Ig2_Wall_Sphere_ScGeom(),
                        Ig2_Sphere_Sphere_ScGeom(),
                        Ig2_Sphere_GridConnection_ScGridCoGeom(),
                        Ig2_Sphere_PFacet_ScGridCoGeom(),
                        Ig2_GridNode_GridNode_GridNodeGeom6D(),
                        Ig2_GridConnection_GridConnection_GridCoGridCoGeom(),
                        Ig2_GridConnection_PFacet_ScGeom(),
                        Ig2_PFacet_PFacet_ScGeom(),
                        ],
                        [
#                       
Ip2_CohFrictMat_CohFrictMat_CohFrictPhys(setCohesionNow=True,setCohesionOnNewContacts=True),
    # internal cylinder physics
                        
Ip2_CohFrictMat_CohFrictMat_CohFrictPhys(setCohesionNow=True),  # internal 
cylinder physics
                        ## Currently grass does not interact with facet, 
probably should not matter, since the spheres will be holding them up.          
       
                                
                        Ip2_FrictMat_FrictMat_FrictPhys() # physics for 
external interactions, i.e., cylinder-cylinder, sphere-sphere, cylinder-sphere
                        ],
                        [
                        Law2_ScGeom_FrictPhys_CundallStrack(),           # 
contact law for sphere-sphere
                        Law2_ScGridCoGeom_FrictPhys_CundallStrack(),     # 
contact law for cylinder-sphere
                        Law2_ScGeom6D_CohFrictPhys_CohesionMoment(),     # 
contact law for "internal" cylinder forces
                        Law2_GridCoGridCoGeom_FrictPhys_CundallStrack(), # 
contact law for cylinder-cylinder interaction
                ]),
        NewtonIntegrator(damping=.2,gravity=[0,0,-9.81], label='newtonInt'),
]


## Grass Information
#O.materials.append(CohFrictMat(young=8e5,poisson=0.3,density=4e3,frictionAngle=np.radians(30),normalCohesion=1e5,shearCohesion=1e5,momentRotationLaw=True,label='grass'))
 ## Properties Need to be corrected
O.materials.append(CohFrictMat(young=100,poisson=0.3,density=40,frictionAngle=np.radians(30),normalCohesion=1e5,shearCohesion=1e5,momentRotationLaw=True,label='grass'))
#rCyl = 0.0006  ## Radius, Grass was about 1.2 [mm] wide
rCyl = 0.0026  ## Grass was about 1.2 [mm] wide
nL = 4         ## No exact Number here, just trial and error
L = bhei      ## Height of spheres


### Grass Creation
### Create all nodes first :
nodesIds=[]
idxc = -1
x_gap = 0.009 ## Between lumps is roughly 9 [mm]
y_gap = 0.01905 ## Between lines of backing is .75 inch apart
range_x = int(math.floor(blen/x_gap)) ## finding the range for x
range_y = int(math.floor(blen/y_gap)) ## finding the range for z
cen_y = -(range_y/2)*y_gap  ## Allows the "box" of grass to be center in Z

color=[255./255.,102./255.,0./255.]
steel_r = (1/4*0.00635)/2                               ### Converting 1/4 
steel to m, to a sphere radius
box = []
box.append(O.bodies.append( 
gridNode([-boxDem[0],-boxDem[1],0],steel_r,wire=False,fixed=True,material='steel',color=color)
 ))
box.append(O.bodies.append( 
gridNode([boxDem[0],-boxDem[1],0],steel_r,wire=False,fixed=True,material='steel',color=color)
 ))
box.append(O.bodies.append( 
gridNode([boxDem[0],boxDem[1],0],steel_r,wire=False,fixed=True,material='steel',color=color)
 ))
box.append(O.bodies.append( 
gridNode([-boxDem[0],boxDem[1],0],steel_r,wire=False,fixed=True,material='steel',color=color)
 ))
O.bodies.append( 
gridConnection(box[0],box[1],steel_r,color=color,material='steel') )
O.bodies.append( 
gridConnection(box[1],box[2],steel_r,color=color,material='steel') )
O.bodies.append( 
gridConnection(box[2],box[0],steel_r,color=color,material='steel') )
O.bodies.append( 
gridConnection(box[2],box[3],steel_r,color=color,material='steel') )
O.bodies.append( 
gridConnection(box[3],box[0],steel_r,color=color,material='steel') )
O.bodies.append( 
pfacet(box[0],box[1],box[2],wire=False,material='steel',color=color) )
O.bodies.append( 
pfacet(box[0],box[2],box[3],wire=False,material='steel',color=color) )

O.stopAtIter=endSim   ### Stop sim at endSim steps
#O.run()

** Affects: yade
     Importance: Undecided
         Status: New

-- 
You received this bug notification because you are a member of Yade
developers, which is subscribed to Yade.
https://bugs.launchpad.net/bugs/1852197

Title:
  Segmentation fault on pfacet gridconnection contact

Status in Yade:
  New

Bug description:
  I seem to get a Segmentation fault (core dumped) when using
  GridConnection, PFacet, and randomDensePack. And I am not sure why. I
  have attached an image and "working" example.

  
  Thanks in advance,
  Justin


  Edit: I could not seem to upload an picture or example code. Thus code
  below:

  
  from yade.gridpfacet import *
  import numpy as np
  from yade import utils
  from yade import ymport
  import sys,time,math,random

  from yade import qt
  qt.View()

  #print(os.path.basename(__file__))
  #quit()
  ########### ParallelEngine, -j4

  boxCenter = (0,0,.025)
  ## double check that /2 would create correct length, I.e., import based_70 to 
see if they match... they should
  boxDem = (.2123/2,.212/2,.064/2)  ### based_70 is 212.3x212.21x63.65

  boxDem = (.07,.07,.025)  ###

  blen = boxDem[0]*2  ## Length of Ball pit
  bhei = .025       ## Height of Ball pit

  # Spheres information
  sphereRadius = .004 # [m]
  nu = .48 
  #G = 300000 # [Pa]
  den_rub = 89724 # [kg/m^3]
  yng_rub = 3000000 # [Pa] 
  fric_rub = radians(38)  # [degrees] 
  
O.materials.append(FrictMat(frictionAngle=fric_rub,young=yng_rub,density=den_rub,poisson=nu,label='rubber'))
  O.materials.append(FrictMat(young=200e9,density=8050,poisson=.3, 
label='steel')) # used steel properties to make rigid

  ## Stud informtion
  #studStartZ = (.01+.022+.01905)
  studStartZ = (.01+bhei+.01905)
  transVel = 0.000222*2
  rotVel = 0.00872665*2

  ### pack auto fills, i.e., I no longer pick the amount of spheres
  pred = 
pack.inAlignedBox((-(boxDem[0]-.001),-(boxDem[0]-.001),bhei+sphereRadius/2+.001),((boxDem[0]-.001),(boxDem[0]-.001),bhei+.045))
  sp = pack.randomDensePack(pred, radius=sphereRadius, 
memoizeDb='tmp/single_grass.sqlite', returnSpherePack=True)
  sp.toSimulation(wire=False,material='rubber')

  ## Time step set to 20% of Rayleigh Wave
  O.dt=.2*utils.RayleighWaveTimeStep() # 0.0011302534626965682
  print(O.dt)

  ### Steps needed to run sim
  sphereFalls = 1000                                                            
                                                ### Steps spheres need to fall 
and level out and turn on studs
  startRot = sphereFalls+math.floor((studStartZ-bhei-.01)/transVel/O.dt)        
        ### Step needed for transVel to get studs level with spheres

  ## Rotation steps
  deg_to_rad_length = (60*pi/180); # [rad]
  num_sec_roto = deg_to_rad_length/rotVel; # [s]
  num_of_steps_roto = num_sec_roto/O.dt;

  endSim   = startRot     + math.floor(num_of_steps_roto)
  ### total steps in sim

  O.engines=[
                ###Reset all forces stored in Scene::forces (O.forces in 
python). Typically, this is the first engine to be run at every step.          
In addition, reset those energies that should be reset, if energy tracing is 
enabled.
                ## Resets forces and moments that act on bodies
                ForceResetter(),

                ## Using bounding boxes find possible body collisions.
                InsertionSortCollider([
                Bo1_Facet_Aabb(), 
                Bo1_PFacet_Aabb(),
                Bo1_Sphere_Aabb(),
                Bo1_GridConnection_Aabb(),
                Bo1_PFacet_Aabb(),
                ]),
                InteractionLoop([
                        Ig2_Facet_Sphere_ScGeom(),
                        Ig2_Wall_PFacet_ScGeom(),
                        Ig2_Wall_Sphere_ScGeom(),
                        Ig2_Sphere_Sphere_ScGeom(),
                        Ig2_Sphere_GridConnection_ScGridCoGeom(),
                        Ig2_Sphere_PFacet_ScGridCoGeom(),
                        Ig2_GridNode_GridNode_GridNodeGeom6D(),
                        Ig2_GridConnection_GridConnection_GridCoGridCoGeom(),
                        Ig2_GridConnection_PFacet_ScGeom(),
                        Ig2_PFacet_PFacet_ScGeom(),
                        ],
                        [
  #                     
Ip2_CohFrictMat_CohFrictMat_CohFrictPhys(setCohesionNow=True,setCohesionOnNewContacts=True),
    # internal cylinder physics
                        
Ip2_CohFrictMat_CohFrictMat_CohFrictPhys(setCohesionNow=True),  # internal 
cylinder physics
                        ## Currently grass does not interact with facet, 
probably should not matter, since the spheres will be holding them up.          
       
                                
                        Ip2_FrictMat_FrictMat_FrictPhys() # physics for 
external interactions, i.e., cylinder-cylinder, sphere-sphere, cylinder-sphere
                        ],
                        [
                        Law2_ScGeom_FrictPhys_CundallStrack(),           # 
contact law for sphere-sphere
                        Law2_ScGridCoGeom_FrictPhys_CundallStrack(),     # 
contact law for cylinder-sphere
                        Law2_ScGeom6D_CohFrictPhys_CohesionMoment(),     # 
contact law for "internal" cylinder forces
                        Law2_GridCoGridCoGeom_FrictPhys_CundallStrack(), # 
contact law for cylinder-cylinder interaction
                ]),
        NewtonIntegrator(damping=.2,gravity=[0,0,-9.81], label='newtonInt'),
  ]

  
  ## Grass Information
  
#O.materials.append(CohFrictMat(young=8e5,poisson=0.3,density=4e3,frictionAngle=np.radians(30),normalCohesion=1e5,shearCohesion=1e5,momentRotationLaw=True,label='grass'))
 ## Properties Need to be corrected
  
O.materials.append(CohFrictMat(young=100,poisson=0.3,density=40,frictionAngle=np.radians(30),normalCohesion=1e5,shearCohesion=1e5,momentRotationLaw=True,label='grass'))
  #rCyl = 0.0006  ## Radius, Grass was about 1.2 [mm] wide
  rCyl = 0.0026  ## Grass was about 1.2 [mm] wide
  nL = 4         ## No exact Number here, just trial and error
  L = bhei      ## Height of spheres

  
  ### Grass Creation
  ### Create all nodes first :
  nodesIds=[]
  idxc = -1
  x_gap = 0.009 ## Between lumps is roughly 9 [mm]
  y_gap = 0.01905 ## Between lines of backing is .75 inch apart
  range_x = int(math.floor(blen/x_gap)) ## finding the range for x
  range_y = int(math.floor(blen/y_gap)) ## finding the range for z
  cen_y = -(range_y/2)*y_gap  ## Allows the "box" of grass to be center in Z

  color=[255./255.,102./255.,0./255.]
  steel_r = (1/4*0.00635)/2                             ### Converting 1/4 
steel to m, to a sphere radius
  box = []
  box.append(O.bodies.append( 
gridNode([-boxDem[0],-boxDem[1],0],steel_r,wire=False,fixed=True,material='steel',color=color)
 ))
  box.append(O.bodies.append( 
gridNode([boxDem[0],-boxDem[1],0],steel_r,wire=False,fixed=True,material='steel',color=color)
 ))
  box.append(O.bodies.append( 
gridNode([boxDem[0],boxDem[1],0],steel_r,wire=False,fixed=True,material='steel',color=color)
 ))
  box.append(O.bodies.append( 
gridNode([-boxDem[0],boxDem[1],0],steel_r,wire=False,fixed=True,material='steel',color=color)
 ))
  O.bodies.append( 
gridConnection(box[0],box[1],steel_r,color=color,material='steel') )
  O.bodies.append( 
gridConnection(box[1],box[2],steel_r,color=color,material='steel') )
  O.bodies.append( 
gridConnection(box[2],box[0],steel_r,color=color,material='steel') )
  O.bodies.append( 
gridConnection(box[2],box[3],steel_r,color=color,material='steel') )
  O.bodies.append( 
gridConnection(box[3],box[0],steel_r,color=color,material='steel') )
  O.bodies.append( 
pfacet(box[0],box[1],box[2],wire=False,material='steel',color=color) )
  O.bodies.append( 
pfacet(box[0],box[2],box[3],wire=False,material='steel',color=color) )

  O.stopAtIter=endSim   ### Stop sim at endSim steps
  #O.run()

To manage notifications about this bug go to:
https://bugs.launchpad.net/yade/+bug/1852197/+subscriptions

_______________________________________________
Mailing list: https://launchpad.net/~yade-dev
Post to     : yade-dev@lists.launchpad.net
Unsubscribe : https://launchpad.net/~yade-dev
More help   : https://help.launchpad.net/ListHelp

Reply via email to