Rate of strain between compressive and tensile strength using CpmMat.

Asked by liukeqi

Hello everyone,
I looked up document information and found that the concrete’s strain at maximum compressive strength is about 0.0033 and the strain at maximum tensile strength is about 0.00015. The rate of compressive strain and tensile strain is about 20. I used the following code to compress the concrete and tense it and I found from the diagram that the rate is about 2. I tried to change the rate by modifying the parameters, but I failed. Can you give me some suggestion about how to change the rate between the strain at maximum compressive strength and the strain at maximum tensile strength?

#########################################first code, calculate the strain at maximum compressive strength
#!/usr/bin/python
import string
from yade import plot,qt
from yade.pack import *
from yade import pack, plot
O.materials.append(CpmMat(young=24e9,frictionAngle=atan(0.8),poisson=.2,sigmaT=3.5e6,relDuctility=30,epsCrackOnset=1e-4))

initSize=1.2

sp=pack.randomPeriPack(radius=.05,initSize=Vector3(initSize,initSize,initSize))

sp.toSimulation()

O.save('/tmp/hh.gz')

plot.plots={'ex':('sx',)}
def plotAddData():
 plot.addData(
  sx=p3d.stress[0],
  ex=p3d.strain[0],

 )

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(

       nSteps=4000, # 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

       # or in relative values

       # if the goal value is 0, the absolute stress/strain values are always considered (step values remain relative)

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

       # variables used in the first step
       label='p3d'
       ),
 PyRunner(command='plotAddData()',iterPeriod=1),

]

p3d.stressMask=0b111110 # prescribed ex,ey,sz,syz,ezx,sxy; e..strain; s..stress
p3d.goal=(-0.005,0,0,0,0,0) #xx, yy, zz, yz, zx, xy
O.step()
bo1s.aabbEnlargeFactor=ig2ss.interactionDetectionFactor=1.
O.run(); O.wait()
plot.plot(subPlots=False)

#########################################second code, calculate the strain at maximum tensile strength
#!/usr/bin/python
import string
from yade import plot,qt
from yade.pack import *
from yade import pack, plot

O.load('/tmp/hh.gz')

plot.plots={'ex':('sx',)}
def plotAddData():
 plot.addData(
  sx=p3d.stress[0],
  ex=p3d.strain[0],

 )

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(

       nSteps=4000, # 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

       # or in relative values

       # if the goal value is 0, the absolute stress/strain values are always considered (step values remain relative)

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

       # variables used in the first step
       label='p3d'
       ),
 PyRunner(command='plotAddData()',iterPeriod=1),

]

p3d.stressMask=0b111110 # prescribed ex,ey,sz,syz,ezx,sxy; e..strain; s..stress
p3d.goal=(0.0015,0,0,0,0,0) #xx, yy, zz, yz, zx, xy
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:
liukeqi
Solved:
Last query:
Last reply:
Revision history for this message
Jan Stránský (honzik) said :
#1

Hello,

two notes:
1) EnlargeFactor=1.0 generates very loose interaction network. The CPM
model was developed and tested for EnlargeFactor=1.5
2) I am not sure if periodic simulation is the best choice for compressive
simulations (as the cracks would not be periodic), you can also try
non-periodic simulation, see e.g. [1]

cheers
Jan

[1] https://github.com/yade/trunk/blob/master/examples/concrete/uniax.py

2016-05-22 14:46 GMT+02:00 liukeqi <email address hidden>:

