triaxial test with Pfacet

Asked by Hanying Zhang on 2021-02-10

Hi,

I am doing a triaxial test simulating fiber-reinforced sand in which cylinder and Pfacet are used as fiber and wall. At first I appended Pfacets to wallIds and applied forces by triax.engine, it didn't work. Then I clumped pfacets together and added forces on every clump, there's still problem. It showed that spheres did not contact with pfacet-clump but went through it. I need to know if a triaxial test with pfacet can work? If so, how? Thanks for any help!(ubuntu18.04 and yade2018.02b)

#####################################
from yade.gridpfacet import *
from yade import pack, plot
import numpy as np
from numpy import *
import math
from yade import utils, qt
import random
from yade import polyhedra_utils, qt

#parameters
mi,ma = (-100e-3,-100e-3,-200e-3),(100e-3,100e-3,200e-3)
color=[0.,1.,1.]
young=4.0e6
poisson=3
density=1e3
stabilityThreshold=0.01
#=============================meterials========================================
O.materials.append(FrictMat(young=4.0e6,poisson=.3,frictionAngle=30,density=2630e0,label='sphereMat'))#for sphere

O.materials.append(FrictMat(young=3e9,poisson=.15,frictionAngle=20,density=910e+0,label='extcylMat'))#for sphere-cylinder
O.materials.append(CohFrictMat(young=3e9,poisson=.15,density=910e0,frictionAngle=20,normalCohesion=1e40,shearCohesion=1e40,momentRotationLaw=True,label='intcylMat'))#for cylinder-cylinder

O.materials.append( CohFrictMat( young=3e6,poisson=0.15,density=910e2,frictionAngle=20,normalCohesion=3e100,shearCohesion=3e100,momentRotationLaw=True,label='gridNodeMat' ) )#for gridNodes
#O.materials.append(CohFrictMat(young=3e9,poisson=.15,density=910e6,frictionAngle=20,normalCohesion=1e40,shearCohesion=1e40,momentRotationLaw=True,label='gridNodeMat'))#for gridNodes
O.materials.append(FrictMat(young=4e6,poisson=0.3,density=1000,frictionAngle=20,label='pFacetMat')) #for pfacet

O.materials.append(FrictMat(young=young,poisson=0.5,frictionAngle=0,density=2630,label='walls'))

#==============================Engines=========================================
O.engines=[
 ForceResetter(),
 InsertionSortCollider([
  Bo1_Sphere_Aabb(),
  Bo1_GridConnection_Aabb(),
  Bo1_PFacet_Aabb(),
  #Bo1_Box_Aabb(),
  #Bo1_Cylinder_Aabb,
  #Bo1_Node_Aabb
 ]),
 InteractionLoop([
  Ig2_Sphere_Sphere_ScGeom(),
  Ig2_Box_Sphere_ScGeom(),
  Ig2_GridNode_GridNode_GridNodeGeom6D(),
  Ig2_Sphere_GridConnection_ScGridCoGeom(),
  Ig2_GridConnection_GridConnection_GridCoGridCoGeom(),
  Ig2_GridConnection_PFacet_ScGeom(),
  #Ig2_PFacet_PFacet_ScGeom(),
  Ig2_Sphere_PFacet_ScGridCoGeom(),
  #Ig2_Sphere_ChainedCylinder_CylScGeom(),
 ],
 [
  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_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
  #Law2_GridCoGridCoGeom_CohFrictPhys_CundallStrack(),
  Law2_ScGeom_CpmPhys_Cpm(),
 ]
 ),
 GlobalStiffnessTimeStepper(timestepSafetyCoefficient=0.1,label='ts'),

 NewtonIntegrator(gravity=(0,0,0),damping=0.5,label='newton'),
 ]

