Using CpmMat to simulate the hysteretic curve of concrete

Asked by liukeqi

Hello everyone,
I want to use the concrete material to simulate the hysteretic curve by loading and unloading in turns. I used the periodic boundary and controlled the strain. It should have plastic strain when it entered plastic state, but I found that no matter how large the strain is when I loaded, it always then returned to zero when I unloaded by making the stress to zero(the strain should not be zero when the stress is zero). And if I wanted to make the stress to zero when I unload by controlling the stress, I had to make the strain being zero. I cannot find the concrete damage. Can you give me some suggestions? Thanks a lot. This is my code.
############################################################
#!/usr/bin/python # This is server.py file
import string
from yade import plot,qt
from yade.pack import *
from yade import pack, plot

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

initSize=1.2

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

sp.toSimulation()

O.dt=PWaveTimeStep()/2

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

 )

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)plot.plots={'ex':('sx',)}

       # 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.001,0,0,0,0,0) #xx, yy, zz, yz, zx, xy
O.step()
bo1s.aabbEnlargeFactor=ig2ss.interactionDetectionFactor=1.
O.run(); O.wait()

O.engines=[
 ForceResetter(),
 InsertionSortCollider([Bo1_Sphere_Aabb(aabbEnlargeFactor=1.,label='bo1s')]),
 InteractionLoop(
  [Ig2_Sphere_Sphere_ScGeom(interactionDetectionFactor=1.,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)plot.plots={'ex':('sx',)}

       # 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',
       strain=p3d.strain
       ),
 PyRunner(command='plotAddData()',iterPeriod=1),
]

p3d.stressMask=0b111110 # prescribed ex,ey,sz,syz,ezx,sxy; e..strain; s..stress
p3d.goal=(0.001,0,0,0,0,0) #xx, yy, zz, yz, zx, xy
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
Jérôme Duriez (jduriez) said :
#1

Hello,

As a first suggestion, I would recommend you give a close look to the exact meaning of the model parameters to isolate which are the one controlling the interaction strengths. (as for myself, I do not know CpmMat..)
Then try to reduce (a lot) them..

Jerome

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

Hello,
this model is designed such that on interaction level it has damage in
tension and plasticity in shear. To have plasticity on macro-level, you
have to adjust parameters somehow (e.g. decrease sigmaT)
As a sidenote, periodicity is not a very good idea for inelastic range in
compression, because the failure mode is not periodic
cheers
Jan

2016-06-20 12:51 GMT+02:00 liukeqi <email address hidden>:

> New question #295486 on Yade:
> https://answers.launchpad.net/yade/+question/295486
>
> Hello everyone,
> I want to use the concrete material to simulate the hysteretic curve by
> loading and unloading in turns. I used the periodic boundary and controlled
> the strain. It should have plastic strain when it entered plastic state,
> but I found that no matter how large the strain is when I loaded, it always
> then returned to zero when I unloaded by making the stress to zero. And if
> I wanted to make the stress to zero when I unload by controlling the
> stress, I had to make the strain being zero. I cannot find the concrete
> damage. Can you give me some suggestions? Thanks a lot. This is my code.
> ############################################################
> #!/usr/bin/python # This is server.py file
> import string
> from yade import plot,qt
> from yade.pack import *
> from yade import pack, plot
>
>
>
> O.materials.append(CpmMat(young=25e9,frictionAngle=.7,poisson=.2,sigmaT=3e6,epsCrackOnset=1e-4,relDuctility=30))
>
> initSize=1.2
>
>
> sp=pack.randomPeriPack(radius=.05,initSize=Vector3(initSize,initSize,initSize))
>
> sp.toSimulation()
>
>
>
>
> O.dt=PWaveTimeStep()/2
>
> plot.plots={'ex':('sx',)}
> def plotAddData():
> plot.addData(
> sx=p3d.stress[0],
> ex=p3d.strain[0],
>
> )
>
> 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)plot.plots={'ex':('sx',)}
>
> # 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.001,0,0,0,0,0) #xx, yy, zz, yz, zx, xy
> O.step()
> bo1s.aabbEnlargeFactor=ig2ss.interactionDetectionFactor=1.
> O.run(); O.wait()
>
>
> O.engines=[
> ForceResetter(),
>
> InsertionSortCollider([Bo1_Sphere_Aabb(aabbEnlargeFactor=1.,label='bo1s')]),
> InteractionLoop(
>
> [Ig2_Sphere_Sphere_ScGeom(interactionDetectionFactor=1.,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)plot.plots={'ex':('sx',)}
>
> # 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',
> strain=p3d.strain
> ),
> PyRunner(command='plotAddData()',iterPeriod=1),
> ]
>
> p3d.stressMask=0b111110 # prescribed ex,ey,sz,syz,ezx,sxy;
> e..strain; s..stress
> p3d.goal=(0.001,0,0,0,0,0) #xx, yy, zz, yz, zx, xy
> 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 :
#3

Thanks Jérôme Duriez.

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

Thanks Jan Stránský. It solved my question.