yade-users team mailing list archive
-
yade-users team
-
Mailing list archive
-
Message #10635
Re: [Question #258686]: Calibrating model with Triaxial test
Question #258686 on Yade changed:
https://answers.launchpad.net/yade/+question/258686
Status: Answered => Open
M.Meidani is still having a problem:
Thanks Luc for your response.
I got surprised with the results.
I found that also friction angle is effect less.
I used the code in tutorial 1 of Triaxial test in github except that I changed confining method from internal to external (wall movement), I think there is a problem in my code but I don't now what!
I just copy the code below. Please let me know if you find any mistakes.
Thanks
from yade import pack
L_xmin = 0
L_ymin = 0
L_zmin = 0
L_xmax = 0
L_ymax = 0
L_zmax = 0
Density = 2720
Young = 80e6
Poi = 0.25
Friction = 28
O.materials.append(CohFrictMat(density=Density,young=Young,poisson = Poi ,frictionAngle= radians(Friction),momentRotationLaw=True,alphaKr=2,etaRoll=1,label='spheres'))
O.materials.append(CohFrictMat(density=Density,young=Young*100,poisson =
Poi ,frictionAngle= 0.0,label='walls'))
sphere_input_file_name = "Pack-Tri-2.txt"
infile = open(sphere_input_file_name,"r")
lines = infile.readlines()
infile.readline()
for line in lines:
data = line.split()
center = Vector3(float(data[0]),float(data[1]),float(data[2]))
radius = float(data[3])
if center[0] + radius >= L_xmax:
L_xmax = (center[0] + radius)
if (center[1] + radius ) >= L_ymax:
L_ymax = (center[1] + radius)
if center[2] + radius >= L_zmax:
L_zmax = (center[2] + radius)
if center[0] - radius <= L_xmin:
L_xmin = (center[0] - radius)
if (center[1] - radius) <= L_ymin:
L_ymin = (center[1] - radius)
if center[2] - radius <= L_zmin:
L_zmin = (center[2] - radius)
## corners of the initial packing
mn,mx=Vector3(L_xmin,L_ymin,L_zmin),Vector3(L_xmax,L_ymax,L_zmax)
print L_xmin,L_xmax,L_ymin,L_ymax,L_zmin,L_zmax
thick = 0.0001
## create walls around the packing
walls=aabbWalls([mn,mx],thickness=thick,material='walls')
wallIds=O.bodies.append(walls)
infile = open(sphere_input_file_name,"r")
lines = infile.readlines()
infile.readline()
for line in lines:
data = line.split()
center = Vector3(float(data[0]),float(data[1]),float(data[2]))
radius = float(data[3])
O.bodies.append([utils.sphere(center,radius,material='spheres')])
triax=TriaxialStressController(
stressMask = 7,
goal1=35e3,
goal2=35e3,
goal3=35e3,
max_vel=1,
internalCompaction=False,
)
newton=NewtonIntegrator(damping=0.2)
O.engines=[
ForceResetter(),
InsertionSortCollider([Bo1_Sphere_Aabb(),Bo1_Box_Aabb()]),
InteractionLoop(
[Ig2_Sphere_Sphere_ScGeom6D(),Ig2_Box_Sphere_ScGeom6D()],
[Ip2_CohFrictMat_CohFrictMat_CohFrictPhys()],
[Law2_ScGeom6D_CohFrictPhys_CohesionMoment(useIncrementalForm=True)]
),
GlobalStiffnessTimeStepper(active=1,timeStepUpdateInterval=100,timestepSafetyCoefficient=0.8, defaultDt=4*PWaveTimeStep()),
triax,
TriaxialStateRecorder(iterPeriod=100,file='WallStresses'),
newton
]
yade.qt.Controller(), yade.qt.View()
while 1:
O.run(1500, True)
unb=unbalancedForce()
#average stress
meanS=(triax.stress(triax.wall_right_id)[0]+triax.stress(triax.wall_top_id)[1]+triax.stress(triax.wall_front_id)[2])/3
print 'unbalanced force:',unb,' mean stress: ',meanS
if unb<stabilityThreshold and abs(meanS-35000)/35000<0.001:
break
O.save('compressedState.xml')
print "### Isotropic state saved ###"
triax.stressMask = 5
triax.goal2=-0.05
triax.goal1=35000
triax.goal3=35000
--
You received this question notification because you are a member of
yade-users, which is an answer contact for Yade.