Data Files for “Adhesive Rolling Resistance Linear Contact Model: Repose Angle” Problem

PFC2D Data Files

make_system.p2dat

 ; ===========================================================================
 ;  fname: make_system.p2dat
 ; ===========================================================================
model new
model title 'Adhesive Rolling Resistance Linear Contact Model: Repose Angle'
model random 10001

 ;  container and balls attributes
[cyl_rad    =   50.0e-3]  ; container half-width [m]
[cyl_height =  100.0e-3]  ; container height     [m]
[ravg       =   1.5e-3 ]  ; ball average radius  [m]
[rdev       =   0.5    ]  ; ball relative radius deviation [-]
[dens       =   2.0e3  ]  ; ball density  [kg/m3]
[poros      =   0.3    ]  ; initial porosity [-]

 ;  contact model properties
[emod   = 1.0e6]  ; Young's modulus (deformability method) [Pa]
[kratio = 2.0  ]  ; stiffness ratio (deformability method) [-]
[fric   = 0.01 ]  ; friction coefficient                   [-]
[dpnr   = 0.2  ]  ; normal critical damping ratio          [-]
[dpsr   = 0.2  ]  ; shear critical damping ratio           [-]
[dpm    = 3    ]  ; dashpot mode                           [-]
[rfric  = 0.0  ]  ; rolling resistance coefficient         [-]
[F0     = 0.0  ]  ; maximum attractive force               [N]
[D0     = 0.0  ]  ; attraction range                       [m]

 ;  Set domain extent and boundary conditions.
model domain extent [-4.0*cyl_rad] [4.0*cyl_rad] ... 
 [-4.0*ravg] [2.0*cyl_height] ... 
 condition destroy

 ;  Set the CMAT such that the arrlinear model acts at ball-ball contacts, and
 ;  the rrlinear model acts at ball-facet contacts. The particles will not
 ;  stick to the walls.
contact cmat default type ball-ball model arrlinear ... 
 method deformability ... 
 emod @emod ... 
 kratio @kratio ... 
 property fric @fric ... 
 dp_nratio @dpnr ... 
 dp_sratio @dpsr ... 
 dp_mode @dpm ... 
 rr_fric @rfric ... 
 adh_F0 @F0 ... 
 adh_D0 @D0
 
contact cmat default type ball-facet model rrlinear ... 
 method deformability ... 
 emod @emod ... 
 kratio @kratio ... 
 property fric @fric ... 
 dp_nratio @dpnr ... 
 dp_sratio @dpsr ... 
 dp_mode @dpm ... 
 rr_fric @rfric

 ;  Generate the base plane and the container.
wall generate id 1 ... 
 name 'base_plane' ... 
 plane

wall create id 100 ... 
 name 'container' ... 
 vertices [-1.0*cyl_rad] 0.0 [-1.0*cyl_rad] @cyl_height ... 
 [-1.0*cyl_rad] @cyl_height [1.0*cyl_rad] @cyl_height ... 
 [1.0*cyl_rad] @cyl_height [1.0*cyl_rad] 0.0

 ;  Distribute balls inside the container.
ball distribute porosity @poros ... 
 resolution @ravg ... 
 radius [1.0-0.5*rdev] [1.0+0.5*rdev] ... 
 box [-1.0*cyl_rad] [1.0*cyl_rad] ... 
 0.0 @cyl_height

 ;  Bring to rest under gravity loading.
ball attribute density @dens damp 0.7
model cycle 1000 calm 10
model gravity 9.81
model solve ratio-average 1e-5
ball attribute damp 0.0
model save 'init.p2sav'
program return
 ; ===========================================================================
 ;  eof: make_system.p2dat

move_container.p2dat

 ; ===========================================================================
 ;  fname: move_container.p2dat

 ;  input: fric, rfric, F0, D0
 ; ===========================================================================
[cyl_vel = 5.0e-2]  ; upwards velocity [m/s] 
model mechanical time-total 0.0

 ;  *** Modify Material Properties
 ;  Modify properties of existing ball-ball and ball-facet contacts.
contact property fric @fric rr_fric @rfric adh_f0 @F0 adh_d0 @D0 ... 
 range contact type 'ball-ball'
contact property fric @fric rr_fric @rfric ... 
 range contact type 'ball-facet'
 ;  Modify properties of future ball-ball contacts.
contact cmat default type ball-ball model arrlinear ... 
 method deformability ... 
 emod @emod ... 
 kratio @kratio ... 
 property fric @fric ... 
 dp_nratio @dpnr ... 
 dp_sratio @dpsr ... 
 dp_mode @dpm ... 
 rr_fric @rfric ... 
 adh_f0 @F0 ... 
 adh_d0 @D0
 ;  Modify properties of future ball-facet contacts.
