yade-users team mailing list archive
-
yade-users team
-
Mailing list archive
-
Message #12361
[Question #290179]: The relationship of Young modulus, Poisson’s ratio and shear modulus
New question #290179 on Yade:
https://answers.launchpad.net/yade/+question/290179
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*(strain[1]+strain[2])/strain[0]
plot.plot(subPlots=False)
--
You received this question notification because your team yade-users is
an answer contact for Yade.