New question #626580 on Yade:
https://answers.launchpad.net/yade/+question/626580
Dear all,
I'm trying to simulate a granular seabed under stationary wave pressure by
using DEM-PFV model.
But I have a problem when I try to varify my simulation result. I find that
the variation of pore pressure with time at different depths inside the seabed
is not accurate compared with experimental results. Because the pressure drop
along the depth is not obvious, and the pore pressure at the bottom of soil is
still large. Maybe there is some parameters need to be set? Or other reasons I
don't know.
Here is my code:
*************************************************************************
from yade import pack
from yade import *
num_spheres=5000# number of spheres
young=1.5e7
compFricDegree = 3 # initial contact friction during the confining phase
finalFricDegree = 30 # contact friction during the deviatoric loading
mn,mx=Vector3(0,0,0),Vector3(2,0.75,0.3) # corners of the initial packing
pi=3.1415926
O.materials.append(FrictMat(young=young,poisson=0.5,frictionAngle=radians(compFricDegree),density=2640,label='spheres'))
O.materials.append(FrictMat(young=young,poisson=0.5,frictionAngle=0,density=0,label='walls'))
walls=aabbWalls([mn,mx],thickness=0,material='walls')
wallIds=O.bodies.append(walls)
pred=inAlignedBox((0,0,0),(2,0.75,0.3))
sp=pack.randomDensePack(pred,radius=0.025,rRelFuzz=0.1,spheresInCell=num_spheres,returnSpherePack=True)
sp.toSimulation(material='spheres')
newton=NewtonIntegrator(gravity=(0,-9.81,0))
from yade import qt
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()],label="iloop"
),
FlowEngine(label="flow"),
GlobalStiffnessTimeStepper(active=1,timeStepUpdateInterval=100,timestepSafetyCoefficient=0.8),
newton
]
## ______________ FLOW section _________________
# Activate flow engine and set boundary conditions
while 1:
flow.defTolerance=0.3
flow.meshUpdateInterval=200
flow.useSolver=3
flow.bndCondIsPressure=[0,0,1,1,0,0]
flow.bndCondValue=[0,0,500,0,0,0]
flow.boundaryUseMaxMin=[0,0,0,0,0,0]
O.run(200, True)
unb=unbalancedForce()
if unb<0.001:
break
print "n=",flow.porosity
flow.bndCondIsPressure=[0,0,0,1,0,0]
flow.meshUpdateInterval=25
flow.waveAction=1
flow.sineAverage=0
t_zero=O.time
def timeDependentPressure():
t = O.time-t_zero
A = 288
T = 1.5
flow.sineMagnitude=A*cos(2.0*pi*t/T)
flow.updateBCs()
from yade import plot
## a function saving variables
def history():
plot.addData(p0=flow.getPorePressure((0,0.49,0.15)),p1=flow.getPorePressure((0,0.39,0.15)),p2=flow.getPorePressure((0,0.29,0.15)),p3=flow.getPorePressure((0,0.19,0.15)),n=flow.porosity,t=O.time-t_zero,a=flow.sineMagnitude)
O.engines=O.engines+[PyRunner(iterPeriod=100,command='history()',label='recorder')]
O.engines=O.engines+[PyRunner(iterPeriod=50,command='timeDependentPressure()')]
O.engines=O.engines+[PyRunner(iterPeriod=100,command='flow.saveVtk()')]
from yade import plot
plot.plots={'t':('p0','p1','p2','p3',),'t ':('n'),'t ':('a')}
plot.plot()
O.saveTmp()
O.timingEnabled=1
from yade import timing
print "starting oedometer simulation"
timing.stats()
*************************************************************************
If you have some ideas I would be more than grateful!
Best,
Deng
--
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 : [email protected]
Unsubscribe : https://launchpad.net/~yade-users
More help : https://help.launchpad.net/ListHelp