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. _______________________________________________ Mailing list: https://launchpad.net/~yade-users Post to : [email protected] Unsubscribe : https://launchpad.net/~yade-users More help : https://help.launchpad.net/ListHelp

