← Back to team overview

yade-users team mailing list archive

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.