Cylindrical flexible membrane from Pfacet elements

Asked by chanaka Udaya on 2019-06-14

Hi all,

I'm newbie to yade and try to model cylindrical membrane using Pfacet elements for triaxial test.

I have used two for loops to create membrane mesh and I can not see the fully developed membrane in 3D view in Yadedaily.
Instead I can only see a strip along height of the cylinder(revolving is not happened).

A minimum working exmaple is attached below.

Could you please help me on this?

# encoding: utf-8
from yade import qt
from yade.gridpfacet import *

###########################
##### ENGINES #####
###########################

O.engines=[
 ForceResetter(),
 InsertionSortCollider([
  Bo1_Sphere_Aabb(),
  Bo1_Wall_Aabb(),
  Bo1_PFacet_Aabb(),
 ],sortThenCollide=True),
 InteractionLoop(
 [
        Ig2_GridNode_GridNode_GridNodeGeom6D(),
        Ig2_GridConnection_GridConnection_GridCoGridCoGeom(),
        Ig2_Sphere_Sphere_ScGeom6D(),
 Ig2_Sphere_PFacet_ScGridCoGeom(),
 ],
 [
        Ip2_CohFrictMat_CohFrictMat_CohFrictPhys(setCohesionNow=True,setCohesionOnNewContacts=True),
  Ip2_FrictMat_FrictMat_FrictPhys()],
 [
        Law2_ScGeom6D_CohFrictPhys_CohesionMoment(),
  Law2_ScGeom_FrictPhys_CundallStrack(),
  Law2_ScGridCoGeom_FrictPhys_CundallStrack(),
  Law2_GridCoGridCoGeom_FrictPhys_CundallStrack()
 ]),
    GlobalStiffnessTimeStepper(timestepSafetyCoefficient=0.8,label='ts'),
 NewtonIntegrator(gravity=(0,-9.81,0),damping=0.1,label='newton')
]
#materials
O.materials.append(CohFrictMat(young=1e7,poisson=1,density=2650,frictionAngle=radians(30),normalCohesion=3e7,shearCohesion=3e7,momentRotationLaw=True,label='gridNodeMat'))
O.materials.append( FrictMat( young=1e7,poisson=0.1,density=2650,frictionAngle=radians(30),label='pFacetMat' ) )

###################################
##### PFacet creators #####
###################################

nodesIds=[]
cylIds=[]
P_facets=[]
c=0
width=0.1 #diameter of cylinder
height=0.2 #height of cylinder
nw = 40 # no of nodes along perimeter
nh = 12 # no of nodes along height
r=width/100 #radius of grid node
color1=[255./255.,102./255.,0./255.]
color2=[0,0,0]
color3=[0.5,0.5,0.5]
rCyl2 = .5*width / cos(pi/float(nw))
for r in xrange(nw):
 for h in xrange(nh):
  c=c+1
  v1 = Vector3( rCyl2*cos(2*pi*(r+0)/float(nw)),rCyl2*sin(2*pi*(r+0)/float(nw)), height*(h+0)/float(nh) )
  v2 = Vector3( rCyl2*cos(2*pi*(r+1)/float(nw)),rCyl2*sin(2*pi*(r+1)/float(nw)), height*(h+0)/float(nh) )
  v3 = Vector3( rCyl2*cos(2*pi*(r+1)/float(nw)),rCyl2*sin(2*pi*(r+1)/float(nw)), height*(h+1)/float(nh) )
  v4 = Vector3( rCyl2*cos(2*pi*(r+0)/float(nw)),rCyl2*sin(2*pi*(r+0)/float(nw)), height*(h+1)/float(nh) )
  V1=(O.bodies.append(gridNode([rCyl2*cos(2*pi*(r+0)/float(nw)),rCyl2*sin(2*pi*(r+0)/float(nw)), height*(h+0)/float(nh)],r,wire=True,fixed=False, material='gridNodeMat',color=color1)) )
  V2=(O.bodies.append(gridNode([rCyl2*cos(2*pi*(r+1)/float(nw)),rCyl2*sin(2*pi*(r+1)/float(nw)), height*(h+0)/float(nh)],r,wire=True,fixed=False, material='gridNodeMat',color=color2)) )
  V3=(O.bodies.append(gridNode([rCyl2*cos(2*pi*(r+1)/float(nw)),rCyl2*sin(2*pi*(r+1)/float(nw)), height*(h+1)/float(nh)],r,wire=True,fixed=False, material='gridNodeMat',color=color1)) )
  V4=(O.bodies.append(gridNode([rCyl2*cos(2*pi*(r+0)/float(nw)),rCyl2*sin(2*pi*(r+0)/float(nw)), height*(h+1)/float(nh)],r,wire=True,fixed=False, material='gridNodeMat',color=color2)) )
  # append node ids to seperate matrix for later use
  nodesIds.append(V1)
  nodesIds.append(V2)
  nodesIds.append(V3)
  nodesIds.append(V4)
  #create grid connection
  cylIds.append(O.bodies.append(gridConnection(V1,V2,r,material='gridNodeMat',color=color3)))
  cylIds.append(O.bodies.append(gridConnection(V2,V3,r,material='gridNodeMat',color=color3)))
  cylIds.append(O.bodies.append(gridConnection(V1,V3,r,material='gridNodeMat',color=color3)))
  cylIds.append(O.bodies.append(gridConnection(V3,V4,r,material='gridNodeMat',color=color3)))
  cylIds.append(O.bodies.append(gridConnection(V4,V1,r,material='gridNodeMat',color=color3)))
  #create Pfacets
  O.bodies.append(pfacet(V1,V2,V3,wire=True,material='pFacetMat',color=color3))
  O.bodies.append(pfacet(V1,V3,V4,wire=True,material='pFacetMat',color=color3))

  if c%50==0:
   print c

qt.View()
O.saveTmp()

Question information

Language:
English Edit question
Status:
Solved
For:
Yade Edit question
Assignee:
No assignee Edit question
Solved by:
Klaus Thoeni
Solved:
2019-06-16
Last query:
2019-06-16
Last reply:
2019-06-14
Best Klaus Thoeni (klaus.thoeni) said : #1

Hi,

your variable r has two meanings: you use it for the radius and than as an index in the first loop. Hence, the radius in the creation of your bodies has the wrong value (probably close to 0). Change the name of one or the other and update accordingly and is should work.

Klaus

chanaka Udaya (chanaka-udaya) said : #2

Thanks Klaus Thoeni, that solved my question.