← 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

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.