Question #707148 on Yade changed:
https://answers.launchpad.net/yade/+question/707148

    Status: Needs information => Open

Ruidong LI gave more information on the question:
Hi! Jan
Thanks for your reply.

> The loading is simply such that a constant velocity is prescribed 
> (s.state.vel = ...)
But which velocity value should I define to achieve quasi-equilibrium 
compression? Can you show me the code? I am sorry for my stupidity.

>Therefore I ask for a MWE and better description of "are destroyed" (anyway 
>useful even with the code).
Actually, what I mean is that when you run the 'triax' py without any change, 
the triangle facets will break. And my current problem is not with the 'triax' 
py.
My problem is that I just finished the part about generating flexible membranes 
using Pfacet and don't know what to do next. What I want to achieve is 
isotropic compression with a confining pressure equal to 50 kPa. And then, 
maintain the confining pressure in the x and y directions and apply a 
displacement-controlled movement of the top wall. 

my MWE is presented as below



################################
###            1             ###
###   LOAD INITIAL PACKING   ###
################################
dir_inipacking = '/home/kyle/Yade/install/bin/lentils/xml/iniPacking.xml'
O.load(dir_inipacking)

# Define engine
O.engines = [
        ForceResetter(),
        InsertionSortCollider([Bo1_Sphere_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')
]

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

############################################
###                  2                   ###
###   DEFINING VARIABLES AND MATERIALS   ###
############################################

# The following lines are used parameter definitions
readParamsFromTable(
        # directory     
        dir_vtk = '/home/kyle/Yade/install/bin/lentils/vtk/20', # directory of 
storing vtk files
        dir_txt = '/home/kyle/Yade/install/bin/lentils/txt/20/Num20_servo.txt', 
# directory of storing txt files
        dir_xml = '/home/kyle/Yade/install/bin/lentils/xml/20', # directory of 
storing xml files
        
        # material parameters
        young_w = 5e9, # Young's modulus of plates and walls
        young_g = 1.8e6, # Young's modulus of grains [1]
        den_w = 7874, # density of plates and walls
        den_g = 980, # density of grains 
        poi_w = 0.3, # possion's ratio of plates and walls
        poi_g = 0.25, # possion's ratio of grains
        friAngle_w = 0.5,#radians(15), # friction angle of plates and walls 
        friAngle_g = 0.5,#radians(29), # friction angle of grains

        # Parameters of cylindrical walls
        x_cyl = 0.0547, # x-coordinate of center of cylindrical walls
        y_cyl = 0.0535, # y-coordinate of center of cylindrical walls
        z_cyl = 0, # z-coordinate of center of cylindrical walls
        r_cyl = 0.0358, # radius of the cylinder
        h_cyl = 0.14, # height of the cylinder
        
        # confining pressure
        preStress = -50000,
        
        # axial strain rate
        strainRate=-100
              
)
from yade.params.table import *

########################################
###                 3                ###
###   CREATE TOP AND BOTTOM PLATES   ###
########################################

# erase rigid cylindrical facets
for b in O.bodies:
   if isinstance(b.shape,Facet): O.bodies.erase(b.id) 

# create top and bottom plates
h_cyl = max([b.state.pos[2] + b.shape.radius for b in O.bodies if 
isinstance(b.shape, Sphere)])
top_plate = 
O.bodies.append(yade.geom.facetCylinder((x_cyl,y_cyl,h_cyl),radius=r_cyl*1.2,height=0,segmentsNumber=40,color=(1,1,1)))
bottom_plate = 
O.bodies.append(yade.geom.facetCylinder((x_cyl,y_cyl,0),radius=r_cyl*1.2,height=0,segmentsNumber=40,color=(1,1,1)))

'''
vel = strainRate * (h - rParticle * 2 * bcCoeff)
for s in bot:
        s.shape.color = (1, 0, 0)
        s.state.blockedDOFs = 'xyzXYZ'
        s.state.vel = (0, 0, -vel)
for s in top:
        s.shape.color = Vector3(0, 1, 0)
        s.state.blockedDOFs = 'xyzXYZ'
        s.state.vel = (0, 0, vel)
'''

######################################
###                4               ###
###   GENERATE FLEXIBLE MEMBRANE   ###
######################################

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

# Generate flexible membrane
nodesIds=[]
cylIds=[]
pfacets=[]
width=2*r_cyl #diameter of cylinder
height=h_cyl #height of cylinder
nw=40 # no of nodes along perimeter
nh=25 # no of nodes along height
rNode=width/100 #radius of grid node
color1=[255./255.,102./255.,0./255.]
color2=[0,0,0]
color3=[248/255,248/255,168/255]
color4=[156/255,160/255,98/255]
#color3=[165/255,245/255,251/255]
#color4=[101/255,153/255,157/255]
rCyl2 = 0.5*width / cos(pi/float(nw))
vCenter = Vector3(x_cyl, y_cyl, 0)
for r in range(nw):
        for h in range(nh):
                v1 = 
Vector3(rCyl2*cos(2*pi*(r+0)/float(nw)),rCyl2*sin(2*pi*(r+0)/float(nw)), 
height*(h+0)/float(nh))+vCenter
                v2 = 
Vector3(rCyl2*cos(2*pi*(r+1)/float(nw)),rCyl2*sin(2*pi*(r+1)/float(nw)), 
height*(h+0)/float(nh))+vCenter
                v3 = 
Vector3(rCyl2*cos(2*pi*(r+1)/float(nw)),rCyl2*sin(2*pi*(r+1)/float(nw)), 
height*(h+1)/float(nh))+vCenter
                v4 = 
Vector3(rCyl2*cos(2*pi*(r+0)/float(nw)),rCyl2*sin(2*pi*(r+0)/float(nw)), 
height*(h+1)/float(nh))+vCenter
                V1=(O.bodies.append(gridNode(v1,rNode,wire=False,fixed=False, 
material='gridNodeMat',color=color2)) )
                V2=(O.bodies.append(gridNode(v2,rNode,wire=False,fixed=False, 
material='gridNodeMat',color=color2)) )
                V3=(O.bodies.append(gridNode(v3,rNode,wire=False,fixed=False, 
material='gridNodeMat',color=color2)) )
                V4=(O.bodies.append(gridNode(v4,rNode,wire=False,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,rNode,material='gridNodeMat',color=color3)))
                
cylIds.append(O.bodies.append(gridConnection(V2,V3,rNode,material='gridNodeMat',color=color3)))
                
cylIds.append(O.bodies.append(gridConnection(V1,V3,rNode,material='gridNodeMat',color=color3)))
                
cylIds.append(O.bodies.append(gridConnection(V3,V4,rNode,material='gridNodeMat',color=color3)))
                
cylIds.append(O.bodies.append(gridConnection(V4,V1,rNode,material='gridNodeMat',color=color3)))
                #create Pfacets
                
pfacets.append(O.bodies.append(pfacet(V1,V2,V3,wire=True,material='pFacetMat',color=color3)))
                
pfacets.append(O.bodies.append(pfacet(V1,V3,V4,wire=True,material='pFacetMat',color=color4)))
        
# calculate void ratio
def myClumpVoidRatio(VolTot, density):
        mass=sum([ b.state.mass for b in O.bodies if b.isClump])
        VolSolid = mass/density
        poro = (VolTot-VolSolid)/VolSolid
        return poro     
h_cyl = max([b.state.pos[2] + b.shape.radius for b in O.bodies if 
isinstance(b.shape, Sphere)])
Vol = math.pi * h_cyl * r_cyl * r_cyl
poro_ini = myClumpVoidRatio(Vol, den_g)
print('Initial void ratio:', str(poro_ini))

-- 
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     : yade-users@lists.launchpad.net
Unsubscribe : https://launchpad.net/~yade-users
More help   : https://help.launchpad.net/ListHelp

Reply via email to