Question #685596 on Yade changed:
https://answers.launchpad.net/yade/+question/685596

Justin gave more information on the question:
Klaus,

The error appears to actually be from the grid nodes interacting.  I
removed all other variables, and just let gravitational force make two
grid nodes hit, and it causes the "Segmentation fault (core dumped)".
Am I doing something wrong here? Thanks in advance.

Code is below

Thanks,
Justin


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()

# Spheres information
sphereRadius = .004 # [m]
sphereFalls = 1000   
blen = .07*2  ## Length of Ball pit
bhei = .025       ## Height of Ball pit

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

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_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_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,10,-9.81], label='newtonInt'),
        PyRunner(command='turnongrass()',firstIterRun=sphereFalls, nDo=6, 
dead=False, label='freeGrass'),
]


## Grass Information
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.0026  ## Grass was about 1.2 [mm] wide
nL = 3        ## 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 = 1
range_y = 2
cen_y = -(range_y/2)*y_gap  ## Allows the "box" of grass to be center in Z

for ii in range(0,range_y):
  cen_x = -(range_x/2)*x_gap  # Allows the "box" of grass to be center in X
  for jj in range(0,range_x):
    for z in np.linspace(0,L,nL):
      
nodesIds.append(O.bodies.append(gridNode([cen_x,cen_y,z+sphereRadius],rCyl,wire=False,fixed=False,material='grass')))
    idxc += 1
    d = idxc*nL ## Start of grass fiber
    cen_x += x_gap
#### Now create connection between the nodes
    for k,j in zip(nodesIds[d:d+nL-1],nodesIds[d+1:nodesIds[-1]+1]):
      O.bodies.append(gridConnection(k,j,rCyl))
  cen_y += y_gap 

for kk in range(0,len(nodesIds)):   ## First Blocking all DOF's until balls 
fall around.
  O.bodies[nodesIds[kk]].state.blockedDOFs='xyzXYZ'  

def turnongrass():
        print("Turning on Grass")
        for kk in range(0,len(nodesIds)):
                O.bodies[nodesIds[kk]].state.blockedDOFs=''       ## Unblocking 
all DOF's
        for kk in range(0,len(nodesIds),nL):
                O.bodies[nodesIds[kk]].state.blockedDOFs='xyzXYZ' ## Blocking 
DOF's for Bottom nodes
                O.bodies[nodesIds[kk+nL-1]].state.blockedDOFs=''  ## Top of 
Grass
        freeGrass.dead = True

-- 
You received this question notification because your team yade-users is
an answer contact for Yade.

_______________________________________________
Mailing list: https://launchpad.net/~yade-users
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~yade-users
More help   : https://help.launchpad.net/ListHelp

Reply via email to