← Back to team overview

yade-users team mailing list archive

Re: [Question #290179]: The relationship of Young modulus, Poisson’s ratio and shear modulus

 

Question #290179 on Yade changed:
https://answers.launchpad.net/yade/+question/290179

    Status: Open => Answered

Jan Stránský proposed the following answer:
Hello,

the input parameters "young" and "poisson", as well as contact parameters
"E", "G" etc. are the model (or "micro") parameters. The overall structural
response (or "macro" parameters), Young' modulus, shear modulus and
Poisson's ratio is somehow related to them, but they are not the same. See
the links below for more information.

G and E/2(1+nu), computed from the simulation results, should
approximatelly fit together. The formula (and that for Young's modulus and
Poisson's ratio) of course are valid only in elastic range. With the input
data in your script, the concrete already exhibit some inelastic effects,
so the results of elastic constants does not fit together. Replace material
in both cases with following (or decrease stresses and strains to remain in
elastic range) and it should work

O.materials.append(CpmMat(density=4800,young=10.4e10,frictionAngle=.7,poisson=.15,sigmaT=3e60,epsCrackOnset=1e60,relDuctility=30,neverDamage=True))

I tried it and the difference was 2%.

cheers
Jan

[1] https://answers.launchpad.net/yade/+question/198594
[2] https://answers.launchpad.net/yade/+question/248983
[3] https://answers.launchpad.net/yade/+question/222363
[4] https://www.yade-dem.org/doc/formulation.html#stiffnesses
[5] https://www.yade-dem.org/doc/formulation.html#contact-cross-section


2016-04-08 5:22 GMT+02:00 liukeqi <question290179@xxxxxxxxxxxxxxxxxxxxx>:

> Question #290179 on Yade changed:
> https://answers.launchpad.net/yade/+question/290179
>
> Description changed to:
> Hello everyone,
> I want to use the boundary controller “peri3dController” to test the
> property of the concrete material, but I found that the relation of Young
> modulus(E), Poisson’s ratio and shear modulus(G) did not accord with the
> formula G =E/2(1+poisson). I use the formula “stress/strain” to calculate
> the Young modulus and shear modulus, and use the formula
> “-1/2*(strain[y]+strain[z])/strain[x]” to calculate the Poisson’s ratio.I
> also found that in the source code “ConcretePM.cpp”, “void
> Ip2_CpmMat_CpmMat_CpmPhys::go()”, there is “cpmPhys->G =
> mat1->young*mat1->poisson;”. Can you tell me why the source code do not
> accord with the formula G =E/2(1+poisson)? Is there any misunderstanding
> for me? If I want to make the material accord with the formula G
> =E/2(1+poisson), which material should I choose or what parameter should I
> change to meet the condition? Thanks a lot. This is my code.
>
> ###############################first, calculate the shear modulus
> #!/usr/bin/python           # This is server.py file
> from __future__ import division
> import string
> from yade import plot,qt
> from yade.pack import *
> from yade import pack, plot
>
>
> O.materials.append(CpmMat(density=4800,young=10.4e10,frictionAngle=.7,poisson=.15,sigmaT=3e6,epsCrackOnset=1e-4,relDuctility=30))
>
> initSize=1.2
>
>
> sp=pack.randomPeriPack(radius=.05,initSize=Vector3(initSize,initSize,initSize))
>
> sp.toSimulation()
>
>
> plot.plots={'iter':('sx','sy','sz','syz','szx','sxy',),'iter_':('ex','ey','ez','eyz','ezx','exy',),'exy':('sxy',)}
>
> def plotAddData():
>         plot.addData(
>                 iter=O.iter,iter_=O.iter,
>                 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],
>         )
>
>
> 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(
>
>
> stressMask=0b011111,    # prescribed ex,ey,sz,syz,ezx,sxy;   e..strain;
> s..stress
>                                                         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.goal=(0,0,0,0,0,-0.00002)  #xx, yy, zz, yz, zx, xy
> O.step()
> bo1s.aabbEnlargeFactor=ig2ss.interactionDetectionFactor=1.
> O.run(); O.wait()
>
> print "the shear modulus"
> print p3d.stress[5]/p3d.strain[5]
>
>
> plot.plot(subPlots=False)
>
> ##########################second, calculate the Young modulus and
> Poisson's ratio
> #!/usr/bin/python           # This is server.py file
> from __future__ import division
> import string
> from yade import plot,qt
> from yade.pack import *
> from yade import pack, plot
>
>
> O.materials.append(CpmMat(density=4800,young=10.4e10,frictionAngle=.7,poisson=.15,sigmaT=3e6,epsCrackOnset=1e-4,relDuctility=30))
>
> initSize=1.2
>
>
> sp=pack.randomPeriPack(radius=.05,initSize=Vector3(initSize,initSize,initSize))
>
> sp.toSimulation()
>
>
> plot.plots={'iter':('sx','sy','sz','syz','szx','sxy',),'iter_':('ex','ey','ez','eyz','ezx','exy',),'ex':('sx',)}
>
> def plotAddData():
>         plot.addData(
>                 iter=O.iter,iter_=O.iter,
>                 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],
>         )
>
> 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(
>
>
> stressMask=0b111110,    # prescribed ex,ey,sz,syz,ezx,sxy;   e..strain;
> s..stress
>                                                         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.goal=(-0.00002,0,0,0,0,0)  #xx, yy, zz, yz, zx, xy
> O.step()
> bo1s.aabbEnlargeFactor=ig2ss.interactionDetectionFactor=1.
> O.run(); O.wait()
> print "Young modulus"
> print p3d.stress[0]/p3d.strain[0]
>
> print "Poisson's ratio"
> print -1/2*(p3d.strain[1]+p3d.strain[2])/p3d.strain[0]
>
>
> 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     : yade-users@xxxxxxxxxxxxxxxxxxx
> Unsubscribe : https://launchpad.net/~yade-users
> More help   : https://help.launchpad.net/ListHelp
>

-- 
You received this question notification because your team yade-users is
an answer contact for Yade.