contact cmat default type ball-facet ... 
 property fric @fric rr_fric @rfric
 ;  Proximity has changed automatically from change to a_d0.
 ;  Force creation of new contacts via remapping of cell space.
model clean

wall attribute velocity-y @cyl_vel range id 100 by wall
ball attribute displacement multiply 0.0
model solve time [0.75*cyl_height/cyl_vel]
wall attribute velocity-y 0.0 range id 100 by wall
model solve ratio-average 1e-5
model save ...
 [string.build('final-fric_%1_rfric_%2_F0_%3_D0_%4.p2sav',fric,rfric,F0,D0)]
program return
 ; ===========================================================================
 ;  eof: move_container.p2dat

do_analysis.py

#=============================================================================
# do_analysis.py
#=============================================================================
import itasca
itasca.command("python-reset-state off")

fric_list  = [0.5]
rfric_list = [0.1]
# F0_list is {0, 1, 5} times weight of single particle [N]
# D0_list is 100% of avg. particle radius [m]
F0_list = [0.0,0.14,0.7]
D0_list = [1.5e-3]

for f in fric_list:
  for rf in rfric_list:
    for myF0 in F0_list:
      for myD0 in D0_list:
        itasca.command("""
                         model restore \'init\'
                         [fric  = {0}]
                         [rfric = {1}]
                         [F0    = {2}]
                         [D0    = {3}]
                         program call \'move_container.p2dat\'
                       """.format(f,rf,myF0,myD0)
        )

#=============================================================================
# eof: do_analysis.py

zero_F0.p2dat

;=============================================================================
; fname: zero_F0.p2dat
;
;=============================================================================
; Zero F0 at existing and future contacts, solve.
model restore 'final-fric_0.5_rfric_0.1_F0_0.7_D0_0.0015.p2sav'

contact property adh_f0 0.0
contact cmat default type ball-ball ...
             property adh_f0 0.0
model cycle 10
model solve ratio-average 1e-5
model save 'zero_F0.p2sav'
return
;=============================================================================
; eof: zero_F0.p2dat

PFC3D Data Files

make_system.p3dat

; ============================================================================
;  fname: make_system.p3dat
; ============================================================================

model new
model title 'Adhesive Rolling Resistance Linear Contact Model: Repose Angle'
model random 10001

;  container and balls attributes
[cyl_rad    =   50.0e-3]  ; container radius    [m]
[cyl_height =  100.0e-3]  ; container height    [m]
[ravg       =   3.0e-3 ]  ; ball average radius [m]
[rdev       =   0.25   ]  ; ball relative radius deviation [-]
[dens       =   2.0e3  ]  ; ball density  [kg/m3]
[poros      =   0.45   ]  ; initial porosity [-]

;  contact model properties
[emod   = 1.0e6]  ; Young's modulus (deformability method) [Pa]
[kratio = 2.0  ]  ; stiffness ratio (deformability method) [-]
[fric   = 0.05 ]  ; friction coefficient                   [-]
[dpnr   = 0.2  ]  ; normal critical damping ratio          [-]
[dpsr   = 0.2  ]  ; shear critical damping ratio           [-]
[dpm    = 3    ]  ; dashpot mode                           [-]
[rfric  = 0.0  ]  ; rolling resistance coefficient         [-]
[F0     = 0.0  ]  ; maximum attractive force               [N]
[D0     = 0.0  ]  ; attraction range                       [m]

;  Set domain extent and boundary conditions.
model domain extent [-4.0*cyl_rad] [4.0*cyl_rad] ... 
 [-4.0*cyl_rad] [4.0*cyl_rad] ... 
 [-4.0*ravg] [2.0*cyl_height] ... 
 condition destroy

;  Set the CMAT such that the arrlinear model acts at ball-ball contacts, and
;  the rrlinear model acts at ball-facet contacts. The particles will not
;  stick to the walls.
contact cmat default type ball-ball model arrlinear ... 
 method deformability ... 
 emod @emod ... 
 kratio @kratio ... 
 property fric @fric ... 
 dp_nratio @dpnr ... 
 dp_sratio @dpsr ... 
 dp_mode @dpm ... 
 rr_fric @rfric ... 
 adh_f0 @F0 ... 
 adh_d0 @D0
