Concrete cube dimension, aggregate particle and peri3dController

Asked by Faqih Maarif on 2020-05-25

Dear All,

I am new to YADE. I have studied some code from this forum. There are some of the questions related to concrete cube testing.

1. How to determine the dimensions of the concrete cube (150x150mm) in the modeling? In the code, there is an initial size = 1.2, but apparently, this is not the cube dimension.

2. How to determine the variation of aggregate granules if specified;
    a. 0-4mm: 40%
    b. 4-8 mm: 22%
    c. 8-16mm: 38%

3. How to determine the value (goal, xxPath, yyPath, zzPath, zxPath, xyPath), I'm confused with the determination of the numbers . I have read it in YADE Book (pg.280), but i dont understand about it.

goal=(20e-4,-6e-4,0, -2e6,3e-4,2e6)
# the prescribed path (step,value of stress/strain) can be defined in absolute values
xxPath=[(465,5e-4),(934,-5e-4),(1134,10e-4)],
# or in relative values
yyPath=[(2,4),(7,-2),(11,0),(14,4)],
# if the goal value is 0, the absolute stress/strain values are always considered (step values remain relative)
zzPath=[(5,-1e7),(10,0)],
# if ##Path is not explicitly defined, it is considered as linear function between (0,0) and (nSteps,goal)
# as in yzPath and xyPath
# the relative values are really relative (zxPath gives the same - except of the sign from goal value - result as yyPath)
zxPath=[(4,2),(14,-1),(22,0),(28,2)],
xyPath=[(1,1),(2,-1),(3,1),(4,-1),(5,1)],

Could you please help me with this?. I'm writing a thesis and paper using YADE.

Regards,
Faqih Ma’arif

****************************************************************************************************************************************************************************************************************
the complete code as follows:

# peri3dController_example1.py
# script, that explains funcionality and input parameters of Peri3dController

import string
from yade import pack, plot
from yade import plot,qt
from yade.pack import *

# create some material
#O.materials.append(CpmMat(neverDamage=True,young=25e9,frictionAngle=.7,poisson=.2,sigmaT=3e6,epsCrackOnset=1e-4,relDuctility=30))
O.materials.append(CpmMat(neverDamage=True,young=25e9,frictionAngle=.7,poisson=.2,sigmaT=3e6,epsCrackOnset=1e-4,relDuctility=30))

# create periodic assembly of particles
initSize=1.2 #old

sp=pack.randomPeriPack(radius=.05,initSize=Vector3(initSize,initSize,initSize),memoizeDb='/tmp/packDb.sqlite')
sp.toSimulation()

# plotting
#plot.live=False
plot.plots={'progress':('sx','sy','sz','syz','szx','sxy',),'progress_':('ex','ey','ez','eyz','ezx','exy',)}
def plotAddData():
 plot.addData(
  progress=p3d.progress,progress_=p3d.progress,
  sx=p3d.stress[0],sy=p3d.stress[1],sz=p3d.stress[2],
  syz=p3d.stress[3],szx=p3d.stress[4],sxy=p3d.stress[5],
  ex=p3d.strain[0],ey=p3d.strain[1],ez=p3d.strain[2],
  eyz=p3d.strain[3],ezx=p3d.strain[4],exy=p3d.strain[5],
 )

# in how many time steps should be the goal state reached
nSteps=4000 #new

O.dt=PWaveTimeStep()/2
EnlargeFactor=1.5
EnlargeFactor=1.0
O.engines=[
 ForceResetter(),
 InsertionSortCollider([Bo1_Sphere_Aabb(aabbEnlargeFactor=EnlargeFactor,label='bo1s')]),
 InteractionLoop(
  [Ig2_Sphere_Sphere_ScGeom(interactionDetectionFactor=EnlargeFactor,label='ig2ss')],
  [Ip2_CpmMat_CpmMat_CpmPhys()],[Law2_ScGeom_CpmPhys_Cpm()]),
 NewtonIntegrator(),
 Peri3dController(
       goal=(20e-4,-6e-4,0, -2e6,3e-4,2e6), # Vector6 of prescribed final values (xx,yy,zz, yz,zx,xy)
       stressMask=0b101100, # prescribed ex,ey,sz,syz,ezx,sxy; e..strain; s..stress
       nSteps=nSteps, # how many time steps the simulation will last
       # after reaching nSteps do doneHook action
       doneHook='print "Simulation with Peri3dController finished."; O.pause()',

       # the prescribed path (step,value of stress/strain) can be defined in absolute values
       xxPath=[(465,5e-4),(934,-5e-4),(1134,10e-4)],
       # or in relative values
       yyPath=[(2,4),(7,-2),(11,0),(14,4)],
       # if the goal value is 0, the absolute stress/strain values are always considered (step values remain relative)
       zzPath=[(5,-1e7),(10,0)],
       # if ##Path is not explicitly defined, it is considered as linear function between (0,0) and (nSteps,goal)
       # as in yzPath and xyPath
       # the relative values are really relative (zxPath gives the same - except of the sign from goal value - result as yyPath)
       zxPath=[(4,2),(14,-1),(22,0),(28,2)],
       xyPath=[(1,1),(2,-1),(3,1),(4,-1),(5,1)],
       # variables used in the first step
       label='p3d'
       ),
 PyRunner(command='plotAddData()',iterPeriod=1),
]

