yade-users team mailing list archive
-
yade-users team
-
Mailing list archive
-
Message #14707
[Question #626580]: a problem about PFV
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.