Beruflich Dokumente
Kultur Dokumente
sphere_dict [ point_id ]
if len ( one_clist ) ==1:
free_contact . append ( one_clist
[0]) ; del contact_dict [
one_clist [0]]
else :
clist . update ({ point_id : one_clist })
return [ clist , free_particle , free_contact ,
boundary_contact ]
return angle
#^^^^^^^^^^^^^^^^^^^^^^^^ data_collection
^^^^^^^^^^^^^^^^^^^^^^^^^^
# vvvvvvvvvvvvvvvvvvvvvvvv data_analysis_processing
vvvvvvvvvvvvvvvvvvvvvvvvv
# here backwards is the way to detect all loops (
no need to take care unless you interest )
# from here onwards is the loop analysis
processing
# important note : from the outcome of function
data_processing , you can get all analysing
results
def data_processing ( source_file ) :
#
# most important three data containers input in
this sub --- sphere_dict , contact_dict ,
loop_dict
# most important output is loop_data , which
contant basic informations ( like sideNumber ,
area , loopTensor , centroidPosition , etc .) of each
loop
# loop_data ={ id_l :[ H ( loopTensor ) , s_num ( sideNumber )
, direction ( loopDirection ) , elongation (
elongationRatio ) , area , isconvex , void_ratio ,
centroid ( loopCentroid x , y ) ] , ...}
tmp = get_data ( source_file )
sphere_dict = tmp [0]
# sphere_dict ={ Np :
np , id_p :[ radius ,x ,y , z ] , ...}
contact_dict = tmp [1]
# contact_dict ={ Nc
: nc , Ncb : ncb ( contact with boundary ) , id_c :[
id_p1 , id_p2 , s or b ( spheres contact or
boundary contact ) ] ,...}
loop_dict = tmp [2]
# loop_dict ={ Nl : nl
, id_l =[ id_c0 , id_c1 , id_c2 , id_c3 , id_c0 ] , ...}
free_particle = tmp [3]
free_contact = tmp [4]
loop_data ={}
NGUYEN Nho Gia Hien
area += tmp
centroid [0]+=( point0 [0]+ point1 [0]) * tmp
centroid [1]+=( point0 [1]+ point1 [1]) * tmp
area =0.5* area
centroid [0]= centroid [0]/6.0/ area
centroid [1]= centroid [1]/6.0/ area
area = - area
F = F / area
tmp1 = linalg . eig ( F ) [0]
mesoq = abs (( tmp1 [0] - tmp1 [1]) /( tmp1 [0]+ tmp1 [1])
)
# raw_input ( str ( tmp1 [0]) + + str ( tmp1 [1]) +
+ str ( mesoq ) )
direction = getDirection ( H )
D =H -0.5*( H [0 ,0]+ H [1 ,1])
elongation = sqrt ( D [0 ,0]* D [0 ,0]+ D [0 ,1]* D [0 ,1]+ D
[1 ,0]* D [1 ,0]+ D [1 ,1]* D [1 ,1]) /( H [0 ,0]+ H
[1 ,1])
loop_data . update ({ i :[ H , s_num , direction ,
elongation , area , isconvex , void ( area ,
pointlist , sphere_dict ) , centroid , mesoq ]})
F = matrix ([[0.0 ,0.0] ,
[0.0 ,0.0]])
for i in contact_dict . keys () :
if type ( i ) is int :
if contact_dict [ i ][2]== s :
tmppoint0 = sphere_dict [ contact_dict [
i ][0]]
point0 =[ tmppoint0 [1] , tmppoint0 [2]]
tmppoint1 = sphere_dict [ contact_dict [
i ][1]]
point1 =[ tmppoint1 [1] , tmppoint1 [2]]
branch = matrix ( point1 ) - matrix ( point0
)
length = linalg . norm ( branch )
F = F + branch . T * branch / length / length
Np = sphere_dict [ Np ]; Np_free = len ( free_particle )
Nc = contact_dict [ Nc ] - contact_dict [ Ncb ]; Nc_free
NGUYEN Nho Gia Hien
10
11
12
i +1]][1]]
elif ( contact_dict [ edge_list [ i ]][1]==
contact_dict [ edge_list [ i +1]][1]) :
point_list . append ( contact_dict [
edge_list [ i ]][1])
A = sphere_dict [ contact_dict [ edge_list [
i ]][0]]
B = sphere_dict [ contact_dict [ edge_list [
i ]][1]]
C = sphere_dict [ contact_dict [ edge_list [
i +1]][0]]
else :
raw_input ( wrong : not linked edge )
S =( A [1] - C [1]) *( B [2] - C [2]) -( A [2] - C [2]) *( B
[1] - C [1])
if S >0: isconvex = False
else :
if ( contact_dict [ edge_list [ i ]][0]==
contact_dict [ edge_list [ i +1]][0]) :
point_list . append ( contact_dict [
edge_list [ i ]][0])
elif ( contact_dict [ edge_list [ i ]][0]==
contact_dict [ edge_list [ i +1]][1]) :
point_list . append ( contact_dict [
edge_list [ i ]][0])
elif ( contact_dict [ edge_list [ i ]][1]==
contact_dict [ edge_list [ i +1]][0]) :
point_list . append ( contact_dict [
edge_list [ i ]][1])
elif ( contact_dict [ edge_list [ i ]][1]==
contact_dict [ edge_list [ i +1]][1]) :
point_list . append ( contact_dict [
edge_list [ i ]][1])
else :
raw_input ( wrong : not linked edge )
return [ point_list , isconvex ]
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
NGUYEN Nho Gia Hien
13
data_analysis_processing
^^ ^^ ^^^ ^^ ^^^ ^^ ^^^ ^^ ^^^ ^^ ^^^ ^^ ^^^ ^^ ^^^ ^^ ^
14
tmp = f . readline ()
if tmp [:4]== * e22 :
status . update ({ e22 : float ( tmp . split (
) [1]) })
tmp = f . readline ()
status . update ({ q : float ( tmp . split (
) [1]) })
tmp = f . readline ()
status . update ({ ev : float ( tmp . split (
) [1]) })
tmp = f . readline ()
status . update ({ porosity : float ( tmp .
split ( ) [1]) })
f . close ()
tmp = data_processing ( i )
statistics ={1:0 ,2:0 ,3:0 , q_3 :0.0 ,
area_3 :0.0 ,4:0 , q_4 :0.0 , area_4
:0.0 ,\
5:0 , q_5 :0.0 ,
area_5
:0.0 ,6:0 , q_6
:0.0 , area_6
:0.0 ,\
7:0 , q_7 :0.0 ,
area_7
:0.0 ,8:0 , q_8
:0.0 , area_8
:0.0 ,\
9:0 , q_9 :0.0 ,
area_9
:0.0 ,10:0 ,
q_10 :0.0 ,
area_10 :0.0}
for j in tmp [1]. keys () :
try :
if tmp [1][ j ][5]== True or
include_inconvex :
NGUYEN Nho Gia Hien
15
16
17