yade-users team mailing list archive
-
yade-users team
-
Mailing list archive
-
Message #15785
[Question #658629]: Oedometric consolidation test
New question #658629 on Yade:
https://answers.launchpad.net/yade/+question/658629
Hi friends :)
I am trying to conduct a simulation of a laboratory oedometric test used for testing the consolidation of a soil sample.
I went through the example in the Yade documentation already (https://yade-dem.org/doc/tutorial-examples.html#oedometric-test) but that does not seem to replicate the experimental process fully or at least what I intend to simulate ;)
Here is what I am intending to do:
(1) Create a cylinder and fill it with spherical particles
from yade import pack,plot
pred=pack.inCylinder((0,0,0),(0,0,0.25),0.10)
sp=pack.randomDensePack(pred,radius=0.01,spheresInCell=300)
O.bodies.append(sp)
(2) For the sampler (container): create a facet cylinder as follows (the cylinder is to be closed from all sides -( top, bottom and curved)
facets = geom.facetCylinder((0,0,0.125),0.1,0.25,wallMask=1|2|4)
O.bodies.append(facets)
(3) Engines
O.engines=[ForceResetter(),InsertionSortCollider([Bo1_Sphere_Aabb(),Bo1_Facet_Aabb(),Bo1_Wall_Aabb()]),InteractionLoop([Ig2_Sphere_Sphere_ScGeom(),Ig2_Facet_Sphere_ScGeom(),Ig2_Wall_Sphere_ScGeom()],[Ip2_FrictMat_FrictMat_FrictPhys()],[Law2_ScGeom_FrictPhys_CundallStrack()]),NewtonIntegrator(gravity=(0,0,-9.81),damping=0.5),PyRunner(command='checkUnbalanced()',realPeriod=2,label='checker')]
(4) Time step for simulation:
O.dt=.5*PWaveTimeStep()
(5) Check Unbalanced forces:
if O.iter<5000: return
if unbalancedForce()>.1: return
(6) Now as in the experiment for consolidation, I wish to load the top plate with a constant stress/ force for a certain period of time
Can I define the top wall/facet of the facet cylinder as the loading plate? If yes, how ?
Say. the object is named as "plate". In order to subject this plate to a certain stress/force for a certain period of time, do I use the following:
if O.time < 3600 ( say the time for the experiment is 1 hour)
preStress= 2e4
def addForces():
for f in facets:
n = f.shape.normal
a = f.shape.area
O.forces.addF(f.id,preStress*a*n,permanent=True)
the above code applies for all the facets uniformly. How do I apply the above only for the top facet (which acts as the loading plate) and keep the rest stable?
I think I have to do something like:
for f in facets:
f.state.blockedDOFs = 'XYZz'
f.state.mass = 0.5
(Uncertain about the application here)
(7) Call Pyrunner to save the data for the plotting:
O.engines=O.engines+[PyRunner(command='addPlotData()',iterPeriod=200)]
(8) Defining the data to be saved and plotted:
I intend to plot the displacement of the top plate against square root of time (in mins)
I think it should be as follows:
import math
def addPlotData():
Dz=plate.state.displ()[2]
t= O.time
plot. addData(Tx=math.sqrt(t), Dz=Dz)
plot.plots= { 'Tx':('Dz')}
plot.plot()
O.run
Please correct me if I am wrong anywhere. I am just a beginner :)
Thanks..
--
You received this question notification because your team yade-users is
an answer contact for Yade.