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

Justin requested more information:
Bruno,

I have a similar issue. Please see my MWE below.

When I remove all BC's from "other_nodes" (root_nodes stay fixed) in the
function turnonstuds, my two cylinders explode. Do you know the cause?

Thanks,
Justin


#!/usr/bin/python
# -*- coding: utf-8 -*-

import sys

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

from yade import qt
qt.View()

root_nodes=[]
other_nodes=[]
spheres_fall = 5
All_steps =54817+spheres_fall

class YadePythonSimulation():
        blen = 0.21230  ## Length of Ball pit
        
O.materials.append(CohFrictMat(young=3e9,density=1e1,poisson=.3,frictionAngle=10,normalCohesion=1e7,shearCohesion=1e7,momentRotationLaw=True,label='grass'))
 
        rCyl = (0.00635+0.003175)/4  ## Lump with of "grass" on back is 1/4 X 
1/8
        nL = 3         ## Number of spheres, No exact Number here, just trial 
and error
        L = .022       ## Height of spheres after leveling

        ## Time step set to 20% of Rayleigh Wave
        O.dt=0.0020719234774279633

        ## Engines 
        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_Sphere_Aabb(), 
                Bo1_Facet_Aabb(), 
                Bo1_GridConnection_Aabb(),
                Bo1_Box_Aabb(),
                
#        Bo1_GridConnection_Aabb(),
        ]),
        InteractionLoop([
#               Ig2_GridConnection_GridConnection_GridCoGridCoGeom(),
#               Ig2_GridNode_GridNode_GridNodeGeom6D(),
#               Ig2_Sphere_GridConnection_ScGridCoGeom(),
                
                
                Ig2_Facet_Sphere_ScGeom(),
                Ig2_Sphere_Sphere_ScGeom(),
                Ig2_Box_Sphere_ScGeom(),
                Ig2_GridNode_GridNode_GridNodeGeom6D(),
                Ig2_Sphere_GridConnection_ScGridCoGeom(),
                Ig2_GridConnection_GridConnection_GridCoGridCoGeom(),
                ],
                [
                
Ip2_CohFrictMat_CohFrictMat_CohFrictPhys(setCohesionNow=True,setCohesionOnNewContacts=False),
   # internal cylinder physics
                Ip2_FrictMat_FrictMat_FrictPhys()       # physics for external 
interactions, i.e., cylinder-cylinder, sphere-sphere, cylinder-sphere
                ],
                [
#               Law2_GridCoGridCoGeom_FrictPhys_CundallStrack(),
                                
                
                Law2_ScGridCoGeom_CohFrictPhys_CundallStrack(),
                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,-9.81, 
0],label='newtonInt'),
                PyRunner(command='turnonstuds()',iterPeriod=spheres_fall, nDo = 
11, label='switchstuds', dead = False),
        ]
        
        ### Create all nodes first :
        idxc = -1
        x_gap = 0.09 ## tmp
        z_gap = 0.1905 ## tmp
        range_x = int(math.floor(blen/x_gap)) ## finding the range for x
        range_z = int(math.floor(blen/z_gap)) ## finding the range for z
        cen_z = -(range_z/2)*z_gap  ## Allows the "box" of grass to be center 
in Z
        tmpi = 0.0

        for ii in range(0,range_z):
                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 i in np.linspace(0,L,nL):
                                if i != 0.0:
                                        
other_nodes.append(O.bodies.append(gridNode([cen_x,i,cen_z],rCyl,wire=False,fixed=True,material='grass')))
                                        if tmpi == 0.0:
                                                
O.bodies.append(gridConnection(root_nodes[-1], other_nodes[-1], rCyl))
                                        else: 
                                                
O.bodies.append(gridConnection(other_nodes[-2], other_nodes[-1], rCyl))
                                        print(i, "other", cen_x, "x", cen_z, 
"z")
                                elif i == 0.0:
                                        
root_nodes.append(O.bodies.append(gridNode([cen_x,i,cen_z],rCyl,wire=False,fixed=True,material='grass')))
                                tmpi = i
                        idxc += 1
                        d = idxc*nL ## Start of grass fiber
                        cen_x += x_gap
                cen_z += z_gap 

        def run(self):
                iterToRun=spheres_fall
                O.run(iterToRun, True)

def turnonstuds():
        ### Turning off BC's to non-rooted nodes
        for kk in range(0,len(root_nodes)):
                O.bodies[other_nodes[kk]].state.blockedDOFs='' 

if __name__ == "__main__":
    yaPySi = YadePythonSimulation()
    sim1 = yaPySi.run()

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