color = [255./255.,102./255.,0./255.]
RNode = 0.0005
#up
aa= O.bodies.append( gridNode([-150e-3, 150e-3,-200e-3],RNode, wire=False,fixed=False,material='gridNodeMat',color=color) )
bb= O.bodies.append( gridNode([ 150e-3, 150e-3,-200e-3],RNode, wire=False,fixed=False,material='gridNodeMat',color=color) )
cc= O.bodies.append( gridNode([ 150e-3,-150e-3,-200e-3],RNode, wire=False,fixed=False,material='gridNodeMat',color=color) )
dd= O.bodies.append( gridNode([-150e-3,-150e-3,-200e-3],RNode, wire=False,fixed=False,material='gridNodeMat',color=color) )
ab= O.bodies.append( gridConnection(aa,bb,RNode,color=color,material='gridNodeMat') )
cd= O.bodies.append( gridConnection(cc,dd,RNode,color=color,material='gridNodeMat') )
cb= O.bodies.append( gridConnection(cc,bb,RNode,color=color,material='gridNodeMat') )
ac= O.bodies.append( gridConnection(cc,aa,RNode,color=color,material='gridNodeMat') )
da= O.bodies.append( gridConnection(dd,aa,RNode,color=color,material='gridNodeMat') )
abc= O.bodies.append( pfacet(cc,bb,aa, wire=False,material='pFacetMat',color=color) )
acd= O.bodies.append( pfacet(cc,dd,aa, wire=False,material='pFacetMat',color=color) )
clumpup=[]
clumpup=[aa,bb,cc,dd,ab,cd,cb,ac,da,abc,acd]
cid1=O.bodies.clump(clumpup)
#cid1.state.mass=1
print 'cid1=',cid1
O.bodies[cid1].state.blockedDOFs='xyXYZ'
#clumpup.state.mass= 1

