create a sample with no voids between particles,so it seems like a solid

Asked by kalogeropoulos

Hello to everyone,

i have this code, and i want to simulate the cutting process of a rock sample.
Above is my code, which generate a sample with specific characteristics and a
cutter (geom.facetBox).

When i put my data in paraview, i see that are many gaps between spheres. It seems like my sample,
is more like a gas rather as a rock sample.

I want to simulate the fracture pattern and the chip formation during cutting, byt i cant!!!
Question: how can i create a sample with no voids? I try periodic triaxial test byt there are voids too.

My code is here:

#!/usr/bin/python
# -*- coding: utf-8 -*-
from __future__ import division

from yade import plot,pack,timing, utils, geom
import time, sys, os, copy

#import matplotlib
#matplotlib.rc('text',usetex=True)
#matplotlib.rc('text.latex',preamble=r'\usepackage{concrete}\usepackage{euler}')

# default parameters or from table
readParamsFromTable(noTableOk=True, # unknownOk=True,
 young=24e9, #kn
 poisson=.2, #ks

 sigmaT=3.5e6,
 frictionAngle=atan(0.8), #frictionAngle
 epsCrackOnset=1e-4,
 relDuctility=30,

 intRadius=1.5,
 dtSafety=.8,
 damping=0.4,
 specimenLength=1,
 sphereRadius=0.99e-3, #0.35e-3

 # isotropic confinement (should be negative)
 isoPrestress=0,
)

from yade.params.table import *

if 'description' in O.tags.keys(): O.tags['id']=O.tags['id']+O.tags['description']
#material properties
concreteId=O.materials.append(CpmMat(young=young,frictionAngle=frictionAngle,poisson=poisson,density=4800,sigmaT=sigmaT,
     relDuctility=relDuctility,epsCrackOnset=epsCrackOnset,isoPrestress=isoPrestress))

sps=SpherePack()
sp=pack.randomDensePack(pack.inAlignedBox((-75e-3*specimenLength,-27e-3*specimenLength,-6.35e-3*specimenLength),(75e-3*specimenLength,27e-3*specimenLength,6.35e-3*specimenLength)),spheresInCell=2000,radius=sphereRadius,memoizeDb='/tmp/triaxPackCache.sqlite',returnSpherePack=True)
sp.toSimulation(material=concreteId)

bx = geom.facetBox(center=(-80e-3,27e-3,0.0),extents=(3e-3,-5e-3,6.35e-3),orientation=Quaternion((0,0,1),-pi/36), wallMask=(2+8))
O.bodies.append(bx)
for facet in bx:
 facet.state.blockedDOFs='xyzXYZ'
 facet.state.vel=(5.0,0,0)
#bx.state.blockedDOFs = 'xyzXYZ'
#bx.state.vel = (10.0,0,0)

O.dt=dtSafety*PWaveTimeStep()

O.engines=[
 ForceResetter(),
 InsertionSortCollider([Bo1_Sphere_Aabb(aabbEnlargeFactor=intRadius,label='is2aabb'),Bo1_Facet_Aabb()],verletDist=.05*sphereRadius),
 InteractionLoop(
  [Ig2_Sphere_Sphere_ScGeom(interactionDetectionFactor=intRadius,label='ss2sc'), Ig2_Facet_Sphere_ScGeom()],
  [Ip2_CpmMat_CpmMat_CpmPhys(cohesiveThresholdIter=1)],
  [Law2_ScGeom_CpmPhys_Cpm()],
 ),
 NewtonIntegrator(damping=damping,label='damper'),
    VTKRecorder(fileName='3d-vtk-',recorders=['cracks'],iterPeriod=1000),
    CpmStateUpdater(iterPeriod=50),
    PyRunner(command='addPlotData()',realPeriod=2),
    PyRunner(iterPeriod=100,initRun=True,command='recorder()'),
]

def addPlotData():
   global Fx
   Fx = 0.0
   Fx = abs(sum(O.forces.f(facet.id)[0] for facet in bx))
   plot.addData(i = O.iter , Fx=Fx)
   plot.saveDataTxt(O.tags['d.id']+'.txt')

tensCks=shearCks=cks=cks0=0
def recorder():
    global tensCks, shearCks
    tensCks=0
    shearCks=0
    for o in O.bodies:
        if isinstance(o.shape,Sphere):
            tensCks+=o.state.tensBreak
            shearCks+=o.state.shearBreak
    yade.plot.addData({ 't':O.time,'i':O.iter,'tc':tensCks,'sc':shearCks})
    plot.saveDataTxt('intrs.txt')

plot.plots={'i':('Fx')}
plot.plot()

Thank you!!

Question information

Language:
English Edit question
Status:
Solved
For:
Yade Edit question
Assignee:
No assignee Edit question
Solved by:
kalogeropoulos
Solved:
Last query:
Last reply:
Revision history for this message
Jérôme Duriez (jduriez) said :
#1

Hi,

Since YADE/DEM deals with packings of granular materials, which necessarily are porous materials, I think it will be impossible to have strictly no voids.

This being said, plenty of YADE/DEM simulations deal with granular packings that do have a solid nature, including the case of rock fracturing, so your final objective should be achievable.

Your description is actually a bit unclear to me, because the "gas" like nature usually occurs using makeCloud() function [1], while the randomDensePack() function normally returns a more solid-like packing.

To be sure, what is the porosity value of your packing ?

Jérôme

[1] https://yade-dem.org/doc/yade.pack.html?highlight=makecloud#yade._packSpheres.SpherePack.makeCloud

Revision history for this message
Jan Stránský (honzik) said :
#2

Hello,

> I want to simulate the fracture pattern and the chip formation during cutting, byt i cant!!!

please be more specific why you can't.. just because of the voids?

> When i put my data in paraview, i see that are many gaps between spheres. It seems like my sample, is more like a gas rather as a rock sample.

randomDensePack with uniform particle size creates packing with ~60% of volume occupied by spheres. So even it is not "void-less", it should not look like gas..
How you extracted the data about spheres (is not in your code)?
How you displayed the spheres? As Glyphs [1]?
Are you sure all spheres are displayed? E.g., by default only 5000 spheres are displayed.
Also check that their dimensions are ok.
I have tried you code and it looks pretty ok, definitely not like gas..

> how can i create a sample with no voids?

simply: you cannot with finite sized spheres.
spheres are used because of computational reasons (their contact is computed very easily etc.) as a trade-off for geometrical accuracy.

There are some ways how to improve "voidness", but let's check paraview first

cheers
Jan

[1] https://yade-dem.org/doc/user.html#rendering-spherical-particles-glyphs

Revision history for this message
kalogeropoulos (antoniskal) said :
#3

Well, i extracted with the right way my data in paraview and there are no voids any more. The mistake i done , it was about the radii of the spheres. I didn't put the value 1, and i wasn't put all the particles.

For capturing the fracture pattern and the formation of a chip, i think i must find the right model to put to my material, and play with the values of parameters (young, poisson, cohesion, tensile strength etc).