Unverified Commit 8d9697db authored by Axel Kohlmeyer's avatar Axel Kohlmeyer Committed by GitHub
Browse files

Merge pull request #1420 from dsbolin/gran_mods

Updates and bugfixes to GRANULAR package
parents f0525090 98daf8f8
Loading
Loading
Loading
Loading
+11 −11
Original line number Diff line number Diff line
@@ -47,9 +47,9 @@ keyword = {wiggle} or {shear} :l
fix 1 all wall/gran hooke  200000.0 NULL 50.0 NULL 0.5 0 xplane -10.0 10.0
fix 1 all wall/gran hooke/history 200000.0 NULL 50.0 NULL 0.5 0 zplane 0.0 NULL
fix 2 all wall/gran hooke 100000.0 20000.0 50.0 30.0 0.5 1 zcylinder 15.0 wiggle z 3.0 2.0
fix 3 all wall/gran granular hooke 1000.0 50.0 tangential linear_nohistory 1.0 0.4 zplane 0.0 NULL
fix 4 all wall/gran granular jkr 1000.0 50.0 0.3 5.0 tangential mindlin 800.0 1.0 0.5 rolling sds 500.0 200.0 0.5 twisting marshall zcylinder 15.0 wiggle z 3.0 2.0
fix 5 all wall/gran granular dmt 1000.0 50.0 0.3 10.0 tangential mindlin 800.0 0.5 0.1 roll sds 500.0 200.0 0.1 twisting marshall zplane 0.0 NULL :pre
fix 3 all wall/gran/region granular hooke 1000.0 50.0 tangential linear_nohistory 1.0 0.4 damping velocity region myBox
fix 4 all wall/gran/region granular jkr 1e5 1500.0 0.3 10.0 tangential mindlin NULL 1.0 0.5 rolling sds 500.0 200.0 0.5 twisting marshall region myCone
fix 5 all wall/gran/region granular dmt 1e5 0.2 0.3 10.0 tangential mindlin NULL 1.0 0.5 rolling sds 500.0 200.0 0.5 twisting marshall damping tsuji region myCone :pre

[Description:]

+11 −11
Original line number Diff line number Diff line
@@ -31,9 +31,9 @@ region-ID = region whose boundary will act as wall :l,ule
[Examples:]

fix wall all wall/gran/region hooke/history 1000.0 200.0 200.0 100.0 0.5 1 region myCone
fix 3 all wall/gran/region granular hooke 1000.0 50.0 tangential linear_nohistory 1.0 0.4 region myBox
fix 4 all wall/gran/region granular jkr 1000.0 50.0 tangential linear_history 800.0 1.0 0.5 rolling sds 500.0 200.0 0.5 twisting marshall region myCone
fix 5 all wall/gran/region granular dmt 1000.0 50.0 0.3 10.0 tangential linear_history 800.0 0.5 0.1 roll sds 500.0 200.0 0.1 twisting marshall region myCone :pre
fix 3 all wall/gran/region granular hooke 1000.0 50.0 tangential linear_nohistory 1.0 0.4 damping velocity region myBox
fix 4 all wall/gran/region granular jkr 1e5 1500.0 0.3 10.0 tangential mindlin NULL 1.0 0.5 rolling sds 500.0 200.0 0.5 twisting marshall region myCone
fix 5 all wall/gran/region granular dmt 1e5 0.2 0.3 10.0 tangential mindlin NULL 1.0 0.5 rolling sds 500.0 200.0 0.5 twisting marshall damping tsuji region myCone :pre

[Description:]

+53 −25
Original line number Diff line number Diff line
@@ -24,22 +24,24 @@ cutoff = global cutoff (optional). See discussion below. :ul
[Examples:]

pair_style granular
pair_coeff * * hooke 1000.0 50.0 tangential linear_nohistory 1.0 0.4 :pre
pair_coeff * * hooke 1000.0 50.0 tangential linear_nohistory 1.0 0.4 damping mass_velocity :pre

pair_style granular
pair_coeff * * hertz 1000.0 50.0 tangential mindlin NULL 1.0 0.4 :pre
pair_coeff * * hooke 1000.0 50.0 tangential linear_history 500.0 1.0 0.4 damping mass_velocity :pre

pair_style granular
pair_coeff * * hertz/material 1e8 0.3 tangential mindlin_rescale NULL 1.0 0.4 damping tsuji :pre
pair_coeff * * hertz 1000.0 50.0 tangential mindlin 1000.0 1.0 0.4 :pre

