Append a grid to an existing grid during a running simulation

Asked by Luc Sibille

Hello,

I am trying to append a grid (i.e a new gridNode with a new gridConnection) to an existing grid during a simulation.
For that I made the short script pasted below: it defines two gridNodes related by a gridConnection and run 100 iterations. Then there is function gridAppend() to add a new gridNode and new gridConnection relating the new gridNode to the last one previously created.
A second function printct() print information about the existing contacts and in particular the id of the bodies in contact.

If I run this script and add a new gridNode and a new gridConnection with gridAppend() all is fine.
Then if I run some additional iterations and I add again a grid element with gridAppend(), one iteration after that I have the following problem:
an interaction between the bodies 6 and 2 is created (you can check it with printct(). These bodies correspond to the 1st gridConnection and the last one:
[0] Node -- [2] Connection -- [1] Node -- [4] Connection -- [3] Node -- [6] Connection -- [5] Node
However these two gridConnection should not be in interaction, there should be interactions only between nodes (0-1, 1-3 and 3-5).

Do you have an idea about the direction to follow to solve that?

Cheers,
Luc

##Short script to append grid to an existing grid

from yade.gridpfacet import *
import numpy as np

def gridAppend():
  node1=O.bodies[nodeIds[-2]]
  node2=O.bodies[nodeIds[-1]]
  #print "node -2"
  #print nodeIds[-2]
  #print node1.state.pos
  #print "node -1"
  #print nodeIds[-1]
  #print node2.state.pos
  nodeIds.append( O.bodies.append( gridNode(node2.state.pos+Vector3(0,0,-0.08),0.05,wire=False,material='cylindermat',color=color) ) )
  connectionIds.append( O.bodies.append( gridConnection(nodeIds[-2],nodeIds[-1],0.05,color=color,material='fMat') ) )
  print "### Add a new grid segment ###"

def printct():
  global root
  for i in O.interactions:
      print "contact"
      print "id1=", i.id1
      print "id2=", i.id2
      print "unp=", i.phys.unp
      print "penetrationDepth=", i.geom.penetrationDepth
      print "normalForce=", i.phys.normalForce

############################
### DEFINING ENGINES ###
############################

newton=NewtonIntegrator(damping=0.1)

O.engines=[
 ForceResetter(),
 InsertionSortCollider([
  Bo1_GridConnection_Aabb(),
 ]),
 InteractionLoop([
  Ig2_GridNode_GridNode_GridNodeGeom6D(),
  Ig2_GridConnection_GridConnection_GridCoGridCoGeom()
 ],
 [
  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_ScGeom6D_CohFrictPhys_CohesionMoment(), # contact law for "internal" cylinder forces
  Law2_GridCoGridCoGeom_FrictPhys_CundallStrack() # contact law for cylinder-cylinder interaction
 ]
 ),
 ## We will use the global stiffness of each body to determine an optimal timestep (see https://yade-dem.org/w/images/1/1b/Chareyre&Villard2005_licensed.pdf)
 GlobalStiffnessTimeStepper(active=1,timeStepUpdateInterval=100,timestepSafetyCoefficient=0.5),
 newton
]

# cylinders material
O.materials.append( CohFrictMat( young=1e6,poisson=0.5,density=2600,frictionAngle=radians(30),normalCohesion=1e40,shearCohesion=1e40,momentRotationLaw=True,label='cylindermat') ) # material to create the gridConnections
O.materials.append( FrictMat( young=1e6,poisson=0.5,density=2600,frictionAngle=radians(30),label='fMat' ) ) # material for general interactions with cylinders

#create a two first nodes at the top of the simulation domain
color=[255./255.,102./255.,0./255.] # the root color
nodeIds=[] #this will be the list of Ids of the node of the root
nodeIds.append( O.bodies.append( gridNode([1,1,1],0.05,wire=False,fixed=True,material='cylindermat',color=color) ) )
nodeIds.append( O.bodies.append( gridNode([1,1,0.8],0.05,wire=False,fixed=False,material='cylindermat',color=color) ) )

connectionIds=[] #this will be the list of Ids of segments of the root; a segment is the part of the root in between two nodes
for i,j in zip(nodeIds[:-1],nodeIds[1:]):
  connectionIds.append( O.bodies.append( gridConnection(i,j,0.05,color=color,material='fMat') ) )

O.run(100,True)

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
Launchpad Janitor (janitor) said :
#1

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