# 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)],

Regards,
Faqih Ma’arif

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

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

import string

# 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.toSimulation()

# plotting
#plot.live=False
plot.plots={'progress':('sx','sy','sz','syz','szx','sxy',),'progress_':('ex','ey','ez','eyz','ezx','exy',)}
progress=p3d.progress,progress_=p3d.progress,
sx=p3d.stress,sy=p3d.stress,sz=p3d.stress,
syz=p3d.stress,szx=p3d.stress,sxy=p3d.stress,
ex=p3d.strain,ey=p3d.strain,ez=p3d.strain,
eyz=p3d.strain,ezx=p3d.strain,exy=p3d.strain,
)

# 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'
),
]

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

plot.plot(subPlots=False)

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

## Question information

Language:
English Edit question
Status:
Solved
For:
Assignee:
No assignee Edit question
Solved by:
Jan Stránský
Solved:
2020-05-26
Last query:
2020-05-26
2020-05-26
 Bruno Chareyre (bruno-chareyre) said on 2020-05-25: #1

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 on 2020-05-25: #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...
> 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 .
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  for simulation of "physical" samples.

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

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

it is better to use links to online documentation, like 

> 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

 Faqih Maarif (faqih07) said on 2020-05-26: #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)],

Regards,
Faqih Ma’arif Jan Stránský (honzik) said on 2020-05-26: #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 on 2020-05-26: #5

Dear
Mr. Jan and Mr. Bruno

Thank you very much for your attention and cooperation