contact cmat default type ball-facet model rrlinear ... 
 method deformability ... 
 emod @emod ... 
 kratio @kratio ... 
 property fric @fric ... 
 dp_nratio @dpnr ... 
 dp_sratio @dpsr ... 
 dp_mode @dpm ... 
 rr_fric @rfric

;  Generate the base plane and the container.
wall generate id 1 ... 
 name 'base_plane' ... 
 plane

wall generate id 100 ... 
 name 'container' ... 
 cylinder ... 
 base 0.0 0.0 0.0 ... 
 axis 0.0 0.0 0.1 ... 
 height @cyl_height ... 
 radius @cyl_rad ... 
 cap false true ... 
 one-wall

;  Distribute balls inside the container.
ball distribute porosity @poros ... 
 resolution @ravg ... 
 radius [1.0-0.5*rdev] [1.0+0.5*rdev] ... 
 box [-1.0*cyl_rad] [1.0*cyl_rad] ... 
 [-1.0*cyl_rad] [1.0*cyl_rad] ... 
 0.0 @cyl_height ... 
 range cylinder end-1 0.0 0.0 0.0 ... 
 end-2 0.0 0.0 @cyl_height ... 
 radius @cyl_rad ... 
 extent

 ;  Bring to rest under gravity loading.
ball attribute density @dens damp 0.7
model cycle 1000 calm 10
model gravity 9.81
model solve ratio-average 1e-5
ball attribute damp 0.0
model save 'init.p3sav'
program return
; ============================================================================
;  eof: make_system.p3dat

move_container.p3dat

; ============================================================================
;  fname: move_container.p3dat

;  input: fric, rfric, F0, D0
; ============================================================================
[cyl_vel = 5.0e-2]
model mechanical time-total 0.0

;  *** Modify Material Properties.
;  Modify properties of existing ball-ball and ball-facet contacts.
contact property fric @fric rr_fric @rfric adh_f0 @F0 adh_d0 @D0 ... 
 range contact type 'ball-ball'
contact property fric @fric rr_fric @rfric ... 
 range contact type 'ball-facet'
 ;  Modify properties of future ball-ball contacts.
contact cmat default type ball-ball model arrlinear ... 
 method deformability ... 
 emod @emod ... 
 kratio @kratio ... 
 property fric @fric ... 
 dp_nratio @dpnr ... 
 dp_sratio @dpsr ... 
 dp_mode @dpm ... 
 rr_fric @rfric ... 
 adh_f0 @F0 ... 
 adh_d0 @D0
;  Modify properties of future ball-facet contacts.
contact cmat default type ball-facet ... 
 property fric @fric rr_fric @rfric
;  Proximity has changed automatically from change to a_d0.
;  Force creation of new contacts via remapping of cell space.
model clean

wall attribute velocity-z @cyl_vel range id 100 by wall
ball attribute displacement multiply 0.0
model solve time [0.75*cyl_height/cyl_vel]
wall attribute velocity-z 0.0 range id 100 by wall
model solve ratio-average 1e-5
model save ...
 [string.build('final-fric_%1_rfric_%2_F0_%3_D0_%4.p3sav',fric,rfric,F0,D0)]
program return
 ; ===========================================================================
 ;  eof: move_container.p3dat

do_analysis.py

#=============================================================================
# do_analysis.py
#=============================================================================
import itasca
itasca.command("python-reset-state off")
fric_list  = [0.5]
rfric_list = [0.1]
# F0 is {0, 1, 5} times weight of single particle [N]
# D0 is 5% of avg. particle radius [m]
F0_list = [0.0, 2.2e-3, 1.1e-2]
D0_list = [1.5e-4]

for f in fric_list:
  for rf in rfric_list:
    for myF0 in F0_list:
      for myD0 in D0_list:
        itasca.command("""
                         model restore 'init'
                         [fric  = {0}]
                         [rfric = {1}]
                         [F0    = {2}]
                         [D0    = {3}]
                         program call 'move_container.p3dat'
                       """.format(f,rf,myF0,myD0)
        )

#=============================================================================
# eof: do_analysis.py

zero_F0.p3dat

 ; ===========================================================================
 ;  fname: zero_F0.p3dat

 ; ===========================================================================
 ;  Zero F0 at existing and future contacts, solve.
model restore 'final-fric_0.5_rfric_0.1_F0_0.011_D0_0.00015.p3sav'

contact property adh_f0 0.0
contact cmat default type ball-ball ... 
           property adh_f0 0.0
model cycle 10
model solve ratio-average 1e-5
model save 'zero_F0.p3sav'
program return
 ; ===========================================================================
 ;  eof: zero_F0.p3dat