O.step()
bo1s.aabbEnlargeFactor=ig2ss.interactionDetectionFactor=1.
O.run(); #O.wait()

plot.plot(subPlots=False)

****************************************************************************************************************************************************************************************************************

Question information

Language:
English Edit question
Status:
Solved
For:
Yade Edit question
Assignee:
No assignee Edit question
Solved by:
Jan Stránský
Solved:
2020-05-26
Last query:
2020-05-26
Last reply:
2020-05-26

Hi,

> there is an initial size = 1.2, but apparently, this is not the cube dimension

Why not?

> How to determine the value (goal, xxPath, yyPath, zzPath, zxPath, xyPath)

Could you explain the loading path you would like to impose? Then maybe understanding this part will be easier.

Regards

Bruno

Jan Stránský (honzik) said : #2

Hello,

> I am new to YADE

welcome :-)

> There are some of the questions ...

next time please open separate "ask a question" for each question [1]

> 1...
> peri3dController
> How to determine the dimensions of the concrete cube
> there is an initial size = 1.2, but apparently, this is not the cube dimension.

there is no "cube", the simulation is periodic, simulating infinite space.
To get dimension of a periodic cell (which is in no way related to physical dimensions - as it is infinite), you can use O.cell.size [2].
The initSize is passed to randomPeriPack. It creates a loose packing using makeCloud using the initSize size, then compress it. The parameter basically control number of particles in the simulation.

Have a look at yade/examples/concrete [5] for simulation of "physical" samples.

> 2. How to determine the variation of aggregate granules if specified;

It is not possible "as is", randomPariPack [3] just supports uniform distribution (defined by radius and rRelFuzz parameters).
To use defined particle size distribution, one option is to "rewrite" the randomPeriPack function [4] with adjusted makeCloud call.

> in YADE Book (pg.280)

it is better to use links to online documentation, like [6]

> 3. How to determine the value (goal, xxPath, yyPath, zzPath, zxPath, xyPath), I'm confused with the determination of the numbers . I have read it in YADE Book (pg.280), but i dont understand about it.

Please describe more what you do not understand.
The path arguments are just a list of (time,value) pair, i.e. what value is prescribed at what time/iter.
In certain cases, the values may be relative (e.g. the time on scale [0,1], internally rescaling the values with nSteps argument)
The prescribed value is linearly interpolated between these defined points.
Have a look at comments in the example you have posted and compare them with the simulation results.

A note about modeling of concrete using periodic simulations: in case of strain localization, the periodicity has influence on cracks/strain localized area and therefore influence on overall response.
Which is not a problem "by default", one just need to (should) have this in mind while using it.

cheers
Jan

[1] https://www.yade-dem.org/wiki/Howtoask
[2] https://yade-dem.org/doc/yade.wrapper.html#yade.wrapper.Cell.size
[3] https://yade-dem.org/doc/yade.pack.html#yade.pack.randomPeriPack
[4] https://gitlab.com/yade-dev/trunk/-/blob/master/py/pack/pack.py#L566
[5] https://gitlab.com/yade-dev/trunk/-/tree/master/examples/concrete
[5] https://yade-dem.org/doc/yade.wrapper.html#yade.wrapper.Peri3dController.xxPath

Faqih Maarif (faqih07) said : #3

Dear All
First of all, permission, I say thank you for an enlightening answer, and I would like to apologize for not obeying the rules.

Thank you also for the answers to the concrete cube's dimensions and the variation of aggregate particles. I will ask separately as a rule in the forum.

My cases are the following:
I have tested the compressive strength of the concrete cube (150mmx150mm), and I will be modeling in YADE. In modeling, I will consider stress and strain periodically. I am still confused about how to determine the (xxPath, yyPath,zzPath,zxPath,xyPath), as written below.

xxPath=[(465,5e-4),(934,-5e-4),(1134,10e-4)], #old
yyPath=[(2,4),(7,-2),(11,0),(14,4)],
zzPath=[(5,-1e7),(10,0)],
zxPath=[(4,2),(14,-1),(22,0),(28,2)],
xyPath=[(1,1),(2,-1),(3,1),(4,-1),(5,1)],

Can you please help?

Regards,
Faqih Ma’arif

Best Jan Stránský (honzik) said : #4

> I have tested the compressive strength of the concrete cube (150mmx150mm)
> In modeling, I will consider stress and strain periodically.

Strain field in the post-peak range in uniaxial compression is not uniform, so using periodicity needs some caution (!)

> I am still confused about how to determine the (xxPath, yyPath,zzPath,zxPath,xyPath), as written below.

the easiest is not to bother with paths at all :-) by default they are linear from zero to the goal value, which should be OK for uniaxial test - just define appropriate goal and stressMask.

cheers
Jan

Faqih Maarif (faqih07) said : #5

Dear
Mr. Jan and Mr. Bruno

Thank you very much for your attention and cooperation
I already solve the problem.

Regards,
Faqih

Faqih Maarif (faqih07) said : #6

Thanks Jan Stránský, that solved my question.