yade-users team mailing list archive
-
yade-users team
-
Mailing list archive
-
Message #16193
[Question #660480]: stressIdeal
New question #660480 on Yade:
https://answers.launchpad.net/yade/+question/660480
The following code is taken from the example "peri3dController_triaxialCompression.py".
In the second "O.engines",
(1)What is the function of the code "strain=p3d.strain" ?
(2)In the vector of "stressIdeal", what do the last four items mean? I guess they are strain ez, exy, eyz, exz respectively.
Moreover,
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
from yade import pack,plot,qt
# define material
O.materials.append(FrictMat())
# create periodic assembly of particles
initSize=1.2
sp=pack.randomPeriPack(radius=.05,initSize=Vector3(initSize,initSize,initSize),memoizeDb='/tmp/packDb.sqlite')
angle=0
rot=Matrix3(cos(angle),0,-sin(angle), 0,1,0, sin(angle),0,cos(angle))
sp.toSimulation(rot=rot)
# plotting
plot.live=False
plot.plots={'iter':('sx','sy','sz','syz','szx','sxy',),'iter_':('ex','ey','ez','eyz','ezx','exy',),'ez':('sz',)}
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
mm,mx=[pt[axis] for pt in aabbExtrema()]
coord=mm,mm,mm
# define the first part of simulation, hydrostatic compression
O.engines=[
ForceResetter(),
InsertionSortCollider([Bo1_Sphere_Aabb()]),
InteractionLoop(
[Ig2_Sphere_Sphere_ScGeom()],
[Ip2_FrictMat_FrictMat_FrictPhys()],[Law2_ScGeom_FrictPhys_CundallStrack()]),
NewtonIntegrator(),
Peri3dController( goal=(-1e7,-1e7,-1e7, 0,0,0), # Vector6 of prescribed final values
stressMask=0b000111,
nSteps=500,
doneHook='print "Hydrostatic load reached."; O.pause()',
youngEstimation=.5e9, # needed, when only nonzero prescribed values are stress
maxStrain=.5,
label='p3d'
),
PyRunner(command='plotAddData()',iterPeriod=1),
]
O.run(); O.wait()
# second part, z-axis straining and constant transversal stress
O.engines=[
ForceResetter(),
InsertionSortCollider([Bo1_Sphere_Aabb()]),
InteractionLoop(
[Ig2_Sphere_Sphere_ScGeom()],
[Ip2_FrictMat_FrictMat_FrictPhys()],[Law2_ScGeom_FrictPhys_CundallStrack()]),
NewtonIntegrator(),
Peri3dController( goal=(-1e7,-1e7,-4e-1, 0,0,0), # Vector6 of prescribed final values
stressMask=0b000011,
nSteps=1000,
xxPath=[(0,1),(1,1)], # the first (time) zero defines the initial value of stress considered nonzero
yyPath=[(0,1),(1,1)],
doneHook='print "Simulation with Peri3dController finished."; O.pause()',
maxStrain=.5,
label='p3d',
strain=p3d.strain, # continue from value reached in previous part
stressIdeal=Vector6(-1e7,-1e7,0, 0,0,0), # continue from value reached in previous part
),
PyRunner(command='plotAddData()',iterPeriod=1),
]
O.run();O.wait()
plot.plot(subPlots=False)
----------------------------------------------------------------------------------------------------------------------------------------------------------------
Above is the example in your source code. And what i do is like this:
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( goal=(ag[0],ag[1],ag[2], ag[4],ag[5],ag[3]), # Vector6 of prescribed final values
stressMask=0b000000,
nSteps=100,
),
]
O.run();O.wait()
check[0]=check[0]+1
else:
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( goal=(-3e5,-3e5,arr[2],0,0,0), # Vector6 of prescribed final values
stressMask=0b000011,
nSteps=100,
xxPath=[(0,1),(1,1)], # the first (time) zero defines the initial value of stress considered nonzero
yyPath=[(0,1),(1,1)],
doneHook='print "Simulation with Peri3dController finished."; O.pause()',
maxStrain=.5,
label='p3d',
#strain=p3d.strain, # continue from value reached in previous part
stressIdeal=Vector6(-3e5,-3e5,arrcc[2], 0,0,0), # continue from value reached in previous part
),
]
the first engine means we give a 3e5Pa Hydrostatic load using ag which means strain.
and then in the second engine, we want to keep constan of the xxpath and yypath and give strain in the zzpath. arrcc[2] means the strain of last commit state in zzpath, and arr[2] means the total strain we give at current step in zzpath.
I want to know if i am right with the code above?
Thanks!
--
You received this question notification because your team yade-users is
an answer contact for Yade.