← Back to team overview

yade-users team mailing list archive

Re: [Question #229898]: Clumps for 2D simulaton

 

Question #229898 on Yade changed:
https://answers.launchpad.net/yade/+question/229898

Fu zuoguang gave more information on the question:
Dear Jan Stránský and Bruno Chareyre:
     Thanks for helping me last time, so in order to achieve "clumps in 2D simulation", I should try my best to test "particles-generation from PFC to YADE", but at the beginning of this task, I failed to import the "particles information.txt" to YADE and the question can be described as that:
(1). There is a "particles information.txt" recording the basic infomation about the particles with the format "x_y_z_r", there is nothing wrong in it.
(2). I employ these orders "O.bodies.append(ymport.text('qq.txt'))" to make a correct importing.
(3). After importing finished(all the particles can be recogized by YADE),I wanna start my 2D-simulation but fail, because all the particles disaapear at the beginning of simulation, so I can see nothing but the walls in screen. 
(4). there may be something wrong in my script, since the importing order can be sucessfully used in examples provided by YADE.
I don know where is wrong and seek your help!(all script and sphere.txt are below)

Filename='2D-simulation-vertex'
from yade import pack,os,utils,ymport

################################# preprocessing for simulation ##########################################  
### prescribing variables and functions for simulation controller ###
# material defination
spheremat = O.materials.append(FrictMat(poisson=0.5,density=2500,young=1e10,frictionAngle=0.5))
wallmat = O.materials.append(FrictMat(poisson=0.5,density=0,young=1e10,frictionAngle=0))
# walls defination
mn,mx=Vector3(0,0,0),Vector3(0.06,0.06,0.1)
wallids=O.bodies.append(utils.aabbWalls([mn,mx],thickness=.00001,material=wallmat))
# ThreeDTriaxialEngine defination for initial-state determination(the first calculation step)
triax01=TriaxialStressController(
	wall_bottom_id=wallids[2],wall_top_id=wallids[3],
	wall_left_id=wallids[0],wall_right_id=wallids[1],
	wall_back_id=wallids[4],wall_front_id=wallids[5],
	wall_front_activated = False,wall_back_activated = False,
	internalCompaction=False, 
	stressMask=7,
        goal1=30000,
        goal2=30000,
        goal3=30000,
        max_vel=5,
)
# ThreeDTriaxialEngine defination for triaxial compression(the second calculation step)
triax02=TriaxialStressController(
	wall_bottom_id=wallids[2],wall_top_id=wallids[3],
	wall_left_id=wallids[0],wall_right_id=wallids[1],
	wall_back_id=wallids[4],wall_front_id=wallids[5],
	wall_front_activated = False,wall_back_activated = False,
	internalCompaction=False, 
	stressMask = 5,
        goal2=-100,
        goal1=30000,
        goal3=30000,
)
################################# control flow for simulation ##########################################  
# particles generation
O.periodic=1
O.cell.setBox(0.06,0.06,0.06)
sp=pack.SpherePack()
O.bodies.append(ymport.text('sphere.txt'))
sp.toSimulation(material=spheremat)
# determining colors for particles in different aeras of the cell
for b in O.bodies:
    if isinstance(b.shape,Sphere):
         pos = b.state.pos
         if pos[0] <0.03 and pos[1] < 0.03: b.shape.color = (1,0,0)       # area 1
         elif pos[0] >= 0.03 and pos[1] <0.03: b.shape.color = (0,1,0)    # area 2
         elif pos[0] >= 0.03 and pos[1] >= 0.03: b.shape.color = (0,0,1)  # area 3
         elif pos[0] < 0.03 and pos[1] >= 0.03: b.shape.color = (0,10,1)  # area 4
         else: b.shape.pos = (1,1,0)        
O.periodic=0
# blockedDOFs
for b in O.bodies:
	if isinstance(b.shape,Sphere):
		 b.state.blockedDOFs='zXY'
# Simulation assembly for the first step
O.engines=[
	ForceResetter(),
	InsertionSortCollider([Bo1_Sphere_Aabb(),Bo1_Box_Aabb(),Bo1_Wall_Aabb()]),
	InteractionLoop(
		[Ig2_Sphere_Sphere_ScGeom(),Ig2_Box_Sphere_ScGeom()],
		[Ip2_FrictMat_FrictMat_FrictPhys()],
		[Law2_ScGeom_FrictPhys_CundallStrack()]
	),
	GlobalStiffnessTimeStepper(active=1,timeStepUpdateInterval=100,timestepSafetyCoefficient=0.8),
	triax01,
	NewtonIntegrator(damping=.1),
	PyRunner(command='resultfirst()',iterPeriod=1000)
]
# first step of simulation startting with a correct inheriting for the next step
O.dt=utils.PWaveTimeStep()
def resultfirst():
        f = file("/home/fzg/fu/result-first-01.dat",'w')
        wall_left = O.bodies[0].state.pos[0]
	wall_right = O.bodies[1].state.pos[0]
	wall_bottom = O.bodies[2].state.pos[1]
	wall_top = O.bodies[3].state.pos[1]
	wall_back = O.bodies[4].state.pos[2]
	wall_front = O.bodies[5].state.pos[2]
	x_dimension = wall_right - wall_left
	y_dimension = wall_top - wall_bottom
	#z_dimension = wall_front - wall_back
	area = x_dimension * y_dimension
	porosity = (area-sum(pi*b.shape.radius**2 for b in O.bodies if isinstance(b.shape,Sphere)))/area
        print porosity
#       f.write('%-16g %-16g %-16g %-16g \n'%(area,porosity,x_dimension,y_dimension)),
#       f.close()
O.run(30000,True)
O.wait()

sphere.txt:
0.019 0.001 0.05 0.0008
0.021 0.001 0.05 0.0008
0.023 0.001 0.05 0.0008
0.025 0.001 0.05 0.0008
0.027 0.001 0.05 0.0008
0.029 0.001 0.05 0.0008
0.031 0.001 0.05 0.0008
0.033 0.001 0.05 0.0008
0.035 0.001 0.05 0.0008
0.037 0.001 0.05 0.0008
0.039 0.001 0.05 0.0008
0.041 0.001 0.05 0.0008
0.043 0.001 0.05 0.0008
0.045 0.001 0.05 0.0008
0.047 0.001 0.05 0.0008
0.049 0.001 0.05 0.0008
0.051 0.001 0.05 0.0008
0.053 0.001 0.05 0.0008
0.055 0.001 0.05 0.0008
0.057 0.001 0.05 0.0008
0.059 0.001 0.05 0.0008
0.001 0.003 0.05 0.0008
0.003 0.003 0.05 0.0008
0.005 0.003 0.05 0.0008

-- 
You received this question notification because you are a member of
yade-users, which is an answer contact for Yade.