← Back to team overview

yade-users team mailing list archive

Re: [Question #700924]: soil stucture interaction

 

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

xujin posted a new comment:
Thank you, Bruno and Jan. I met some new questions. 
O.forces.setPermF(top wall id, (0,-100000,0))
the unit of ‘-100000’ is (N or Pa)?
My purpose is to add -100000Pa to the top wall.
If it is wrong, how do I add stress?
After the program terminates, how do I get the wallstress?
The top wall may slope slightly(such as right higher than left) when add the stress. How do I control it to stay level the whole time?

ubuntu2021

the first script(model generation):

#########################################
### Defining parameters and variables ###
#########################################

#Material constants 
Density = 3000
FrictionAngle = 1.5
PoissonRatio = 0.5
Young = 300e6
Damp = 0.5
AvgRadius = 0.1
N_particles = 4000

#Wall constants
WDensity = 0
WFrictionAngle = 0.0
WPoissonRatio = 0.5
WYoung = 50e9

#Packing variables
mn = Vector3(1,0,0)
mx = Vector3(101,20,1)

#Confining variables
ConfPress1 = -90000  #pre-compression
ConfPress = -1.0e5

#time calculation
startT = O.time
endT = O.time
timeSpent = endT - startT

########################################
#import necessary packages
from yade import pack,plot,os,timing
import matplotlib; matplotlib.rc('axes',grid=True)
import pylab

########################################
### Sample Preparing ###################
########################################

#Create materials for spheres and plates
SphereMat = O.materials.append(FrictMat(young = Young, poisson = PoissonRatio, frictionAngle = radians(FrictionAngle), density = Density))
WallMat = O.materials.append(FrictMat(young = WYoung, poisson = WPoissonRatio, frictionAngle = radians(WFrictionAngle), density = WDensity))

#Create walls for packing
wallIds = O.bodies.append(aabbWalls([mn,mx],thickness=0.001,material=WallMat))

#Use SpherePack object to generate a random loose particles packing
#O.periodic = True
#O.cell.setBox(8,3,8)

sp = pack.SpherePack()

#psdSizes,psdCumm=[0.00142,0.00151,0.00160,0.00169,0.00179,0.00188,0.00197,0.00207,0.00216,0.00225,0.00235,0.00244,0.00253,0.00263,0.00272,0.00281],[0,0.067,0.133,0.2,0.267,0.333,0.4,0.467,0.533,0.6,0.667,0.733,0.8,0.867,0.933,1]

sp.makeCloud(Vector3(1,0,0.5),Vector3(101,20,0.5),num=N_particles,rMean=AvgRadius,rRelFuzz=.33,distributeMass=False)

sp.toSimulation(material = SphereMat)

#for b in O.bodies:
#   if isinstance(b.shape,Sphere):
#       b.state.blockedDOFs='zXY'
#       b.shape.color=(0.,0.,1.)


O.usesTimeStepper=True
O.trackEnerty=True
#################################
#####Defining triaxil engines####
#################################

###first step: compression#######
triax1=TriaxialStressController(
    wall_back_activated = False, #for 2d simulation
    wall_front_activated = False,
    thickness = 0.001,
    maxMultiplier=1.+1.5e5/Young, # spheres growing factor (fast growth)
    finalMaxMultiplier=1.+4e3/Young,
    #maxMultiplier = 1.002,
    internalCompaction = True, # If true the confining pressure is generated by growing particles
    #max_vel = 1.5,
    stressMask = 7,
    computeStressStrainInterval = 10,
    
    goal1 = ConfPress1,
    goal2 = ConfPress1,
    #goal3 = ConfPress,  
)


#O.dt=0.5*PWaveTimeStep()

newton=NewtonIntegrator(damping=Damp)


###engine
O.engines=[
    ForceResetter(),
    InsertionSortCollider([Bo1_Sphere_Aabb(),Bo1_Box_Aabb()]),
    InteractionLoop(
     [Ig2_Sphere_Sphere_ScGeom(),Ig2_Box_Sphere_ScGeom()],
     [Ip2_FrictMat_FrictMat_FrictPhys()],
     [Law2_ScGeom_FrictPhys_CundallStrack()]
    ),
    GlobalStiffnessTimeStepper(active=1,timeStepUpdateInterval=100,timestepSafetyCoefficient=0.8, defaultDt=4*utils.PWaveTimeStep()),
    triax1,
    newton,
    PyRunner(realPeriod=10,command='checkUnbalanced()',label='check'),
]
# Simulation stop conditions defination
def checkUnbalanced():
    unb=unbalancedForce()
    if unb<0.001:
       O.pause()
       O.save('initial.yade.bz2')


the second script(modify):

#Wall constants
WDensity = 0
WFrictionAngle = 0.0
WPoissonRatio = 0.5
WYoung = 50e9
Mat = O.materials.append(FrictMat(young = WYoung, poisson = WPoissonRatio, frictionAngle = radians(WFrictionAngle), density = WDensity))
FrictionAngle = 35

Damp = 0.25

#Confining variables
ConfPress = -1.0e5

#time calculation
startT = O.time
endT = O.time
timeSpent = endT - startT

#restart
O.load('initial.yade.bz2')

########################################
#import necessary packages
from yade import pack,plot,os,timing


for b in range(6):
    O.bodies.erase(b)

id_box1 = O.bodies.append(box((0.5,12.5,0.5),(0.5,12.5,0.5),fixed=True,material=Mat))#    left wall
id_box2 = O.bodies.append(box((101.5,12.5,0.5),(0.5,12.5,0.5),fixed=True,material=Mat))#  right wall
id_box3 = O.bodies.append(box((51,20.5,0.5),(50,0.5,0.5),fixed=False,material=Mat))#      top wall
id_box4 = O.bodies.append(box((51,-0.5,0.5),(70,0.5,0.5),fixed=True,material=Mat))#       bottom wall

print('bottom',O.bodies[-1].state.pos)
print('top',O.bodies[-2].state.pos)
print('right',O.bodies[-3].state.pos)
print('left',O.bodies[-4].state.pos)

#O.bodies[-2].state.blockedDOFs='yXZ'
#O.bodies[-1].state.blockedDOFs='xYZ'

for b in O.bodies:
   if isinstance(b.shape,Sphere):
#       b.state.blockedDOFs='zXY'
       b.shape.color=(0.,0.,1.)

O.forces.setPermF(O.bodies[-2].id,(0,ConfPress,0))

#O.bodies[-1].state.vel = (1,0,0)



O.engines=[
    ForceResetter(),
    InsertionSortCollider([Bo1_Sphere_Aabb(),Bo1_Box_Aabb()]),
    InteractionLoop(
     [Ig2_Sphere_Sphere_ScGeom(),Ig2_Box_Sphere_ScGeom()],
     [Ip2_FrictMat_FrictMat_FrictPhys()],
     [Law2_ScGeom_FrictPhys_CundallStrack()]
    ),
    GlobalStiffnessTimeStepper(active=1,timeStepUpdateInterval=100,timestepSafetyCoefficient=0.8, defaultDt=4*utils.PWaveTimeStep()),
    NewtonIntegrator(damping=Damp),
    PyRunner(realPeriod=2,command='endCheck()',label='check')
#    PyRunner(realPeriod=10,command='checkUnbalanced()',label='check'),
]

# Simulation stop conditions defination
def endCheck():
    unb=unbalancedForce()
    if unb<0.001:
       O.pause()
       print('bottom force:',O.forces.f(O.bodies[-1].id))
       print('top force:',O.forces.f(O.bodies[-2].id))
       print('right force',O.forces.f(O.bodies[-3].id))
       print('left force',O.forces.f(O.bodies[-4].id))
       O.save('Compression.yade.bz2')

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