New question #676953 on Yade:
https://answers.launchpad.net/yade/+question/676953

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)

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