#down 4567
down0= O.bodies.append( gridNode([-150e-3, 150e-3, 200e-3],RNode, wire=False,fixed=False,material='gridNodeMat') )
down1= O.bodies.append( gridNode([ 150e-3, 150e-3, 200e-3],RNode, wire=False,fixed=False,material='gridNodeMat') )
down2= O.bodies.append( gridNode([ 150e-3,-150e-3, 200e-3],RNode, wire=False,fixed=False,material='gridNodeMat') )
down3= O.bodies.append( gridNode([-150e-3,-150e-3, 200e-3],RNode, wire=False,fixed=False,material='gridNodeMat') )
down01= O.bodies.append( gridConnection(down0,down1,RNode,color=color,material='gridNodeMat') )
down02= O.bodies.append( gridConnection(down0,down2,RNode,color=color,material='gridNodeMat') )
down03= O.bodies.append( gridConnection(down0,down3,RNode,color=color,material='gridNodeMat') )
down12= O.bodies.append( gridConnection(down1,down2,RNode,color=color,material='gridNodeMat') )
down23= O.bodies.append( gridConnection(down2,down3,RNode,color=color,material='gridNodeMat') )
down012= O.bodies.append( pfacet(down0,down1,down2, wire=False,material='pFacetMat',color=color) )
down023= O.bodies.append( pfacet(down0,down2,down3, wire=False,material='pFacetMat',color=color) )
clumpdown=[]
clumpdown=[down0,down1,down2,down3,down01,down02,down03,down12,down23,down012,down023]
cid2=O.bodies.clump(clumpdown)
print 'cid2=',cid2
O.bodies[cid2].state.blockedDOFs='xyXYZ'
#left 89 10 11
left0= O.bodies.append( gridNode([-100e-3,-150e-3,-250e-3],RNode, wire=False,fixed=False,material='gridNodeMat') )
left1= O.bodies.append( gridNode([-100e-3, 150e-3,-250e-3],RNode, wire=False,fixed=False,material='gridNodeMat') )
left2= O.bodies.append( gridNode([-100e-3, 150e-3, 250e-3],RNode, wire=False,fixed=False,material='gridNodeMat') )
left3= O.bodies.append( gridNode([-100e-3,-150e-3, 250e-3],RNode, wire=False,fixed=False,material='gridNodeMat') )
left01= O.bodies.append( gridConnection(left0,left1,RNode,color=color,material='gridNodeMat') )
left02= O.bodies.append( gridConnection(left0,left2,RNode,color=color,material='gridNodeMat') )
left03= O.bodies.append( gridConnection(left0,left3,RNode,color=color,material='gridNodeMat') )
left12= O.bodies.append( gridConnection(left1,left2,RNode,color=color,material='gridNodeMat') )
left23= O.bodies.append( gridConnection(left2,left3,RNode,color=color,material='gridNodeMat') )
left012= O.bodies.append( pfacet(left0,left1,left2, wire=False,material='pFacetMat',color=color) )
left023= O.bodies.append( pfacet(left0,left2,left3, wire=False,material='pFacetMat',color=color) )
clumpleft=[]
clumpleft=[left0,left1,left2,left3,left01,left02,left03,left12,left23,left012,left023]
cid3=O.bodies.clump(clumpleft)
print 'cid3=',cid3
O.bodies[cid3].state.blockedDOFs='yzXYZ'
#right 12 13 14 15
right0= O.bodies.append( gridNode([ 100e-3, 150e-3,-250e-3],RNode, wire=False,fixed=False,material='gridNodeMat') )
right1= O.bodies.append( gridNode([ 100e-3,-150e-3,-250e-3],RNode, wire=False,fixed=False,material='gridNodeMat') )
right2= O.bodies.append( gridNode([ 100e-3,-150e-3, 250e-3],RNode, wire=False,fixed=False,material='gridNodeMat') )
right3= O.bodies.append( gridNode([ 100e-3, 150e-3, 250e-3],RNode, wire=False,fixed=False,material='gridNodeMat') )
right01= O.bodies.append( gridConnection(right0,right1,RNode,color=color,material='gridNodeMat') )
right02= O.bodies.append( gridConnection(right0,right2,RNode,color=color,material='gridNodeMat') )
right03= O.bodies.append( gridConnection(right0,right3,RNode,color=color,material='gridNodeMat') )
right12= O.bodies.append( gridConnection(right1,right2,RNode,color=color,material='gridNodeMat') )
right23= O.bodies.append( gridConnection(right2,right3,RNode,color=color,material='gridNodeMat') )
right012= O.bodies.append( pfacet(right0,right1,right2, wire=False,material='pFacetMat',color=color) )
right023= O.bodies.append( pfacet(right0,right2,right3, wire=False,material='pFacetMat',color=color) )
clumpright=[]
clumpright=[right0,right1,right2,right3,right01,right02,right03,right12,right23,right012,right023]
cid4=O.bodies.clump(clumpright)
print 'cid4=',cid4
O.bodies[cid4].state.blockedDOFs='yzXYZ'
#front 16 17 18 19
front0= O.bodies.append( gridNode([-150e-3, 100e-3,-250e-3],RNode, wire=False,fixed=False,material='gridNodeMat') )
front1= O.bodies.append( gridNode([ 150e-3, 100e-3,-250e-3],RNode, wire=False,fixed=False,material='gridNodeMat') )
front2= O.bodies.append( gridNode([ 150e-3, 100e-3, 250e-3],RNode, wire=False,fixed=False,material='gridNodeMat') )
front3= O.bodies.append( gridNode([-150e-3, 100e-3, 250e-3],RNode, wire=False,fixed=False,material='gridNodeMat') )
front01= O.bodies.append( gridConnection(front0,front1,RNode,color=color,material='gridNodeMat') )
front02= O.bodies.append( gridConnection(front0,front2,RNode,color=color,material='gridNodeMat') )
front03= O.bodies.append( gridConnection(front0,front3,RNode,color=color,material='gridNodeMat') )
front12= O.bodies.append( gridConnection(front1,front2,RNode,color=color,material='gridNodeMat') )
front23= O.bodies.append( gridConnection(front2,front3,RNode,color=color,material='gridNodeMat') )
front012= O.bodies.append( pfacet(front0,front1,front2, wire=False,material='pFacetMat',color=color) )
front023= O.bodies.append( pfacet(front0,front2,front3, wire=False,material='pFacetMat',color=color) )
clumpfront=[]
clumpfront=[front0,front1,front2,front3,front01,front02,front03,front12,front23,front012,front023]
cid5=O.bodies.clump(clumpfront)
print 'cid5=',cid5
O.bodies[cid5].state.blockedDOFs='xzXYZ'
#back 20 21 22 23
back0= O.bodies.append( gridNode([ 150e-3,-100e-3,-250e-3],RNode, wire=False,fixed=False,material='gridNodeMat') )
back1= O.bodies.append( gridNode([-150e-3,-100e-3,-250e-3],RNode, wire=False,fixed=False,material='gridNodeMat') )
back2= O.bodies.append( gridNode([-150e-3,-100e-3, 250e-3],RNode, wire=False,fixed=False,material='gridNodeMat') )
back3= O.bodies.append( gridNode([ 150e-3,-100e-3, 250e-3],RNode, wire=False,fixed=False,material='gridNodeMat') )
back01= O.bodies.append( gridConnection(back0,back1,RNode,color=color,material='gridNodeMat') )
back02= O.bodies.append( gridConnection(back0,back2,RNode,color=color,material='gridNodeMat') )
back03= O.bodies.append( gridConnection(back0,back3,RNode,color=color,material='gridNodeMat') )
back12= O.bodies.append( gridConnection(back1,back2,RNode,color=color,material='gridNodeMat') )
back23= O.bodies.append( gridConnection(back2,back3,RNode,color=color,material='gridNodeMat') )
back012= O.bodies.append( pfacet(back0,back1,back2, wire=False,material='pFacetMat',color=color) )
back023= O.bodies.append( pfacet(back0,back2,back3, wire=False,material='pFacetMat',color=color) )
clumpback=[]
clumpback=[back0,back1,back2,back3,back01,back02,back03,back12,back23,back012,back023]
cid6=O.bodies.clump(clumpback)
print 'cid6=',cid6
O.bodies[cid6].state.blockedDOFs='xzXYZ'

