← Back to team overview

yade-users team mailing list archive

[Question #695462]: triaxial test with Pfacet

 

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

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

-- 
You received this question notification because your team yade-users is
an answer contact for Yade.