← Back to team overview

yade-users team mailing list archive

Re: [Question #269063]: Metallic plate tension

 

Question #269063 on Yade changed:
https://answers.launchpad.net/yade/+question/269063

    Status: Open => Answered

Jan Stránský proposed the following answer:
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 <question269063@xxxxxxxxxxxxxxxxxxxxx>:

> 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@xxxxxxxxxxxxxxxxxxx
> Unsubscribe : https://launchpad.net/~yade-users
> More help   : https://help.launchpad.net/ListHelp
>

-- 
You received this question notification because you are a member of
yade-users, which is an answer contact for Yade.