pair_style granular
pair_coeff 1 1 jkr 1000.0 50.0 tangential mindlin 800.0 1.0 0.5 rolling sds 500.0 200.0 0.5 twisting marshall
pair_coeff 2 2 hertz 200.0 20.0 tangential linear_history 300.0 1.0 0.1 rolling sds 200.0 100.0 0.1 twisting marshall :pre
pair_coeff * * hertz/material 1e8 0.3 0.3 tangential mindlin_rescale NULL 1.0 0.4 damping tsuji :pre

pair_style granular
pair_coeff 1 1 hertz 1000.0 50.0 tangential mindlin 800.0 0.5 0.5 rolling sds 500.0 200.0 0.5 twisting marshall
pair_coeff 2 2 dmt 1000.0 50.0 0.3 10.0 tangential mindlin 800.0 0.5 0.1 roll sds 500.0 200.0 0.1 twisting marshall
pair_coeff 1 2 dmt 1000.0 50.0 0.3 10.0 tangential mindlin 800.0 0.5 0.1 roll sds 500.0 200.0 0.1 twisting marshall :pre
pair_coeff 1 * jkr 1000.0 500.0 0.3 10 tangential mindlin 800.0 1.0 0.5 rolling sds 500.0 200.0 0.5 twisting marshall
pair_coeff 2 2 hertz 200.0 100.0 tangential linear_history 300.0 1.0 0.1 rolling sds 200.0 100.0 0.1 twisting marshall :pre

pair_style granular
pair_coeff 1 1 dmt 1000.0 50.0 0.3 0.0 tangential mindlin NULL 0.5 0.5 rolling sds 500.0 200.0 0.5 twisting marshall
pair_coeff 2 2 dmt 1000.0 50.0 0.3 10.0 tangential mindlin NULL 0.5 0.1 rolling sds 500.0 200.0 0.1 twisting marshall :pre

[Description:]

@@ -57,18 +59,18 @@ global, but can be set to different values for different combinations
of particle types, as determined by the "pair_coeff"_pair_coeff.html
command.  If the contact model choice is the same for two particle
types, the mixing for the cross-coefficients can be carried out
automatically. This is shown in the second example, where model
automatically. This is shown in the last example, where model
choices are the same for type 1 - type 1 as for type 2 - type2
interactions, but coefficients are different. In this case, the
coefficients for type 2 - type interactions can be determined from
mixed coefficients for type 1 - type 2 interactions can be determined from
mixing rules discussed below.  For additional flexibility,
coefficients as well as model forms can vary between particle types,
as shown in the third example: type 1- type 1 interactions are based
on a Hertzian normal contact model and 2-2 interactions are based on a
DMT cohesive model (see below).  In that example, 1-1 and 2-2
interactions have different model forms, in which case mixing of
as shown in the fourth example: type 1 - type 1 interactions are based
on a Johnson-Kendall-Roberts normal contact model and 2-2 interactions
are based on a DMT cohesive model (see below).  In that example, 1-1
and 2-2 interactions have different model forms, in which case mixing of
coefficients cannot be determined, so 1-2 interactions must be
explicitly defined via the {pair_coeff 1 2} command, otherwise an
explicitly defined via the {pair_coeff 1 *} command, otherwise an
error would result.

:line
@@ -189,6 +191,7 @@ other settings, potentially also the twisting damping). The options
for the damping model currently supported are:

{velocity}
{mass_velocity}
{viscoelastic}
{tsuji} :ol

@@ -199,11 +202,23 @@ For {damping velocity}, the normal damping is simply equal to the
user-specified damping coefficient in the {normal} model:

\begin\{equation\}
\eta_n = \eta_\{n0\}\
\eta_n = \eta_\{n0\}
\end\{equation\}

Here, \(\eta_\{n0\}\) is the damping coefficient specified for the normal
contact model, in units of {mass}/{time}.

For {damping mass_velocity}, the normal damping is given by:

\begin\{equation\}
\eta_n = \eta_\{n0\} m_\{eff\}
\end\{equation\}

