Hello Alexander, First of all, this question is becoming too complex, solving a lot of topics at once. I would vote to close this one and open separate question for each problem (stress computation, material model, ...)
1) By your advise I increase the dense of packing (still left it > regular), but after this displacement of spheres is also changed. sure, you get correct results in the limit case of infinte number of particles. What make problem are the boundary particles, which have different number of interactions than "middle" particles. In your first attemt, ALL particles were the boundary particles :-) Now if you refine even more, the difference should be smaller.. Pay attention! In my simulation i applied force F like pressure. > Test 2 variants, applying force F directly to spheres and multiplying by > sphere radius to take into account spheres size. > For each variant different value of young modulus was used and it's > calibrated for coarse variant of packing Here I do not understand at all. In DEM, there is nothing like pressure (!!!!), only discrete forces. In your code you apply (0,F,0) force to each particle: > F = P*r > ... O.forces.addF(id,(0,F,0),permanent=True) If you sum all forces on one face, you should get total force, like pressure*area on physical sample. In case of regular packing, you should use P*r*r, r*r being the aree represented by one particle (just by comparing physical dimensions, multipliyng pressure by length does not yield force) couldn't help with spheres where force is applied, they have fixed > applied force on them. (in the pictures they are always blue) sure you could help, just use different formula or some correction :-) bodyStressTensors have a few assumptions: - the sphere is in static equilibrium (you probably fulfil this) - there is no (non-interaction) force applied on the particle (which is not the case of boundary particles with prescribed force) - the particle have "enough" interactions, the more in all directions, the better. Ok for "inner particle", not very ok for the boundary ones, as the interactions are only in one halfspace Also Bruno about your formula macroStress = > sphereStress*sphereVolume/cubeVolume. How it will work for non regular > packing? Because in my final model there will be non regular packing > areas inside the plate. The formula works for both regular and irregular packings, just have the above assumptions in head. Also not another Bruno's comment that for irregular case, the stress would be oscillating quantity Do you know some short and easily understood literature for it. For example > at the beginning of Jan's article strain and the contact spheres by springs > are described quite well, but there's now stress there. Also what type of > contact used in Yade? I think the same like in Jan's article. May be you > have something else Jan, especially for my type of simulation? Well, the described contact law is "standard", one of the most basic linear elastic laws. The same approach is used in CpmMat. The "strain" I describe in the article is strain of interaction, relative displacement and rotation of particles from the point of view of the interaction, completely different strain than that you want to plot :-) How to plot contact forces and how much vectors of force will have each > sphere? there is VTKExporter.exportInteractions. Or you can use VTKRecorder with recorders=['intr'] Jan, I'm not happy yet with middle stresses because they are bigger:) And > by the way what do you think about Bruno's proposal to devide macroStress > = sphereStress*sphereVolume/cubeVolume and what should i do in the > non-regular packing? > As said in the future there will be non-regular areas inside. you have to define sphere's volume in a different manner then just cube with edge 2*r :-) e.g. volume of respective Voronoi cell I'v already read Yade manual with DEM background but there is no simple > formulas for strain and stress, for example in you article Jan strain > described much better. Also it's interesting to read about interactions > laws in CpmMat material model which i used now. Again, in my article I described idfferent strain :-) there is explanation in User's manual [3] with a reference (the article is available on Reseachgate), equations 39 and 40. Contact law is desribed in [4] with Kn = young*A/L, A=pi*r*r for unisize particles, L being particles' centers distance Kt = Kn*poisson So to conclude the main things: - please ask in another questions concentrating on one specific problem - the value of forces you applied on particles now are not correct (does not correspond to defined pressure) - bodyStressTensors is ok for inner particles, not so ok for boundary particles without prescribed force and definitely not ok for particles with prescribed force, you can compute their stress "manually" - using smaller and smaller particles and the same parameters should converge to one value (with correctly applied forces) cheers Jan [1] https://yade-dem.org/doc/yade.export.html#yade.export.VTKExporter.exportInteractions [2] https://yade-dem.org/doc/yade.wrapper.html#yade.wrapper.VTKRecorder.recorders [3] https://yade-dem.org/doc/user.html#micro-stress-and-micro-strain [4] https://yade-dem.org/doc/formulation.html#stress-evaluation-example 2015-07-16 22:36 GMT+02:00 Alexander <question269...@answers.launchpad.net>: > Question #269063 on Yade changed: > https://answers.launchpad.net/yade/+question/269063 > > Alexander gave more information on the question: > Also the last MWE: > > > import __builtin__ > from yade import export > > ################################################### > # define materials and model configuration > > E = 5.2e11#0.65e11#1.338e11#2e11 # Young's modulus of model need to be > calibrated > v = 0.3# Poisson's ratio > P = 150e6 # initial pressure value > d = 7850 # density > > r = 0.25 # spheres radius > > # Enlarge interaction radius between spheres using "interaction_radius" > parameter (for example in uniax.py this value is 1.5) > interaction_radius = 1.5 > > F = P*r > > # define plate material, create "dense" packing by setting friction to > zero initially > O.materials.append(CpmMat(young=E, > frictionAngle=0, > poisson=v, > density=d, > sigmaT=3.5e6, > epsCrackOnset=1e-4, > neverDamage=True, > isoPrestress=0, > relDuctility=30, > label = 'mat')) > > # represent plate like a set of regular monosized set of spheres > # also set boundary conditions via predefined tensile force for spheres on > ABCD and > # fixed spheres on KGHO > > O.bodies.append(pack.regularOrtho(pack.inAlignedBox((0,0,0),(16.1,16.1,2.1)),r,0)) > for b in O.bodies: > id = b.id > if b.state.pos[1]+r > 15.9: > O.forces.addF(id,(0,F,0),permanent=True) > if b.state.pos[1]-r < 0.1: > O.forces.addF(id,(0,-F,0),permanent=True) > > > ################################################### > # define engines > > # simulation loop > O.engines=[ > ForceResetter(), > > > InsertionSortCollider([Bo1_Sphere_Aabb(aabbEnlargeFactor=interaction_radius,label='bo1s')]), > InteractionLoop( > > [Ig2_Sphere_Sphere_ScGeom(interactionDetectionFactor=interaction_radius,label='ig2ss')], > [Ip2_CpmMat_CpmMat_CpmPhys()], > [Law2_ScGeom_CpmPhys_Cpm()] > ), > CpmStateUpdater(realPeriod=1), > NewtonIntegrator(damping=0.4) > ] > > ################################################### > # start simulation and compute strain and stress > > # try to run script with qt graphical interface > try: > yade.qt.Controller(), yade.qt.View() > except: > print 'Qt graphical interface is not avaliable' > > # set the integration timestep to be 1/2 of the "critical" timestep > O.dt=.5*utils.PWaveTimeStep() > > # run one single step > O.step() > > # reset interaction radius to the default value > bo1s.aabbEnlargeFactor=1.0 > ig2ss.interactionDetectionFactor=1.0 > > # run simulation, until static equilibrium will not reached > while unbalancedForce()>1e-2: > O.run(10,True) > > # compute stress tensor for each body > stresses = bodyStressTensors() > > ################################################### > # save data to vtk. file > __builtin__.my_stresses = stresses > vtk = export.VTKExporter('result') > > vtk.exportSpheres(what=[('radius','b.shape.radius'),('displacement','b.state.displ()'),('stress','my_stresses[ > b.id]')]) > > -- > You received this question notification because you are a member of > yade-users, which is an answer contact for Yade. > > _______________________________________________ > Mailing list: https://launchpad.net/~yade-users > Post to : yade-users@lists.launchpad.net > Unsubscribe : https://launchpad.net/~yade-users > More help : https://help.launchpad.net/ListHelp >
_______________________________________________ Mailing list: https://launchpad.net/~yade-users Post to : yade-users@lists.launchpad.net Unsubscribe : https://launchpad.net/~yade-users More help : https://help.launchpad.net/ListHelp