← Back to team overview

yade-users team mailing list archive

[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.