#=======================================sphere=================================================
sp = yade.pack.SpherePack()
#sp.makeCloud(mi,ma,psdSizes=[0.09e-3,0.18e-3,0.2e-3,0.24e-3,0.28e-3,0.7e-3],psdCumm=[0.,0.2,0.4,0.6,0.8,1.0],num=65000)
sp.makeCloud(mi,ma,porosity=0.66/1.66,psdSizes=[4*0.5e-3,4*0.75e-3,4*0.8e-3,4*0.9e-3,4*1.2e-3,4*2e-3],psdCumm=[0.,0.2,0.4,0.6,0.8,1.0])
# e min =0.56, and e max =0.89, e=0.66
spheres=sp.toSimulation(color=(0,0.5,0.7),material='sphereMat')
sphereIDs = [b.id for b in O.bodies if type(b.shape)==Sphere]
numparts = len(sphereIDs)

print 'numparts =',numparts

O.forces.setPermF(11,(0,0,100))
O.forces.setPermF(23,(0,0,-100))
O.forces.setPermF(35,(100,0,0))
O.forces.setPermF(47,(-100,0,0))
O.forces.setPermF(59,(0,-100,0))
O.forces.setPermF(71,(0, 100,0))
#####################################################

Question information

Language:
English Edit question
Status:
Answered
For:
Yade Edit question
Assignee:
No assignee Edit question
Last query:
2021-02-10
Last reply:
2021-02-22
Klaus Thoeni (klaus.thoeni) said : #1

Are you saying the spheres are penetrating the pFacets? This could be due to time step or contact stiffness. I suggest you have a play with less particles and increase the thickness of the pFacet.

Klaus

Can you help with this problem?

Provide an answer of your own, or ask Hanying Zhang for more information if necessary.

To post a message you must log in.