> New question #294036 on Yade:
> https://answers.launchpad.net/yade/+question/294036
>
> Hello everyone,
> I looked up document information and found that the concrete’s strain at
> maximum compressive strength is about 0.0033 and the strain at maximum
> tensile strength is about 0.00015. The rate of compressive strain and
> tensile strain is about 20. I used the following code to compress the
> concrete and tense it and I found from the diagram that the rate is about
> 2. I tried to change the rate by modifying the parameters, but I failed.
> Can you give me some suggestion about how to change the rate between the
> strain at maximum compressive strength and the strain at maximum tensile
> strength?
>
> #########################################first code, calculate the strain
> at maximum compressive strength
> #!/usr/bin/python
> import string
> from yade import plot,qt
> from yade.pack import *
> from yade import pack, plot
>
> O.materials.append(CpmMat(young=24e9,frictionAngle=atan(0.8),poisson=.2,sigmaT=3.5e6,relDuctility=30,epsCrackOnset=1e-4))
>
> initSize=1.2
>
>
> sp=pack.randomPeriPack(radius=.05,initSize=Vector3(initSize,initSize,initSize))
>
> sp.toSimulation()
>
> O.save('/tmp/hh.gz')
>
> plot.plots={'ex':('sx',)}
> def plotAddData():
> plot.addData(
> sx=p3d.stress[0],
> ex=p3d.strain[0],
>
> )
>
>
> 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(
>
> nSteps=4000,
> # 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
>
> # or in relative
> values
>
> # if the goal
> value is 0, the absolute stress/strain values are always considered (step
> values remain relative)
>
> # 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)
>
>
> # variables used
> in the first step
> label='p3d'
> ),
> PyRunner(command='plotAddData()',iterPeriod=1),
>
> ]
>
> p3d.stressMask=0b111110 # prescribed ex,ey,sz,syz,ezx,sxy;
> e..strain; s..stress
> p3d.goal=(-0.005,0,0,0,0,0) #xx, yy, zz, yz, zx, xy
> O.step()
> bo1s.aabbEnlargeFactor=ig2ss.interactionDetectionFactor=1.
> O.run(); O.wait()
> plot.plot(subPlots=False)
>
> #########################################second code, calculate the strain
> at maximum tensile strength
> #!/usr/bin/python
> import string
> from yade import plot,qt
> from yade.pack import *
> from yade import pack, plot
>
>
> O.load('/tmp/hh.gz')
>
> plot.plots={'ex':('sx',)}
> def plotAddData():
> plot.addData(
> sx=p3d.stress[0],
> ex=p3d.strain[0],
>
> )
>
>
> 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(
>
> nSteps=4000,
> # 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
>
> # or in relative
> values
>
> # if the goal
> value is 0, the absolute stress/strain values are always considered (step
> values remain relative)
>
> # 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)
>
>
> # variables used
> in the first step
> label='p3d'
> ),
> PyRunner(command='plotAddData()',iterPeriod=1),
>
> ]
>
>
>
>
> p3d.stressMask=0b111110 # prescribed ex,ey,sz,syz,ezx,sxy;
> e..strain; s..stress
> p3d.goal=(0.0015,0,0,0,0,0) #xx, yy, zz, yz, zx, xy
> O.step()
> bo1s.aabbEnlargeFactor=ig2ss.interactionDetectionFactor=1.
>
> O.run(); O.wait()
> plot.plot(subPlots=False)
>
>
> --
> You received this question notification because your team yade-users is
> an answer contact for Yade.
>
> _______________________________________________
> Mailing list: https://launchpad.net/~yade-users
> Post to : <email address hidden>
> Unsubscribe : https://launchpad.net/~yade-users
> More help : https://help.launchpad.net/ListHelp
>

Revision history for this message
liukeqi (891979456-h) said :
#2

Thanks Jan Stránský, that solved my question. I do not quiet understand the concept of "periodic simulation", for example, the information that you suggested "as the cracks would not be periodic". Could you recommend some documents about the concept of "periodic boundary" when it is convenience for you?

Revision history for this message
Jérôme Duriez (jduriez) said :
#3

For general documentation about periodic boundaries, you might give a look to
http://www.cgp-gateway.org/resources/Articles/PBC.pdf
(chapter of the book Discrete-element Modeling of Granular Materials, ISTE-Wiley, edited by the authors of this chapter)

Revision history for this message
Jérôme Duriez (jduriez) said :
#4

Sorry, the editors of the book are in fact Radjai and Dubois, vs Radjai and Voivret for that chapter...

Revision history for this message
liukeqi (891979456-h) said :
#5

Thanks Jan Stránský. I was very glad of your consistent help.