← Back to team overview

yade-users team mailing list archive

Re: [Question #248315]: some questions about radius expansion in Yade

 

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

    Status: Answered => Open

Fu zuoguang is still having a problem:
Dear Prof. Chareyre and all users:
Thanks for helping last time and your suggestion helped me a lot to understand the REFD method used in Yade. 
In [Tong2012], the whole processes of REFD method working are composed of these three steps:
(1). A loose cloud of nonoverlapping spheres is generated in a cubic box in random positions with a certain PSD.
(2). A steady growth of the particles is carried out to progressively fill the whole volume of the box and the porosity of the sample may decrease step by step until the change of the microstructure is limited. The porosity obtained at the end is typically higher than the target value.
(3). The friction of contact is decreased progressively. This decrease triggers reorganizations of the contact network and compaction of the packing, while the stress is kept constant by further increasing the sizes. This lubrication process is continued until the porosity reaches the value of porosity that was measured in the experiments.
I have just only finished step(1) and (2) last time and step(3) should be appended to make up the whole process. Fortunately, the python codes of step(3) are all in the ‘script-session1.py’ , which can be expressed as follows:

###############################################################################
while triax.porosity>targetPorosity:
	compFricDegree = 0.95*compFricDegree
	setContactFriction(radians(compFricDegree))
	O.run(100,1)
###############################################################################
So I can use these codes after my ‘consolidation engine’ running. But I find some different things in porosity output. My questions today are just about that.

In Yade, the porosity of the sample can be calculated as follows: 
Porosity = 1-(V(spheres)/V(total sample)).
This algorithm guided me to write my own python codes for computing it in the process of consolidation, which can be expressed as:

###############################################################################
Porosity_in_consolidation():
# define the total volume of sample
    left_wall_posi = O.bodies[0].state.pos[0]        # pos[0]--x direction
    right_wall_posi = O.bodies[1].state.pos[0]
    bottom_wall_posi = O.bodies[2].state.pos[1]      # pos[1]--y direction
    top_wall_posi = O.bodies[3].state.pos[1]
    back_wall_posi = O.bodies[4].state.pos[2]        # pos[2]--z direction
    front_wall_posi = O.bodies[5].state.pos[2]
    x_length = abs(right_wall_posi - left_wall_posi)
    y_length = abs(top_wall_posi - bottom_wall_posi)
    z_length = abs(front_wall_posi - back_wall_posi)
    sample_volume = x_length * y_length * z_length
# define the sum of spheres volume
    for b in O.bodies:
	 if isinstance(b.shape,Sphere):
	    rad = b.shape.radius
	    single_particles_volume = (4/3) * (math.pi) * (rad**3)
	    sum_particles_volume.append(single_particles_volume)	   
    total_particles_volume = sum(sum_particles_volume)    
    porosity = 1 - (total_particles_volume/sample_volume)
###############################################################################
These codes can run at each ‘determined steps’ in the process of simulation and can be replaced by the class of ‘triax.porosity’ fully I think but I could see that the results from these two ways are just different. I should take one easy simulation example as the description.

There are just only two things in this example, one is a particle (radii
= 0.0985397727275), and a box(1.0/1.0*1.0), of which the volume is 1.0.
I run 1000 steps in this simulation and output the value of porosity at
each ‘200steps’ by these two ways. The results are as follows:

Iter      radius               single particle volnme    sample volume   porosity     triax.porosity       
0        0.0985397727273   0.00300596930496          1.000003        0.996994    1.0            
200    0.121439621713    0.00562640628897          1.000003        0.994374     0.992718754166 
400    0.148179416869    0.01022147373             1.000003        0.989779       0.986772184731 
600    0.180807048589    0.0185693175797           1.000003        0.981431     0.975969071672 
800    0.22061895984     0.0337348179416           1.000003        0.966265      0.956343091843 
1000   0.266531740021    0.0594835221757           1.000003        0.940517    0.920688639082 

I can not understand the reason of these differences, maybe there are
some other details in the aglorithms of porosity calculation. If there
are something wrong in my comprehension of porosity, plesae tell me
that.

Seeking your help!

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