Here, \(\gamma_n\) is the damping coefficient specified for the normal
contact model, in units of {mass}/{time},
Here, \(\eta_\{n0\}\) is the damping coefficient specified for the normal
contact model, in units of {mass}/{time} and
\(m_\{eff\} = m_i m_j/(m_i + m_j)\) is the effective mass.
Use {damping mass_velocity} to reproduce the damping behavior of
{pair gran/hooke/*}.

The {damping viscoelastic} model is based on the viscoelastic
treatment of "(Brilliantov et al)"_#Brill1996, where the normal
@@ -213,11 +228,10 @@ damping is given by:
\eta_n = \eta_\{n0\}\ a m_\{eff\}
\end\{equation\}

Here, \(m_\{eff\} = m_i m_j/(m_i + m_j)\) is the effective mass, {a}
is the contact radius, given by \(a =\sqrt\{R\delta\}\) for all models
except {jkr}, for which it is given implicitly according to \(delta =
a^2/R - 2\sqrt\{\pi \gamma a/E\}\).  In this case, \eta_\{n0\}\ is in
units of 1/({time}*{distance}).
Here, {a} is the contact radius, given by \(a =\sqrt\{R\delta\}\)
for all models except {jkr}, for which it is given implicitly according
to \(\delta = a^2/R - 2\sqrt\{\pi \gamma a/E\}\).  For {damping viscoelastic},
\(\eta_\{n0\}\) is in units of 1/({time}*{distance}).

The {tsuji} model is based on the work of "(Tsuji et
al)"_#Tsuji1992. Here, the damping coefficient specified as part of
@@ -564,6 +578,20 @@ Finally, the twisting torque on each particle is given by:

:line

The {granular} pair style can reproduce the behavior of the
{pair gran/*} styles with the appropriate settings (some very
minor differences can be expected due to corrections in
displacement history frame-of-reference, and the application
of the torque at the center of the contact rather than
at each particle). The first example above
is equivalent to {pair gran/hooke 1000.0 NULL 50.0 50.0 0.4 1}.
The second example is equivalent to
{pair gran/hooke/history 1000.0 500.0 50.0 50.0 0.4 1}.
The third example is equivalent to
{pair gran/hertz/history 1000.0 500.0 50.0 50.0 0.4 1}.

:line

LAMMPS automatically sets pairwise cutoff values for {pair_style
granular} based on particle radii (and in the case of {jkr} pull-off
distances). In the vast majority of situations, this is adequate.
@@ -619,7 +647,7 @@ interactions is set to \(\mu_1\), and friction coefficient for type
2-type 2 interactions is set to \(\mu_2\), the friction coefficient
for type1-type2 interactions is computed as \(\sqrt\{\mu_1\mu_2\}\)
(unless explicitly specified to a different value by a {pair_coeff 1 2
...} command. The exception to this is elastic modulus, only
...} command). The exception to this is elastic modulus, only
applicable to {hertz/material}, {dmt} and {jkr} normal contact
models. In that case, the effective elastic modulus is computed as:

+98 −0
Original line number Diff line number Diff line
# pour two types of particles (cohesive and non-cohesive) into cylinder
# 'turn' cylinder by changing direction of gravity, then rotate it.
# This simulates a rotating drum powder characterization experiment.

variable	name string rotating_drum_two_types

atom_style	sphere
units		lj

###############################################
# Geometry-related parameters
###############################################

variable	boxx equal 30
variable	boxy equal 30
variable	boxz equal 50

variable	drum_rad equal ${boxx}*0.5
variable	drum_height equal 20

variable	xc equal 0.5*${boxx}
variable	yc equal 0.5*${boxx}
variable	zc equal 0.5*${boxz}

###############################################
# Particle-related parameters
###############################################
variable	rlo equal 0.25
variable	rhi equal 0.5
variable	dlo equal 2.0*${rlo}
variable	dhi equal 2.0*${rhi}

variable	cyl_rad_inner equal ${drum_rad}-1.1*${rhi}

variable	dens equal 1.0

variable skin equal 0.4*${rhi}

#############
processors * * 1
region		boxreg block 0 ${boxx} 0 ${boxy} 0 ${boxz}
create_box	2 boxreg
change_box	all boundary p p f
comm_modify	vel yes

variable	theta equal 0

region		curved_wall cylinder z ${xc} ${yc} ${drum_rad} 0 ${drum_height} side in rotate v_theta ${xc} ${yc} 0 0 0 1
region		bottom_wall plane ${xc} ${yc} 0 0 0 1 side in rotate v_theta ${xc} ${yc} 0 0 0 1

region		insreg cylinder z ${xc} ${yc} ${cyl_rad_inner} ${drum_height} ${boxz}

fix		0 all balance 100 1.0 shift xy 5 1.1
fix		1 all nve/sphere
fix		grav all gravity 10 vector 0 0 -1
fix		ins1 all pour 2000 1 1234 region insreg diam range ${dlo} ${dhi} dens ${dens} ${dens}
fix		ins2 all pour 2000 2 1234 region insreg diam range ${dlo} ${dhi} dens ${dens} ${dens}

comm_modify	vel yes

neighbor	${skin} bin
neigh_modify	delay 0 every 1 check yes

pair_style	granular 
pair_coeff	1 * hertz/material 1e5 0.2 0.3 tangential mindlin NULL 1.0 0.5 damping tsuji
pair_coeff	2 2 jkr 1e5 0.1 0.3 50 tangential mindlin NULL 1.0 0.5 rolling sds 1e3 1e3 0.1 twisting marshall damping tsuji

fix		3 all wall/gran/region granular hertz/material 1e5 0.1 0.3 tangential mindlin NULL 1.0 0.5 damping tsuji region curved_wall 
fix		4 all wall/gran/region granular hertz/material 1e5 0.1 0.3 tangential mindlin NULL 1.0 0.5 damping tsuji region bottom_wall

thermo_style	custom step atoms ke v_theta
thermo_modify	lost warn
thermo		100

timestep	0.001

#dump		1 all custom 100 ${name}.dump id type radius mass x y z 

#For removal later
compute		1 all property/atom radius
variable	zmax atom z+c_1>0.5*${drum_height}
group		delgroup dynamic all var zmax every 10000

run		2000

#Remove any particles that are above z > 0.5*drum_height
delete_atoms	group delgroup

#Add top lid
region		top_wall plane ${xc} ${yc} ${drum_height} 0 0 -1 side in rotate v_theta ${xc} ${yc} 0 0 0 1
fix		5 all wall/gran/region granular hertz/material 1e5 0.1 0.3 tangential mindlin NULL 1.0 0.5 damping tsuji region top_wall

# 'Turn' drum by switching the direction of gravity
unfix		grav
fix		grav all gravity 10 vector 0 -1 0

variable	theta equal 2*PI*elapsed/20000.0
run		3000
+67 −0
Original line number Diff line number Diff line
# pour two types of particles (cohesive and non-cohesive) on flat wall

variable   	name string pour_two_types

atom_style	sphere
units		lj

###############################################
# Geometry-related parameters
###############################################

variable	boxx equal 20
variable	boxy equal 20
variable	boxz equal 30

variable	xc1 equal 0.3*${boxx}
variable	xc2 equal 0.7*${boxx}
variable	yc equal 0.5*${boxy}

###############################################
# Particle-related parameters
###############################################
variable	rlo equal 0.25
variable	rhi equal 0.5
variable	dlo equal 2.0*${rlo}
variable	dhi equal 2.0*${rhi}

variable	dens equal 1.0

variable skin equal 0.3*${rhi}

#############
processors	* * 1
region 		boxreg block 0 ${boxx} 0 ${boxy} 0 ${boxz}
create_box	2 boxreg
change_box	all boundary p p f

comm_modify 	vel yes

region		insreg1 cylinder z ${xc1} ${yc} 5 15 ${boxz}
region		insreg2 cylinder z ${xc2} ${yc} 5 15 ${boxz}

fix		1 all nve/sphere
fix		grav all gravity 10.0 vector 0 0 -1
fix		ins1 all pour 1500 1 3123 region insreg1 diam range ${dlo} ${dhi} dens ${dens} ${dens}
fix		ins2 all pour 1500 2 3123 region insreg2 diam range ${dlo} ${dhi} dens ${dens} ${dens}

comm_modify	vel yes

neighbor	${skin} bin
neigh_modify	delay 0 every 1 check yes

pair_style	granular 
pair_coeff 	1 * jkr 1000.0 50.0 0.3 10 tangential mindlin 800.0 1.0 0.5 rolling sds 500.0 200.0 0.5 twisting marshall
pair_coeff 	2 2 hertz 200.0 20.0 tangential linear_history 300.0 1.0 0.1 rolling sds 200.0 100.0 0.1 twisting marshall 

fix		3 all wall/gran granular hertz/material 1e5 1e3 0.3 tangential mindlin NULL 1.0 0.5 zplane 0 NULL 

thermo_style	custom step cpu atoms ke
thermo_modify	lost warn
thermo		100

timestep	0.001

#dump		1 all custom 100 ${name}.dump id type radius mass x y z 

run		5000
Loading