new fix wall/gran/region command, REBO bug fix, new example log files
This commit is contained in:
BIN
doc/src/JPG/gran_funnel.png
Normal file
BIN
doc/src/JPG/gran_funnel.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 117 KiB |
BIN
doc/src/JPG/gran_funnel_small.jpg
Normal file
BIN
doc/src/JPG/gran_funnel_small.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.2 KiB |
BIN
doc/src/JPG/gran_mixer.png
Normal file
BIN
doc/src/JPG/gran_mixer.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 224 KiB |
BIN
doc/src/JPG/gran_mixer_small.jpg
Normal file
BIN
doc/src/JPG/gran_mixer_small.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 3.0 KiB |
@ -1,7 +1,7 @@
|
|||||||
<!-- HTML_ONLY -->
|
<!-- HTML_ONLY -->
|
||||||
<HEAD>
|
<HEAD>
|
||||||
<TITLE>LAMMPS Users Manual</TITLE>
|
<TITLE>LAMMPS Users Manual</TITLE>
|
||||||
<META NAME="docnumber" CONTENT="5 Oct 2016 version">
|
<META NAME="docnumber" CONTENT="6 Oct 2016 version">
|
||||||
<META NAME="author" CONTENT="http://lammps.sandia.gov - Sandia National Laboratories">
|
<META NAME="author" CONTENT="http://lammps.sandia.gov - Sandia National Laboratories">
|
||||||
<META NAME="copyright" CONTENT="Copyright (2003) Sandia Corporation. This software and manual is distributed under the GNU General Public License.">
|
<META NAME="copyright" CONTENT="Copyright (2003) Sandia Corporation. This software and manual is distributed under the GNU General Public License.">
|
||||||
</HEAD>
|
</HEAD>
|
||||||
@ -21,7 +21,7 @@
|
|||||||
<H1></H1>
|
<H1></H1>
|
||||||
|
|
||||||
LAMMPS Documentation :c,h3
|
LAMMPS Documentation :c,h3
|
||||||
5 Oct 2016 version :c,h4
|
6 Oct 2016 version :c,h4
|
||||||
|
|
||||||
Version info: :h4
|
Version info: :h4
|
||||||
|
|
||||||
|
|||||||
@ -599,6 +599,7 @@ USER-INTEL, k = KOKKOS, o = USER-OMP, t = OPT.
|
|||||||
"viscous"_fix_viscous.html,
|
"viscous"_fix_viscous.html,
|
||||||
"wall/colloid"_fix_wall.html,
|
"wall/colloid"_fix_wall.html,
|
||||||
"wall/gran"_fix_wall_gran.html,
|
"wall/gran"_fix_wall_gran.html,
|
||||||
|
"wall/gran/region"_fix_wall_gran_region.html,
|
||||||
"wall/harmonic"_fix_wall.html,
|
"wall/harmonic"_fix_wall.html,
|
||||||
"wall/lj1043"_fix_wall.html,
|
"wall/lj1043"_fix_wall.html,
|
||||||
"wall/lj126"_fix_wall.html,
|
"wall/lj126"_fix_wall.html,
|
||||||
|
|||||||
@ -163,6 +163,8 @@ Any dimension (xyz) that has a granular wall must be non-periodic.
|
|||||||
|
|
||||||
[Related commands:]
|
[Related commands:]
|
||||||
|
|
||||||
"fix move"_fix_move.html, "pair_style granular"_pair_gran.html
|
"fix move"_fix_move.html,
|
||||||
|
"fix wall/gran/region"_fix_wall_gran_region.html,
|
||||||
|
"pair_style granular"_pair_gran.html
|
||||||
|
|
||||||
[Default:] none
|
[Default:] none
|
||||||
|
|||||||
199
doc/src/fix_wall_gran_region.txt
Normal file
199
doc/src/fix_wall_gran_region.txt
Normal file
@ -0,0 +1,199 @@
|
|||||||
|
"LAMMPS WWW Site"_lws - "LAMMPS Documentation"_ld - "LAMMPS Commands"_lc :c
|
||||||
|
|
||||||
|
:link(lws,http://lammps.sandia.gov)
|
||||||
|
:link(ld,Manual.html)
|
||||||
|
:link(lc,Section_commands.html#comm)
|
||||||
|
|
||||||
|
:line
|
||||||
|
|
||||||
|
fix wall/gran/region command :h3
|
||||||
|
|
||||||
|
[Syntax:]
|
||||||
|
|
||||||
|
fix ID group-ID wall/gran/region fstyle Kn Kt gamma_n gamma_t xmu dampflag wallstyle regionID :pre
|
||||||
|
|
||||||
|
ID, group-ID are documented in "fix"_fix.html command :ulb,l
|
||||||
|
wall/region = style name of this fix command :l
|
||||||
|
fstyle = style of force interactions between particles and wall :l
|
||||||
|
possible choices: hooke, hooke/history, hertz/history :pre
|
||||||
|
Kn = elastic constant for normal particle repulsion (force/distance units or pressure units - see discussion below) :l
|
||||||
|
Kt = elastic constant for tangential contact (force/distance units or pressure units - see discussion below) :l
|
||||||
|
gamma_n = damping coefficient for collisions in normal direction (1/time units or 1/time-distance units - see discussion below) :l
|
||||||
|
gamma_t = damping coefficient for collisions in tangential direction (1/time units or 1/time-distance units - see discussion below) :l
|
||||||
|
xmu = static yield criterion (unitless value between 0.0 and 1.0e4) :l
|
||||||
|
dampflag = 0 or 1 if tangential damping force is excluded or included :l
|
||||||
|
wallstyle = region (see "fix wall/gran"_fix_wall_gran.html for options for other kinds of walls) :l
|
||||||
|
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 :pre
|
||||||
|
|
||||||
|
[Description:]
|
||||||
|
|
||||||
|
Treat the surface of the geometric region defined by the {region-ID}
|
||||||
|
as a bounding frictional wall which interacts with nearby finite-size
|
||||||
|
granular particles when they are close enough to touch the wall. See
|
||||||
|
the "fix wall/region"_fix_wall_region.html and "fix
|
||||||
|
wall/gran"_fix_wall_gran.html commands for related kinds of walls for
|
||||||
|
non-granular particles and simpler wall geometries, respectively.
|
||||||
|
|
||||||
|
Here are snapshots of example models using this command.
|
||||||
|
Corresponding input scripts can be found in examples/granregion.
|
||||||
|
Click on the images to see a bigger picture. Movies of these
|
||||||
|
simulations are "here on the Movies
|
||||||
|
page"_http://lammps.sandia.gov/movies.html#granregion.html of the
|
||||||
|
LAMMPS web site.
|
||||||
|
|
||||||
|
:image(JPG/gran_funnel_small.jpg,JPG/gran_funnel.png)
|
||||||
|
:image(JPG/gran_mixer_small.jpg,JPG/gran_mixer.png)
|
||||||
|
|
||||||
|
:line
|
||||||
|
|
||||||
|
The distance between a particle and the region boundary is the
|
||||||
|
distance to the nearest point on the region surface. The force the
|
||||||
|
wall exerts on the particle is along the direction between that point
|
||||||
|
and the particle center, which is the direction normal to the surface
|
||||||
|
at that point. Note that if the region surface is comprised of
|
||||||
|
multiple "faces", then each face can exert a force on the particle if
|
||||||
|
it is close enough. E.g. for "region_style block"_region.html, a
|
||||||
|
particle in the interior, near a corner of the block, could feel wall
|
||||||
|
forces from 1, 2, or 3 faces of the block.
|
||||||
|
|
||||||
|
Regions are defined using the "region"_region.html command. Note that
|
||||||
|
the region volume can be interior or exterior to the bounding surface,
|
||||||
|
which will determine in which direction the surface interacts with
|
||||||
|
particles, i.e. the direction of the surface normal. The exception to
|
||||||
|
this is if one or more {open} options are specified for the region
|
||||||
|
command, in which case particles interact with both the interior and
|
||||||
|
exterior surfaces of regions.
|
||||||
|
|
||||||
|
Regions can either be primitive shapes (block, sphere, cylinder, etc)
|
||||||
|
or combinations of primitive shapes specified via the {union} or
|
||||||
|
{intersect} region styles. These latter styles can be used to
|
||||||
|
construct particle containers with complex shapes. Regions can also
|
||||||
|
move dynamically via the "region"_region.html command keywords (move)
|
||||||
|
and {rotate}, or change their shape by use of variables as inputs to
|
||||||
|
the "region"_region.html command. If such a region is used with this
|
||||||
|
fix, then the region surface will move in time in the corresponding
|
||||||
|
manner.
|
||||||
|
|
||||||
|
NOTE: As discussed on the "region"_region.html command doc page,
|
||||||
|
regions in LAMMPS do not get wrapped across periodic boundaries. It
|
||||||
|
is up to you to ensure that the region location with respect to
|
||||||
|
periodic or non-periodic boundaries is specified appropriately via the
|
||||||
|
"region"_region.html and "boundary"_boundary.html commands when using
|
||||||
|
a region as a wall that bounds particle motion.
|
||||||
|
|
||||||
|
NOTE: For primitive regions with sharp corners and/or edges (e.g. a
|
||||||
|
block or cylinder), wall/particle forces are computed accurately for
|
||||||
|
both interior and exterior regions. For {union} and {intersect}
|
||||||
|
regions, additional sharp corners and edges may be present due to the
|
||||||
|
intersection of the surfaces of 2 or more primitive volumes. These
|
||||||
|
corners and edges can be of two types: concave or convex. Concave
|
||||||
|
points/edges are like the corners of a cube as seen by particles in
|
||||||
|
the interior of a cube. Wall/particle forces around these features
|
||||||
|
are computed correctly. Convex points/edges are like the corners of a
|
||||||
|
cube as seen by particles exterior to the cube, i.e. the points jut
|
||||||
|
into the volume where particles are present. LAMMPS does NOT compute
|
||||||
|
the location of these convex points directly, and hence wall/particle
|
||||||
|
forces in the cutoff volume around these points suffer from
|
||||||
|
inaccuracies. The basic problem is that the outward normal of the
|
||||||
|
surface is not continuous at these points. This can cause particles
|
||||||
|
to feel no force (they don't "see" the wall) when in one location,
|
||||||
|
then move a distance epsilon, and suddenly feel a large force because
|
||||||
|
they now "see" the wall. In a worst-case scenario, this can blow
|
||||||
|
particles out of the simulation box. Thus, as a general rule you
|
||||||
|
should not use the fix wall/gran/region command with {union} or
|
||||||
|
{interesect} regions that have convex points or edges resulting from
|
||||||
|
the union/intersection (convex points/edges in the union/intersection
|
||||||
|
due to a single sub-region are still OK).
|
||||||
|
|
||||||
|
NOTE: Similarly, you should not define {union} or {intersert} regions
|
||||||
|
for use with this command that share an overlapping common face that
|
||||||
|
is part of the overall outer boundary (interior boundary is OK), even
|
||||||
|
if the face is smooth. E.g. two regions of style block in a {union}
|
||||||
|
region, where the two blocks overlap on one or more of their faces.
|
||||||
|
This is because LAMMPS discards points that are part of multiple
|
||||||
|
sub-regions when calculating wall/particle interactions, to avoid
|
||||||
|
double-counting the interaction. Having two coincident faces could
|
||||||
|
cause the face to become invisible to the particles. The solution is
|
||||||
|
to make the two faces differ by epsilon in their position.
|
||||||
|
|
||||||
|
The nature of the wall/particle interactions are determined by the
|
||||||
|
{fstyle} setting. It can be any of the styles defined by the
|
||||||
|
"pair_style granular"_pair_gran.html commands. Currently this is
|
||||||
|
{hooke}, {hooke/history}, or {hertz/history}. The equation for the
|
||||||
|
force between the wall and particles touching it is the same as the
|
||||||
|
corresponding equation on the "pair_style granular"_pair_gran.html doc
|
||||||
|
page, but the effective radius is calculated using the radius of the
|
||||||
|
particle and the radius of curvature of the wall at the contact point.
|
||||||
|
|
||||||
|
Specifically, delta = radius - r = overlap of particle with wall,
|
||||||
|
m_eff = mass of particle, and RiRj/Ri+Rj is the effective radius, with
|
||||||
|
Rj replaced by the radius of curvature of the wall at the contact
|
||||||
|
point. The radius of curvature can be negative for a concave wall
|
||||||
|
section, e.g. the interior of cylinder. For a flat wall, delta =
|
||||||
|
radius - r = overlap of particle with wall, m_eff = mass of particle,
|
||||||
|
and the effective radius of contact is just the radius of the
|
||||||
|
particle.
|
||||||
|
|
||||||
|
The parameters {Kn}, {Kt}, {gamma_n}, {gamma_t}, {xmu} and {dampflag}
|
||||||
|
have the same meaning and units as those specified with the
|
||||||
|
"pair_style granular"_pair_gran.html commands. This means a NULL can
|
||||||
|
be used for either {Kt} or {gamma_t} as described on that page. If a
|
||||||
|
NULL is used for {Kt}, then a default value is used where {Kt} = 2/7
|
||||||
|
{Kn}. If a NULL is used for {gamma_t}, then a default value is used
|
||||||
|
where {gamma_t} = 1/2 {gamma_n}.
|
||||||
|
|
||||||
|
Note that you can choose a different force styles and/or different
|
||||||
|
values for the 6 wall/particle coefficients than for particle/particle
|
||||||
|
interactions. E.g. if you wish to model the wall as a different
|
||||||
|
material.
|
||||||
|
|
||||||
|
[Restart, fix_modify, output, run start/stop, minimize info:]
|
||||||
|
|
||||||
|
Similiar to "fix wall/gran"_fix_wall_gran.html command, this fix
|
||||||
|
writes the shear friction state of atoms interacting with the wall to
|
||||||
|
"binary restart files"_restart.html, so that a simulation can continue
|
||||||
|
correctly if granular potentials with shear "history" effects are
|
||||||
|
being used. This fix also includes info about a moving region in the
|
||||||
|
restart file. See the "read_restart"_read_restart.html command for
|
||||||
|
info on how to re-specify a fix in an input script that reads a
|
||||||
|
restart file, so that the operation of the fix continues in an
|
||||||
|
uninterrupted fashion.
|
||||||
|
|
||||||
|
Note that info about region definitions is NOT included in restart
|
||||||
|
files. So you must re-define your region and if it is a moving
|
||||||
|
region, define its motion attributes in a way that is consistent with
|
||||||
|
the simulation that wrote the restart file. In particular, if you
|
||||||
|
want to change its motion attributes (e.g. its velocity), then you
|
||||||
|
should insure the postition/orientation of the region at the initial
|
||||||
|
restart timestep is the same as it was on the timestep the restart
|
||||||
|
file was written. If this is not possible, then you may need to
|
||||||
|
ignore info in the restart file by defining a new fix wall/gran/region
|
||||||
|
command in your restart script (e.g. with a different fix ID).
|
||||||
|
|
||||||
|
None of the "fix_modify"_fix_modify.html options are relevant to this
|
||||||
|
fix. No global or per-atom quantities are stored by this fix for
|
||||||
|
access by various "output commands"_Section_howto.html#howto_15. No
|
||||||
|
parameter of this fix can be used with the {start/stop} keywords of
|
||||||
|
the "run"_run.html command. This fix is not invoked during "energy
|
||||||
|
minimization"_minimize.html.
|
||||||
|
|
||||||
|
[Restrictions:]
|
||||||
|
|
||||||
|
This fix is part of the GRANULAR package. It is only enabled if
|
||||||
|
LAMMPS was built with that package. See the "Making
|
||||||
|
LAMMPS"_Section_start.html#start_3 section for more info.
|
||||||
|
|
||||||
|
[Related commands:]
|
||||||
|
|
||||||
|
"fix_move"_fix_move.html,
|
||||||
|
"fix wall/gran"_fix_wall_gran.html,
|
||||||
|
"fix wall/region"_fix_wall_region.html,
|
||||||
|
"pair_style granular"_pair_gran.html,
|
||||||
|
"region"_region.html
|
||||||
|
|
||||||
|
[Default:] none
|
||||||
|
|
||||||
@ -74,6 +74,7 @@ eim: NaCl using the EIM potential
|
|||||||
ellipse: ellipsoidal particles in spherical solvent, 2d system
|
ellipse: ellipsoidal particles in spherical solvent, 2d system
|
||||||
flow: Couette and Poiseuille flow in a 2d channel
|
flow: Couette and Poiseuille flow in a 2d channel
|
||||||
friction: frictional contact of spherical asperities between 2d surfaces
|
friction: frictional contact of spherical asperities between 2d surfaces
|
||||||
|
granregion: use of fix wall/region/gran as boundary on granular particles
|
||||||
hugoniostat: Hugoniostat shock dynamics
|
hugoniostat: Hugoniostat shock dynamics
|
||||||
indent: spherical indenter into a 2d solid
|
indent: spherical indenter into a 2d solid
|
||||||
kim: use of potentials in Knowledge Base for Interatomic Models (KIM)
|
kim: use of potentials in Knowledge Base for Interatomic Models (KIM)
|
||||||
|
|||||||
66
examples/granregion/in.granregion.box
Normal file
66
examples/granregion/in.granregion.box
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
# pouring spheres into container box
|
||||||
|
|
||||||
|
units lj
|
||||||
|
atom_style sphere
|
||||||
|
boundary f f f
|
||||||
|
dimension 3
|
||||||
|
comm_modify vel yes
|
||||||
|
|
||||||
|
region box block -10 10 -10 10 -10 10 units box
|
||||||
|
create_box 2 box
|
||||||
|
|
||||||
|
pair_style hybrid gran/hooke 4000.0 NULL 100.0 NULL 0.5 1
|
||||||
|
pair_coeff * * gran/hooke
|
||||||
|
|
||||||
|
region container block -6 6 -6 6 -6 6 units box
|
||||||
|
fix container all wall/gran/region hooke/history &
|
||||||
|
4000.0 NULL 100.0 NULL 0.5 1 region container
|
||||||
|
|
||||||
|
neighbor 0.3 bin
|
||||||
|
neigh_modify delay 0 every 1 check yes
|
||||||
|
|
||||||
|
fix 2 all nve/sphere
|
||||||
|
fix 3 all gravity 1.0 vector 0 0 -1
|
||||||
|
|
||||||
|
region slab block -2 2 -2 2 -2 2 units box
|
||||||
|
fix ins all pour 100 2 4767548 vol 0.4 10 &
|
||||||
|
diam one 1.0 region slab ignore
|
||||||
|
|
||||||
|
timestep 0.005
|
||||||
|
|
||||||
|
compute 1 all temp
|
||||||
|
compute_modify 1 dynamic yes
|
||||||
|
|
||||||
|
compute 2 all temp/sphere
|
||||||
|
compute_modify 2 dynamic yes
|
||||||
|
|
||||||
|
thermo 100
|
||||||
|
thermo_style custom step atoms temp c_1 c_2 press
|
||||||
|
thermo_modify lost ignore
|
||||||
|
compute_modify thermo_temp dynamic yes
|
||||||
|
|
||||||
|
#dump 2 all image 100 image.*.jpg type type &
|
||||||
|
# zoom 1.4 adiam 1.0 box no 0.0 axes yes 0.9 0.03
|
||||||
|
#dump_modify 2 pad 5
|
||||||
|
|
||||||
|
run 5000
|
||||||
|
|
||||||
|
region container delete
|
||||||
|
variable theta equal (step-5000)*(4.0*PI/5000)
|
||||||
|
region container block -6 6 -6 6 -6 6 units box &
|
||||||
|
rotate v_theta 0 0 0 0 0 1
|
||||||
|
run 5000
|
||||||
|
|
||||||
|
region container delete
|
||||||
|
region container block -6 6 -6 6 -6 6 units box
|
||||||
|
run 5000
|
||||||
|
|
||||||
|
region container delete
|
||||||
|
variable theta equal (step-15000)*(4.0*PI/5000)
|
||||||
|
region container block -6 6 -6 6 -6 6 units box &
|
||||||
|
rotate v_theta 0 0 0 1 1 1
|
||||||
|
run 5000
|
||||||
|
|
||||||
|
region container delete
|
||||||
|
region container block -6 6 -6 6 -6 6 units box
|
||||||
|
run 5000
|
||||||
157
examples/granregion/in.granregion.funnel
Normal file
157
examples/granregion/in.granregion.funnel
Normal file
@ -0,0 +1,157 @@
|
|||||||
|
# pour particles into cone-shaped funnel, settle them, let them run out bottom
|
||||||
|
|
||||||
|
variable name string funnel_pour
|
||||||
|
|
||||||
|
thermo_modify flush yes
|
||||||
|
units si
|
||||||
|
variable PI equal 3.141592653589
|
||||||
|
variable seed equal 14314
|
||||||
|
|
||||||
|
###############################################
|
||||||
|
# Geometry-related parameters
|
||||||
|
###############################################
|
||||||
|
|
||||||
|
variable xlo equal 10
|
||||||
|
variable xhi equal 40
|
||||||
|
variable ylo equal 10
|
||||||
|
variable yhi equal 40
|
||||||
|
variable zlo equal -20
|
||||||
|
variable zhi equal 50
|
||||||
|
|
||||||
|
variable xc equal 25
|
||||||
|
variable yc equal 25
|
||||||
|
|
||||||
|
variable zconehi equal 50
|
||||||
|
variable zconelo equal 10
|
||||||
|
variable zcyllo equal 0
|
||||||
|
variable radconelo equal 2
|
||||||
|
variable radconehi equal 20
|
||||||
|
|
||||||
|
################################################
|
||||||
|
# Particle sizes
|
||||||
|
################################################
|
||||||
|
|
||||||
|
variable rlo equal 0.25
|
||||||
|
variable rhi equal 0.5
|
||||||
|
variable dlo equal 2.0*${rlo}
|
||||||
|
variable dhi equal 2.0*${rhi}
|
||||||
|
|
||||||
|
variable skin equal ${rhi}
|
||||||
|
|
||||||
|
###############################################
|
||||||
|
# Granular contact parameters
|
||||||
|
###############################################
|
||||||
|
|
||||||
|
variable coeffRes equal 0.1
|
||||||
|
variable coeffFric equal 0.5
|
||||||
|
|
||||||
|
variable density equal 1.0
|
||||||
|
variable EYoung equal 10^5
|
||||||
|
variable Poisson equal 2.0/7.0
|
||||||
|
variable GShear equal ${EYoung}/(2*(1+${Poisson}))
|
||||||
|
|
||||||
|
variable gravity equal 1.0
|
||||||
|
|
||||||
|
variable reff equal 0.5*(${rhi}+${rlo})
|
||||||
|
variable meff equal ${density}*4.0/3.0*${PI}*${reff}^3
|
||||||
|
variable min_mass equal ${density}*4.0/3.0*${PI}*${rlo}*${rlo}*${rlo}
|
||||||
|
variable max_mass equal ${density}*4.0/3.0*${PI}*${rhi}*${rhi}*${rhi}
|
||||||
|
|
||||||
|
## Typical way to set kn, kt, etc.:
|
||||||
|
variable kn equal 4.0*${GShear}/(3*(1-${Poisson}))
|
||||||
|
variable kt equal 4.0*${GShear}/(2-${Poisson})
|
||||||
|
|
||||||
|
variable a equal (-2.0*log(${coeffRes})/${PI})^2
|
||||||
|
variable gamma_n equal sqrt($a*2*${kn}/${min_mass}/(1+0.25*$a))
|
||||||
|
variable gamma_t equal ${gamma_n}*0.5
|
||||||
|
|
||||||
|
variable tcol equal ${PI}/sqrt(2*${kn}/${min_mass}-${gamma_n}/4.0)
|
||||||
|
|
||||||
|
variable dt equal ${tcol}*0.05
|
||||||
|
timestep ${dt}
|
||||||
|
|
||||||
|
###############################################
|
||||||
|
variable dumpfreq equal 1000
|
||||||
|
variable logfreq equal 1000
|
||||||
|
|
||||||
|
newton off
|
||||||
|
atom_style sphere
|
||||||
|
|
||||||
|
boundary p p f
|
||||||
|
|
||||||
|
region boxreg block ${xlo} ${xhi} ${ylo} ${yhi} ${zlo} ${zhi}
|
||||||
|
create_box 1 boxreg
|
||||||
|
|
||||||
|
pair_style gran/hertz/history &
|
||||||
|
${kn} ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1
|
||||||
|
pair_coeff * *
|
||||||
|
|
||||||
|
neighbor ${skin} bin
|
||||||
|
thermo ${logfreq}
|
||||||
|
|
||||||
|
comm_style brick
|
||||||
|
comm_modify mode multi group all vel yes
|
||||||
|
balance 1.1 shift xyz 20 1.1
|
||||||
|
fix bal all balance 10000 1.1 shift xyz 20 1.01
|
||||||
|
|
||||||
|
####################### Options specific to pouring #########################
|
||||||
|
|
||||||
|
# insertion region for fix/pour
|
||||||
|
|
||||||
|
region insreg cylinder z ${xc} ${yc} 10 30 50 side in units box
|
||||||
|
|
||||||
|
# define cone and cylinder regions - see lammps doc on region command
|
||||||
|
# note new open options
|
||||||
|
|
||||||
|
region cylreg cylinder z ${xc} ${yc} ${radconelo} &
|
||||||
|
${zcyllo} ${zconelo} side in units box &
|
||||||
|
open 2 #Top is open
|
||||||
|
|
||||||
|
region conereg cone z ${xc} ${yc} ${radconelo} ${radconehi} &
|
||||||
|
${zconelo} ${zconehi} side in units box &
|
||||||
|
open 1 open 2 #Bottom and top are open
|
||||||
|
|
||||||
|
region hopreg union 2 conereg cylreg
|
||||||
|
|
||||||
|
fix grav all gravity ${gravity} vector 0 0 -1
|
||||||
|
fix 1 all nve/sphere
|
||||||
|
|
||||||
|
|
||||||
|
fix hopper3 all wall/gran/region hertz/history &
|
||||||
|
${kn} ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 region hopreg
|
||||||
|
|
||||||
|
fix ins all pour 2000 1 42424 region insreg &
|
||||||
|
diam range ${dlo} ${dhi} dens ${density} ${density}
|
||||||
|
|
||||||
|
#dump 1 all custom ${dumpfreq} ${name}.dump &
|
||||||
|
# id type mass diameter x y z
|
||||||
|
|
||||||
|
#dump 2 all image 4000 image.*.jpg type type &
|
||||||
|
# axes yes 0.8 0.02 view 60 -30 zoom 3.0 &
|
||||||
|
# box no 0.0 axes no 0.0 0.0
|
||||||
|
#dump_modify 2 pad 6
|
||||||
|
|
||||||
|
thermo_style custom step cpu atoms ke
|
||||||
|
thermo_modify flush yes lost warn
|
||||||
|
|
||||||
|
# Initial run to fill up the cone
|
||||||
|
|
||||||
|
run 20000
|
||||||
|
unfix ins
|
||||||
|
run 150000
|
||||||
|
|
||||||
|
# remove "plug" - need to redefine cylinder region & union
|
||||||
|
|
||||||
|
region cylreg delete
|
||||||
|
region hopreg delete
|
||||||
|
region cylreg cylinder z ${xc} ${yc} ${radconelo} &
|
||||||
|
${zcyllo} ${zconelo} side in units box &
|
||||||
|
open 1 open 2 #Bottom & top are open
|
||||||
|
|
||||||
|
region hopreg union 2 cylreg conereg
|
||||||
|
|
||||||
|
unfix hopper3
|
||||||
|
fix hopper3 all wall/gran/region hertz/history &
|
||||||
|
${kn} ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 region hopreg
|
||||||
|
|
||||||
|
run 100000
|
||||||
96
examples/granregion/in.granregion.mixer
Normal file
96
examples/granregion/in.granregion.mixer
Normal file
@ -0,0 +1,96 @@
|
|||||||
|
variable name string mixer
|
||||||
|
|
||||||
|
thermo_modify flush yes
|
||||||
|
variable seed equal 14314
|
||||||
|
|
||||||
|
###############################################
|
||||||
|
# Particle parameters
|
||||||
|
################################################
|
||||||
|
|
||||||
|
variable rlo equal 0.3
|
||||||
|
variable rhi equal 0.6
|
||||||
|
variable dlo equal 2.0*${rlo}
|
||||||
|
variable dhi equal 2.0*${rhi}
|
||||||
|
variable skin equal ${rhi}
|
||||||
|
|
||||||
|
variable coeffRes equal 0.1
|
||||||
|
variable coeffFric equal 0.5
|
||||||
|
|
||||||
|
variable kn equal 10^5
|
||||||
|
variable kt equal 0.2*${kn}
|
||||||
|
|
||||||
|
variable gravity equal 1.0
|
||||||
|
variable density equal 1.0
|
||||||
|
|
||||||
|
variable min_mass equal ${density}*4.0/3.0*PI*${rlo}*${rlo}*${rlo}
|
||||||
|
variable a equal (-2.0*log(${coeffRes})/PI)^2
|
||||||
|
variable gamma_n equal sqrt($a*2*${kn}/${min_mass}/(1+0.25*$a))
|
||||||
|
variable gamma_t equal ${gamma_n}*0.5
|
||||||
|
|
||||||
|
variable tcol equal PI/sqrt(2*${kn}/${min_mass}-${gamma_n}/4.0)
|
||||||
|
|
||||||
|
variable dt equal ${tcol}*0.02
|
||||||
|
timestep ${dt}
|
||||||
|
|
||||||
|
###############################################
|
||||||
|
|
||||||
|
variable dumpfreq equal 1000
|
||||||
|
variable logfreq equal 1000
|
||||||
|
|
||||||
|
newton on
|
||||||
|
atom_style sphere
|
||||||
|
|
||||||
|
boundary p p f
|
||||||
|
|
||||||
|
region boxreg block 0 20 0 20 0 20
|
||||||
|
create_box 1 boxreg
|
||||||
|
|
||||||
|
pair_style gran/hertz/history &
|
||||||
|
${kn} ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1
|
||||||
|
pair_coeff * *
|
||||||
|
|
||||||
|
neighbor ${skin} bin
|
||||||
|
thermo ${logfreq}
|
||||||
|
|
||||||
|
comm_style brick
|
||||||
|
comm_modify mode multi group all vel yes
|
||||||
|
balance 1.1 shift xyz 20 1.1
|
||||||
|
fix bal all balance 10000 1.1 shift xyz 20 1.01
|
||||||
|
|
||||||
|
####################### Options specific to pouring #########################
|
||||||
|
|
||||||
|
region insreg cylinder z 10 10 8 10 18 side in units box
|
||||||
|
region cylreg cylinder z 10 10 10 0 20 side in units box
|
||||||
|
|
||||||
|
variable theta equal (step/400000)*2*PI
|
||||||
|
|
||||||
|
region b1 block 2 18 9 11 0 4 side out &
|
||||||
|
rotate v_theta 10 10 0 0 0 1 units box
|
||||||
|
region b2 block 9 11 2 18 0 3.99999 side out &
|
||||||
|
rotate v_theta 10 10 0 0 0 1 units box
|
||||||
|
|
||||||
|
region mixer intersect 3 cylreg b1 b2 side in
|
||||||
|
|
||||||
|
fix grav all gravity ${gravity} vector 0 0 -1
|
||||||
|
fix 1 all nve/sphere
|
||||||
|
|
||||||
|
fix mixwall all wall/gran/region hertz/history &
|
||||||
|
${kn} ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 region mixer
|
||||||
|
|
||||||
|
fix ins all pour 1000 1 42424 region insreg &
|
||||||
|
diam range ${dlo} ${dhi} dens ${density} ${density}
|
||||||
|
|
||||||
|
#dump 1 all custom ${dumpfreq} ${name}_pour.dump &
|
||||||
|
# id type mass diameter x y z
|
||||||
|
|
||||||
|
#dump 2 all image 4000 image.*.jpg type type &
|
||||||
|
# axes yes 0.8 0.02 view 60 -30 zoom 1.5 &
|
||||||
|
# box no 0.0 axes no 0.0 0.0
|
||||||
|
#dump_modify 2 pad 6
|
||||||
|
|
||||||
|
thermo_style custom step cpu atoms ke v_theta
|
||||||
|
thermo_modify flush yes lost warn
|
||||||
|
|
||||||
|
run 200000
|
||||||
|
unfix ins
|
||||||
|
run 200000
|
||||||
468
examples/granregion/log.6Oct16.granregion.box.g++.1
Normal file
468
examples/granregion/log.6Oct16.granregion.box.g++.1
Normal file
@ -0,0 +1,468 @@
|
|||||||
|
LAMMPS (5 Oct 2016)
|
||||||
|
# pouring spheres into container box
|
||||||
|
|
||||||
|
units lj
|
||||||
|
atom_style sphere
|
||||||
|
boundary f f f
|
||||||
|
dimension 3
|
||||||
|
comm_modify vel yes
|
||||||
|
|
||||||
|
region box block -10 10 -10 10 -10 10 units box
|
||||||
|
create_box 2 box
|
||||||
|
Created orthogonal box = (-10 -10 -10) to (10 10 10)
|
||||||
|
1 by 1 by 1 MPI processor grid
|
||||||
|
|
||||||
|
pair_style hybrid gran/hooke 4000.0 NULL 100.0 NULL 0.5 1
|
||||||
|
pair_coeff * * gran/hooke
|
||||||
|
|
||||||
|
region container block -6 6 -6 6 -6 6 units box
|
||||||
|
fix container all wall/gran/region hooke/history 4000.0 NULL 100.0 NULL 0.5 1 region container
|
||||||
|
|
||||||
|
neighbor 0.3 bin
|
||||||
|
neigh_modify delay 0 every 1 check yes
|
||||||
|
|
||||||
|
fix 2 all nve/sphere
|
||||||
|
fix 3 all gravity 1.0 vector 0 0 -1
|
||||||
|
|
||||||
|
region slab block -2 2 -2 2 -2 2 units box
|
||||||
|
fix ins all pour 100 2 4767548 vol 0.4 10 diam one 1.0 region slab ignore
|
||||||
|
Particle insertion: 48 every 566 steps, 100 by step 1133
|
||||||
|
|
||||||
|
timestep 0.005
|
||||||
|
|
||||||
|
compute 1 all temp
|
||||||
|
compute_modify 1 dynamic yes
|
||||||
|
|
||||||
|
compute 2 all temp/sphere
|
||||||
|
compute_modify 2 dynamic yes
|
||||||
|
|
||||||
|
thermo 100
|
||||||
|
thermo_style custom step atoms temp c_1 c_2 press
|
||||||
|
thermo_modify lost ignore
|
||||||
|
compute_modify thermo_temp dynamic yes
|
||||||
|
|
||||||
|
#dump 2 all image 100 image.*.jpg type type # zoom 1.4 adiam 1.0 box no 0.0 axes yes 0.9 0.03
|
||||||
|
#dump_modify 2 pad 5
|
||||||
|
|
||||||
|
run 5000
|
||||||
|
Neighbor list info ...
|
||||||
|
1 neighbor list requests
|
||||||
|
update every 1 steps, delay 0 steps, check yes
|
||||||
|
max neighbors/atom: 2000, page size: 100000
|
||||||
|
master list distance cutoff = 1.3
|
||||||
|
ghost atom cutoff = 1.3
|
||||||
|
binsize = 0.65 -> bins = 31 31 31
|
||||||
|
Memory usage per processor = 0.201172 Mbytes
|
||||||
|
Step Atoms Temp c_1 c_2 Press
|
||||||
|
0 0 0 0 0 0
|
||||||
|
100 21 0.54270729 0.54270729 0.26473526 0.0013567682
|
||||||
|
200 21 0.87606961 0.87606961 0.42735103 0.002190174
|
||||||
|
300 21 1.1428374 1.1428374 0.55748167 0.0028570936
|
||||||
|
400 21 1.3543103 1.3543103 0.66829516 0.0033857758
|
||||||
|
500 21 1.0677786 1.0677786 0.53582407 0.0045048164
|
||||||
|
600 56 0.6744286 0.6744286 0.3502938 0.0047464584
|
||||||
|
700 56 0.75569283 0.75569283 0.39779462 0.0051953882
|
||||||
|
800 56 0.61597505 0.61597505 0.32943642 0.0086022783
|
||||||
|
900 56 0.65260802 0.65260802 0.34474044 0.0059298996
|
||||||
|
1000 56 0.51624952 0.51624952 0.28326898 0.0067827337
|
||||||
|
1100 56 0.46050076 0.46050076 0.25656319 0.0061891094
|
||||||
|
1200 81 0.39112377 0.39112377 0.21690744 0.0086559347
|
||||||
|
1300 81 0.33302801 0.33302801 0.19110222 0.0033381288
|
||||||
|
1400 81 0.39333146 0.39333146 0.21220965 0.0041348597
|
||||||
|
1500 81 0.35493951 0.35493951 0.19924958 0.00373736
|
||||||
|
1600 81 0.34154491 0.34154491 0.19031147 0.005349672
|
||||||
|
1700 100 0.25598828 0.25598828 0.14171498 0.0092236643
|
||||||
|
1800 100 0.2114074 0.2114074 0.12162965 0.0027213483
|
||||||
|
1900 100 0.21810423 0.21810423 0.12176698 0.0036436034
|
||||||
|
2000 100 0.2553198 0.2553198 0.13900087 0.0032844504
|
||||||
|
2100 100 0.24809937 0.24809937 0.13753654 0.0088764373
|
||||||
|
2200 100 0.22455642 0.22455642 0.12500977 0.0043517009
|
||||||
|
2300 100 0.19586874 0.19586874 0.11064996 0.0055178814
|
||||||
|
2400 100 0.059619074 0.059619074 0.045535036 0.00079051539
|
||||||
|
2500 100 0.052222462 0.052222462 0.038563852 0.00098981299
|
||||||
|
2600 100 0.036930777 0.036930777 0.027579114 0.0012285499
|
||||||
|
2700 100 0.027937818 0.027937818 0.020587353 0.00063085447
|
||||||
|
2800 100 0.02103783 0.02103783 0.015469157 0.00050316582
|
||||||
|
2900 100 0.010408128 0.010408128 0.0084894275 0.00035440391
|
||||||
|
3000 100 0.0077664382 0.0077664382 0.0068149074 0.0011153614
|
||||||
|
3100 100 0.0088789208 0.0088789208 0.0070143391 0.00032679783
|
||||||
|
3200 100 0.0077683432 0.0077683432 0.0059711038 0.00044762363
|
||||||
|
3300 100 0.00411 0.00411 0.00372409 0.00015328221
|
||||||
|
3400 100 0.0039192171 0.0039192171 0.0032409072 9.3603399e-05
|
||||||
|
3500 100 0.0023532199 0.0023532199 0.0020924799 0.00049044152
|
||||||
|
3600 100 0.0022544513 0.0022544513 0.0019545724 8.1086108e-05
|
||||||
|
3700 100 0.0012696379 0.0012696379 0.0013134108 5.0058058e-05
|
||||||
|
3800 100 0.0012035225 0.0012035225 0.0012490584 6.0331967e-05
|
||||||
|
3900 100 0.00080361803 0.00080361803 0.00094424552 6.7229227e-05
|
||||||
|
4000 100 0.00060715659 0.00060715659 0.00076521759 6.7029916e-05
|
||||||
|
4100 100 0.00058510487 0.00058510487 0.00073844578 5.5867098e-05
|
||||||
|
4200 100 0.00046832309 0.00046832309 0.00060848748 5.3853715e-05
|
||||||
|
4300 100 0.00045207186 0.00045207186 0.00057825336 4.8367831e-05
|
||||||
|
4400 100 0.00041874845 0.00041874845 0.00053103589 8.666037e-05
|
||||||
|
4500 100 0.00041136295 0.00041136295 0.00052246056 6.0456585e-05
|
||||||
|
4600 100 0.00041021147 0.00041021147 0.0005190668 4.8701604e-05
|
||||||
|
4700 100 0.00037176253 0.00037176253 0.00049156279 5.8874891e-05
|
||||||
|
4800 100 0.0003262417 0.0003262417 0.00045551846 5.0610728e-05
|
||||||
|
4900 100 0.00028093583 0.00028093583 0.00042099654 4.6558605e-05
|
||||||
|
5000 100 0.00027730599 0.00027730599 0.00041664922 4.7053044e-05
|
||||||
|
Loop time of 0.081454 on 1 procs for 5000 steps with 100 atoms
|
||||||
|
|
||||||
|
Performance: 26518022.146 tau/day, 61384.311 timesteps/s
|
||||||
|
99.4% CPU use with 1 MPI tasks x no OpenMP threads
|
||||||
|
|
||||||
|
MPI task timing breakdown:
|
||||||
|
Section | min time | avg time | max time |%varavg| %total
|
||||||
|
---------------------------------------------------------------
|
||||||
|
Pair | 0.0085223 | 0.0085223 | 0.0085223 | 0.0 | 10.46
|
||||||
|
Neigh | 0.01466 | 0.01466 | 0.01466 | 0.0 | 18.00
|
||||||
|
Comm | 0.00076532 | 0.00076532 | 0.00076532 | 0.0 | 0.94
|
||||||
|
Output | 0.00052285 | 0.00052285 | 0.00052285 | 0.0 | 0.64
|
||||||
|
Modify | 0.05317 | 0.05317 | 0.05317 | 0.0 | 65.28
|
||||||
|
Other | | 0.003814 | | | 4.68
|
||||||
|
|
||||||
|
Nlocal: 100 ave 100 max 100 min
|
||||||
|
Histogram: 1 0 0 0 0 0 0 0 0 0
|
||||||
|
Nghost: 0 ave 0 max 0 min
|
||||||
|
Histogram: 1 0 0 0 0 0 0 0 0 0
|
||||||
|
Neighs: 158 ave 158 max 158 min
|
||||||
|
Histogram: 1 0 0 0 0 0 0 0 0 0
|
||||||
|
|
||||||
|
Total # of neighbors = 158
|
||||||
|
Ave neighs/atom = 1.58
|
||||||
|
Neighbor list builds = 306
|
||||||
|
Dangerous builds = 0
|
||||||
|
|
||||||
|
region container delete
|
||||||
|
variable theta equal (step-5000)*(4.0*PI/5000)
|
||||||
|
region container block -6 6 -6 6 -6 6 units box rotate v_theta 0 0 0 0 0 1
|
||||||
|
run 5000
|
||||||
|
Memory usage per processor = 5.26337 Mbytes
|
||||||
|
Step Atoms Temp c_1 c_2 Press
|
||||||
|
5000 100 0.00027730599 0.00027730599 0.00041664922 4.705763e-05
|
||||||
|
5100 100 0.60717077 0.60717077 0.33118944 0.010686501
|
||||||
|
5200 100 0.64991179 0.64991179 0.35498767 0.011370453
|
||||||
|
5300 100 0.72038713 0.72038713 0.38745069 0.010507667
|
||||||
|
5400 100 0.81357499 0.81357499 0.42946808 0.012920419
|
||||||
|
5500 100 0.90488411 0.90488411 0.46803321 0.015077428
|
||||||
|
5600 100 0.99065617 0.99065617 0.50811954 0.015556572
|
||||||
|
5700 100 1.0701203 1.0701203 0.54641187 0.016464366
|
||||||
|
5800 100 1.1351242 1.1351242 0.57607707 0.017832476
|
||||||
|
5900 100 1.1883602 1.1883602 0.60022389 0.019571838
|
||||||
|
6000 100 1.2153421 1.2153421 0.61245652 0.020549414
|
||||||
|
6100 100 1.2369293 1.2369293 0.62229634 0.01827529
|
||||||
|
6200 100 1.2556883 1.2556883 0.63207905 0.020286322
|
||||||
|
6300 100 1.2618555 1.2618555 0.63610311 0.019844583
|
||||||
|
6400 100 1.2671678 1.2671678 0.63873131 0.019817249
|
||||||
|
6500 100 1.2875312 1.2875312 0.64728693 0.020097362
|
||||||
|
6600 100 1.3014055 1.3014055 0.65413071 0.020000886
|
||||||
|
6700 100 1.2904021 1.2904021 0.6485358 0.020009625
|
||||||
|
6800 100 1.2962767 1.2962767 0.65088367 0.021340143
|
||||||
|
6900 100 1.3056081 1.3056081 0.65490644 0.020455771
|
||||||
|
7000 100 1.3116731 1.3116731 0.65766216 0.020475061
|
||||||
|
7100 100 1.319457 1.319457 0.66105016 0.020937651
|
||||||
|
7200 100 1.3213585 1.3213585 0.66207982 0.02120792
|
||||||
|
7300 100 1.3232411 1.3232411 0.66392391 0.021040683
|
||||||
|
7400 100 1.3300163 1.3300163 0.66599805 0.021202273
|
||||||
|
7500 100 1.3350122 1.3350122 0.66894534 0.021161833
|
||||||
|
7600 100 1.3344633 1.3344633 0.6688403 0.020871936
|
||||||
|
7700 100 1.3492825 1.3492825 0.6751371 0.021415859
|
||||||
|
7800 100 1.3539647 1.3539647 0.67757279 0.021306442
|
||||||
|
7900 100 1.3527157 1.3527157 0.67722774 0.021793531
|
||||||
|
8000 100 1.3526931 1.3526931 0.67713399 0.022973395
|
||||||
|
8100 100 1.3568279 1.3568279 0.67936578 0.021422428
|
||||||
|
8200 100 1.3599258 1.3599258 0.68113142 0.021397012
|
||||||
|
8300 100 1.3601893 1.3601893 0.68165656 0.021643375
|
||||||
|
8400 100 1.3752164 1.3752164 0.68788213 0.022208765
|
||||||
|
8500 100 1.3821458 1.3821458 0.69165274 0.022015877
|
||||||
|
8600 100 1.3784691 1.3784691 0.68964478 0.022144188
|
||||||
|
8700 100 1.3801422 1.3801422 0.6904093 0.0220402
|
||||||
|
8800 100 1.3900051 1.3900051 0.6947875 0.02216362
|
||||||
|
8900 100 1.3897902 1.3897902 0.69427134 0.023078569
|
||||||
|
9000 100 1.3909918 1.3909918 0.69456955 0.022043699
|
||||||
|
9100 100 1.3925028 1.3925028 0.69519141 0.022180156
|
||||||
|
9200 100 1.3923277 1.3923277 0.69512657 0.022113729
|
||||||
|
9300 100 1.3945193 1.3945193 0.69625374 0.022344694
|
||||||
|
9400 100 1.3960782 1.3960782 0.69705144 0.022181158
|
||||||
|
9500 100 1.3932407 1.3932407 0.69560365 0.022129998
|
||||||
|
9600 100 1.3925489 1.3925489 0.69532399 0.022124653
|
||||||
|
9700 100 1.3935299 1.3935299 0.69581607 0.022258368
|
||||||
|
9800 100 1.3933949 1.3933949 0.69579137 0.022209028
|
||||||
|
9900 100 1.3934712 1.3934712 0.69587898 0.022214942
|
||||||
|
10000 100 1.3935828 1.3935828 0.69598655 0.022231414
|
||||||
|
Loop time of 0.261407 on 1 procs for 5000 steps with 100 atoms
|
||||||
|
|
||||||
|
Performance: 8262972.563 tau/day, 19127.251 timesteps/s
|
||||||
|
99.8% CPU use with 1 MPI tasks x no OpenMP threads
|
||||||
|
|
||||||
|
MPI task timing breakdown:
|
||||||
|
Section | min time | avg time | max time |%varavg| %total
|
||||||
|
---------------------------------------------------------------
|
||||||
|
Pair | 0.042233 | 0.042233 | 0.042233 | 0.0 | 16.16
|
||||||
|
Neigh | 0.035131 | 0.035131 | 0.035131 | 0.0 | 13.44
|
||||||
|
Comm | 0.0010462 | 0.0010462 | 0.0010462 | 0.0 | 0.40
|
||||||
|
Output | 0.00051785 | 0.00051785 | 0.00051785 | 0.0 | 0.20
|
||||||
|
Modify | 0.17687 | 0.17687 | 0.17687 | 0.0 | 67.66
|
||||||
|
Other | | 0.00561 | | | 2.15
|
||||||
|
|
||||||
|
Nlocal: 100 ave 100 max 100 min
|
||||||
|
Histogram: 1 0 0 0 0 0 0 0 0 0
|
||||||
|
Nghost: 0 ave 0 max 0 min
|
||||||
|
Histogram: 1 0 0 0 0 0 0 0 0 0
|
||||||
|
Neighs: 187 ave 187 max 187 min
|
||||||
|
Histogram: 1 0 0 0 0 0 0 0 0 0
|
||||||
|
|
||||||
|
Total # of neighbors = 187
|
||||||
|
Ave neighs/atom = 1.87
|
||||||
|
Neighbor list builds = 634
|
||||||
|
Dangerous builds = 0
|
||||||
|
|
||||||
|
region container delete
|
||||||
|
region container block -6 6 -6 6 -6 6 units box
|
||||||
|
run 5000
|
||||||
|
Memory usage per processor = 5.26337 Mbytes
|
||||||
|
Step Atoms Temp c_1 c_2 Press
|
||||||
|
10000 100 1.3935828 1.3935828 0.69598655 0.02230659
|
||||||
|
10100 100 0.3402861 0.3402861 0.19584226 0.014767914
|
||||||
|
10200 100 0.19064555 0.19064555 0.12536788 0.0025413789
|
||||||
|
10300 100 0.13281358 0.13281358 0.10275768 0.002843208
|
||||||
|
10400 100 0.10124671 0.10124671 0.077914135 0.0017745353
|
||||||
|
10500 100 0.082636734 0.082636734 0.063857622 0.001419336
|
||||||
|
10600 100 0.066744462 0.066744462 0.051927437 0.0010830674
|
||||||
|
10700 100 0.060778462 0.060778462 0.047461784 0.0011418844
|
||||||
|
10800 100 0.043437178 0.043437178 0.032805669 0.0017050393
|
||||||
|
10900 100 0.036483219 0.036483219 0.027387805 0.00086936813
|
||||||
|
11000 100 0.027639076 0.027639076 0.021221241 0.00054920607
|
||||||
|
11100 100 0.023614696 0.023614696 0.018445634 0.00058724552
|
||||||
|
11200 100 0.020103248 0.020103248 0.015933089 0.00072830275
|
||||||
|
11300 100 0.018645345 0.018645345 0.014559759 0.0002319388
|
||||||
|
11400 100 0.015499672 0.015499672 0.01248828 0.00036020862
|
||||||
|
11500 100 0.013421296 0.013421296 0.010743248 0.00043093929
|
||||||
|
11600 100 0.011214892 0.011214892 0.0089653924 0.00059789544
|
||||||
|
11700 100 0.0086660806 0.0086660806 0.0070563902 0.00029684573
|
||||||
|
11800 100 0.0064777244 0.0064777244 0.0052946156 0.00046466386
|
||||||
|
11900 100 0.0059360881 0.0059360881 0.0048568813 8.361561e-05
|
||||||
|
12000 100 0.0045341025 0.0045341025 0.003883229 0.00016408047
|
||||||
|
12100 100 0.0042504415 0.0042504415 0.0036944958 6.5005147e-05
|
||||||
|
12200 100 0.0041367637 0.0041367637 0.0035928232 7.3025698e-05
|
||||||
|
12300 100 0.0037700129 0.0037700129 0.003283398 6.381318e-05
|
||||||
|
12400 100 0.0033494476 0.0033494476 0.0029274495 4.7731105e-05
|
||||||
|
12500 100 0.0030903175 0.0030903175 0.0027068073 6.797313e-05
|
||||||
|
12600 100 0.0026406999 0.0026406999 0.0023315387 0.0002371331
|
||||||
|
12700 100 0.0025020713 0.0025020713 0.0022367855 4.2787276e-05
|
||||||
|
12800 100 0.0022977381 0.0022977381 0.0020778307 3.9744567e-05
|
||||||
|
12900 100 0.002039634 0.002039634 0.0018862012 0.00011669223
|
||||||
|
13000 100 0.0018044702 0.0018044702 0.00171399 0.00013835538
|
||||||
|
13100 100 0.0016600965 0.0016600965 0.0015553191 3.2320019e-05
|
||||||
|
13200 100 0.0015596204 0.0015596204 0.001486374 1.9246911e-05
|
||||||
|
13300 100 0.001316505 0.001316505 0.0012105249 9.1469679e-05
|
||||||
|
13400 100 0.0012517536 0.0012517536 0.0011525753 4.815292e-05
|
||||||
|
13500 100 0.0010827608 0.0010827608 0.001038339 2.0913017e-05
|
||||||
|
13600 100 0.0009863908 0.0009863908 0.00095924929 9.7716736e-05
|
||||||
|
13700 100 0.00094543599 0.00094543599 0.00092425645 1.378887e-05
|
||||||
|
13800 100 0.00087893271 0.00087893271 0.00086801608 1.8981177e-05
|
||||||
|
13900 100 0.00080241572 0.00080241572 0.0007930026 5.0987122e-05
|
||||||
|
14000 100 0.00070705631 0.00070705631 0.00069238137 1.2900066e-05
|
||||||
|
14100 100 0.0006525032 0.0006525032 0.000637991 0.00010838464
|
||||||
|
14200 100 0.00059338444 0.00059338444 0.00057560454 7.3431324e-06
|
||||||
|
14300 100 0.00058641228 0.00058641228 0.00056944735 7.256852e-06
|
||||||
|
14400 100 0.00056221112 0.00056221112 0.00054625666 8.1343426e-06
|
||||||
|
14500 100 0.00055493127 0.00055493127 0.00053957583 1.1713058e-05
|
||||||
|
14600 100 0.00052854921 0.00052854921 0.00051816618 8.6527225e-06
|
||||||
|
14700 100 0.00052630581 0.00052630581 0.00051584277 6.4890475e-06
|
||||||
|
14800 100 0.00052563819 0.00052563819 0.00051493123 1.2687153e-05
|
||||||
|
14900 100 0.00052131364 0.00052131364 0.00050917244 7.4589995e-08
|
||||||
|
15000 100 0.00051902191 0.00051902191 0.00050725364 6.4228962e-06
|
||||||
|
Loop time of 0.0895741 on 1 procs for 5000 steps with 100 atoms
|
||||||
|
|
||||||
|
Performance: 24114113.723 tau/day, 55819.708 timesteps/s
|
||||||
|
99.3% CPU use with 1 MPI tasks x no OpenMP threads
|
||||||
|
|
||||||
|
MPI task timing breakdown:
|
||||||
|
Section | min time | avg time | max time |%varavg| %total
|
||||||
|
---------------------------------------------------------------
|
||||||
|
Pair | 0.0098987 | 0.0098987 | 0.0098987 | 0.0 | 11.05
|
||||||
|
Neigh | 0.0061045 | 0.0061045 | 0.0061045 | 0.0 | 6.81
|
||||||
|
Comm | 0.00069976 | 0.00069976 | 0.00069976 | 0.0 | 0.78
|
||||||
|
Output | 0.00049758 | 0.00049758 | 0.00049758 | 0.0 | 0.56
|
||||||
|
Modify | 0.068435 | 0.068435 | 0.068435 | 0.0 | 76.40
|
||||||
|
Other | | 0.003939 | | | 4.40
|
||||||
|
|
||||||
|
Nlocal: 100 ave 100 max 100 min
|
||||||
|
Histogram: 1 0 0 0 0 0 0 0 0 0
|
||||||
|
Nghost: 0 ave 0 max 0 min
|
||||||
|
Histogram: 1 0 0 0 0 0 0 0 0 0
|
||||||
|
Neighs: 160 ave 160 max 160 min
|
||||||
|
Histogram: 1 0 0 0 0 0 0 0 0 0
|
||||||
|
|
||||||
|
Total # of neighbors = 160
|
||||||
|
Ave neighs/atom = 1.6
|
||||||
|
Neighbor list builds = 111
|
||||||
|
Dangerous builds = 0
|
||||||
|
|
||||||
|
region container delete
|
||||||
|
variable theta equal (step-15000)*(4.0*PI/5000)
|
||||||
|
region container block -6 6 -6 6 -6 6 units box rotate v_theta 0 0 0 1 1 1
|
||||||
|
run 5000
|
||||||
|
Memory usage per processor = 5.26337 Mbytes
|
||||||
|
Step Atoms Temp c_1 c_2 Press
|
||||||
|
15000 100 0.00051902191 0.00051902191 0.00050725364 6.4228962e-06
|
||||||
|
15100 100 1.1235353 1.1235353 0.72003773 0.013686681
|
||||||
|
15200 100 1.0778556 1.0778556 0.69137925 0.013478363
|
||||||
|
15300 100 1.069015 1.069015 0.69798184 0.014165255
|
||||||
|
15400 100 1.2249943 1.2249943 0.79096059 0.020933395
|
||||||
|
15500 100 1.5225664 1.5225664 0.94822282 0.023932611
|
||||||
|
15600 100 1.5867194 1.5867194 0.98143504 0.024565132
|
||||||
|
15700 100 1.6595267 1.6595267 1.0203985 0.025152432
|
||||||
|
15800 100 1.8188027 1.8188027 1.0857586 0.031597641
|
||||||
|
15900 100 1.9234102 1.9234102 1.1099361 0.032381895
|
||||||
|
16000 100 2.039435 2.039435 1.1656948 0.032501981
|
||||||
|
16100 100 2.17315 2.17315 1.2265552 0.032675825
|
||||||
|
16200 100 2.2017279 2.2017279 1.23995 0.028634878
|
||||||
|
16300 100 2.3510902 2.3510902 1.3055642 0.03248003
|
||||||
|
16400 100 2.373932 2.373932 1.3059254 0.031292969
|
||||||
|
16500 100 2.5010862 2.5010862 1.3607219 0.032322054
|
||||||
|
16600 100 2.4815092 2.4815092 1.3524159 0.031223889
|
||||||
|
16700 100 2.6549226 2.6549226 1.4383508 0.033713507
|
||||||
|
16800 100 2.8087564 2.8087564 1.5261538 0.036598837
|
||||||
|
16900 100 2.8653588 2.8653588 1.5649123 0.035890231
|
||||||
|
17000 100 2.903748 2.903748 1.5907716 0.038038745
|
||||||
|
17100 100 2.9679376 2.9679376 1.6195577 0.051771432
|
||||||
|
17200 100 2.9632377 2.9632377 1.6233074 0.039825751
|
||||||
|
17300 100 3.0436883 3.0436883 1.6591248 0.042862982
|
||||||
|
17400 100 3.0969015 3.0969015 1.6811582 0.042104811
|
||||||
|
17500 100 3.0827135 3.0827135 1.691414 0.045839327
|
||||||
|
17600 100 3.0854805 3.0854805 1.689399 0.041770144
|
||||||
|
17700 100 3.07523 3.07523 1.6685518 0.045104715
|
||||||
|
17800 100 2.9610899 2.9610899 1.6349099 0.039060791
|
||||||
|
17900 100 2.8002989 2.8002989 1.5665223 0.037917927
|
||||||
|
18000 100 2.9139644 2.9139644 1.6206891 0.050841302
|
||||||
|
18100 100 3.0134757 3.0134757 1.6673916 0.040967255
|
||||||
|
18200 100 3.0731184 3.0731184 1.6777507 0.043503474
|
||||||
|
18300 100 3.0915242 3.0915242 1.6843452 0.040157898
|
||||||
|
18400 100 3.098896 3.098896 1.6904524 0.039629218
|
||||||
|
18500 100 3.1651814 3.1651814 1.7290259 0.042604953
|
||||||
|
18600 100 3.353247 3.353247 1.8236992 0.045132486
|
||||||
|
18700 100 3.540156 3.540156 1.9078363 0.046602063
|
||||||
|
18800 100 3.6395129 3.6395129 1.9578976 0.045659959
|
||||||
|
18900 100 3.7638134 3.7638134 2.0179445 0.051061068
|
||||||
|
19000 100 3.7603453 3.7603453 2.003355 0.057123184
|
||||||
|
19100 100 3.9218495 3.9218495 2.0968869 0.057671742
|
||||||
|
19200 100 3.9924222 3.9924222 2.1321955 0.051824898
|
||||||
|
19300 100 3.9690887 3.9690887 2.1270643 0.054832867
|
||||||
|
19400 100 3.9408481 3.9408481 2.1146593 0.057020024
|
||||||
|
19500 100 3.8313782 3.8313782 2.0610797 0.055164704
|
||||||
|
19600 100 3.8317496 3.8317496 2.0668123 0.049840804
|
||||||
|
19700 100 3.6068628 3.6068628 1.964227 0.05142407
|
||||||
|
19800 100 3.5477437 3.5477437 1.9314948 0.051076014
|
||||||
|
19900 100 3.6526881 3.6526881 1.9855353 0.047130029
|
||||||
|
20000 100 3.7243709 3.7243709 2.0380212 0.048446835
|
||||||
|
Loop time of 0.206397 on 1 procs for 5000 steps with 100 atoms
|
||||||
|
|
||||||
|
Performance: 10465265.522 tau/day, 24225.152 timesteps/s
|
||||||
|
100.3% CPU use with 1 MPI tasks x no OpenMP threads
|
||||||
|
|
||||||
|
MPI task timing breakdown:
|
||||||
|
Section | min time | avg time | max time |%varavg| %total
|
||||||
|
---------------------------------------------------------------
|
||||||
|
Pair | 0.014297 | 0.014297 | 0.014297 | 0.0 | 6.93
|
||||||
|
Neigh | 0.050213 | 0.050213 | 0.050213 | 0.0 | 24.33
|
||||||
|
Comm | 0.0011115 | 0.0011115 | 0.0011115 | 0.0 | 0.54
|
||||||
|
Output | 0.00051141 | 0.00051141 | 0.00051141 | 0.0 | 0.25
|
||||||
|
Modify | 0.13415 | 0.13415 | 0.13415 | 0.0 | 65.00
|
||||||
|
Other | | 0.006114 | | | 2.96
|
||||||
|
|
||||||
|
Nlocal: 100 ave 100 max 100 min
|
||||||
|
Histogram: 1 0 0 0 0 0 0 0 0 0
|
||||||
|
Nghost: 0 ave 0 max 0 min
|
||||||
|
Histogram: 1 0 0 0 0 0 0 0 0 0
|
||||||
|
Neighs: 142 ave 142 max 142 min
|
||||||
|
Histogram: 1 0 0 0 0 0 0 0 0 0
|
||||||
|
|
||||||
|
Total # of neighbors = 142
|
||||||
|
Ave neighs/atom = 1.42
|
||||||
|
Neighbor list builds = 899
|
||||||
|
Dangerous builds = 0
|
||||||
|
|
||||||
|
region container delete
|
||||||
|
region container block -6 6 -6 6 -6 6 units box
|
||||||
|
run 5000
|
||||||
|
Memory usage per processor = 5.26337 Mbytes
|
||||||
|
Step Atoms Temp c_1 c_2 Press
|
||||||
|
20000 100 3.7243709 3.7243709 2.0380212 0.048156434
|
||||||
|
20100 100 1.1186527 1.1186527 0.69104385 0.014964891
|
||||||
|
20200 100 0.91445605 0.91445605 0.57005236 0.011324474
|
||||||
|
20300 100 0.8936601 0.8936601 0.55534411 0.011071843
|
||||||
|
20400 100 0.90773143 0.90773143 0.55999953 0.011254101
|
||||||
|
20500 100 0.91995508 0.91995508 0.55837916 0.011548541
|
||||||
|
20600 100 0.91682167 0.91682167 0.54095261 0.012563797
|
||||||
|
20700 100 0.97806337 0.97806337 0.56016442 0.012396925
|
||||||
|
20800 100 0.97778738 0.97778738 0.55606194 0.015441479
|
||||||
|
20900 100 0.77253213 0.77253213 0.44636799 0.011428992
|
||||||
|
21000 100 0.63053468 0.63053468 0.35995394 0.01005502
|
||||||
|
21100 100 0.25437539 0.25437539 0.16544433 0.004628738
|
||||||
|
21200 100 0.11828032 0.11828032 0.087911985 0.0037076362
|
||||||
|
21300 100 0.11219312 0.11219312 0.080957112 0.0015847347
|
||||||
|
21400 100 0.10765357 0.10765357 0.074676159 0.0022823419
|
||||||
|
21500 100 0.060787093 0.060787093 0.046135213 0.00091422949
|
||||||
|
21600 100 0.040447932 0.040447932 0.033050575 0.0013404194
|
||||||
|
21700 100 0.035227782 0.035227782 0.02916621 0.00138779
|
||||||
|
21800 100 0.03309101 0.03309101 0.026613861 0.00058184323
|
||||||
|
21900 100 0.031461843 0.031461843 0.024751985 0.0013090333
|
||||||
|
22000 100 0.021624144 0.021624144 0.017872639 0.0010893822
|
||||||
|
22100 100 0.016728267 0.016728267 0.01403934 0.00049128736
|
||||||
|
22200 100 0.016256915 0.016256915 0.013763903 0.00047288638
|
||||||
|
22300 100 0.01349256 0.01349256 0.011498343 0.0013508309
|
||||||
|
22400 100 0.010027007 0.010027007 0.0087924966 0.00030117996
|
||||||
|
22500 100 0.0107355 0.0107355 0.0088715062 0.001043188
|
||||||
|
22600 100 0.0095852245 0.0095852245 0.007965421 0.00028464236
|
||||||
|
22700 100 0.0072956464 0.0072956464 0.0062403843 0.00061636772
|
||||||
|
22800 100 0.0060874415 0.0060874415 0.0054788049 0.00021135824
|
||||||
|
22900 100 0.0059688159 0.0059688159 0.0049530273 0.00022094116
|
||||||
|
23000 100 0.0050218996 0.0050218996 0.0043518404 0.00022527705
|
||||||
|
23100 100 0.005022208 0.005022208 0.0043118432 0.00052482006
|
||||||
|
23200 100 0.0047096056 0.0047096056 0.0039698638 0.00026423471
|
||||||
|
23300 100 0.0039510068 0.0039510068 0.0034773285 0.0001891104
|
||||||
|
23400 100 0.0037308781 0.0037308781 0.0031763304 0.00027163016
|
||||||
|
23500 100 0.0036278619 0.0036278619 0.0030371899 0.00017961072
|
||||||
|
23600 100 0.0033598677 0.0033598677 0.0027586323 0.00015034494
|
||||||
|
23700 100 0.0028530843 0.0028530843 0.0024809444 0.00012294415
|
||||||
|
23800 100 0.0025388819 0.0025388819 0.0022812799 0.00018946676
|
||||||
|
23900 100 0.0021129272 0.0021129272 0.0019905358 0.00015816903
|
||||||
|
24000 100 0.0021010978 0.0021010978 0.0019864539 0.00017086049
|
||||||
|
24100 100 0.0022189886 0.0022189886 0.0020466911 0.00030932562
|
||||||
|
24200 100 0.0019226314 0.0019226314 0.0017933042 9.3246067e-05
|
||||||
|
24300 100 0.0016875781 0.0016875781 0.0015999656 9.9935458e-05
|
||||||
|
24400 100 0.0015929611 0.0015929611 0.001531011 9.7429139e-05
|
||||||
|
24500 100 0.0015143044 0.0015143044 0.0014044175 9.807117e-05
|
||||||
|
24600 100 0.0018595492 0.0018595492 0.0014740944 7.4734729e-05
|
||||||
|
24700 100 0.0011646988 0.0011646988 0.0010881356 6.1197025e-05
|
||||||
|
24800 100 0.0014641612 0.0014641612 0.0012316664 8.81462e-05
|
||||||
|
24900 100 0.001024996 0.001024996 0.00094311114 5.8776472e-05
|
||||||
|
25000 100 0.00097890442 0.00097890442 0.00090302317 3.3980657e-05
|
||||||
|
Loop time of 0.0954661 on 1 procs for 5000 steps with 100 atoms
|
||||||
|
|
||||||
|
Performance: 22625823.872 tau/day, 52374.592 timesteps/s
|
||||||
|
99.5% CPU use with 1 MPI tasks x no OpenMP threads
|
||||||
|
|
||||||
|
MPI task timing breakdown:
|
||||||
|
Section | min time | avg time | max time |%varavg| %total
|
||||||
|
---------------------------------------------------------------
|
||||||
|
Pair | 0.01234 | 0.01234 | 0.01234 | 0.0 | 12.93
|
||||||
|
Neigh | 0.015404 | 0.015404 | 0.015404 | 0.0 | 16.14
|
||||||
|
Comm | 0.00077391 | 0.00077391 | 0.00077391 | 0.0 | 0.81
|
||||||
|
Output | 0.000494 | 0.000494 | 0.000494 | 0.0 | 0.52
|
||||||
|
Modify | 0.062222 | 0.062222 | 0.062222 | 0.0 | 65.18
|
||||||
|
Other | | 0.004233 | | | 4.43
|
||||||
|
|
||||||
|
Nlocal: 100 ave 100 max 100 min
|
||||||
|
Histogram: 1 0 0 0 0 0 0 0 0 0
|
||||||
|
Nghost: 0 ave 0 max 0 min
|
||||||
|
Histogram: 1 0 0 0 0 0 0 0 0 0
|
||||||
|
Neighs: 150 ave 150 max 150 min
|
||||||
|
Histogram: 1 0 0 0 0 0 0 0 0 0
|
||||||
|
|
||||||
|
Total # of neighbors = 150
|
||||||
|
Ave neighs/atom = 1.5
|
||||||
|
Neighbor list builds = 283
|
||||||
|
Dangerous builds = 0
|
||||||
|
Total wall time: 0:00:00
|
||||||
468
examples/granregion/log.6Oct16.granregion.box.g++.4
Normal file
468
examples/granregion/log.6Oct16.granregion.box.g++.4
Normal file
@ -0,0 +1,468 @@
|
|||||||
|
LAMMPS (5 Oct 2016)
|
||||||
|
# pouring spheres into container box
|
||||||
|
|
||||||
|
units lj
|
||||||
|
atom_style sphere
|
||||||
|
boundary f f f
|
||||||
|
dimension 3
|
||||||
|
comm_modify vel yes
|
||||||
|
|
||||||
|
region box block -10 10 -10 10 -10 10 units box
|
||||||
|
create_box 2 box
|
||||||
|
Created orthogonal box = (-10 -10 -10) to (10 10 10)
|
||||||
|
1 by 2 by 2 MPI processor grid
|
||||||
|
|
||||||
|
pair_style hybrid gran/hooke 4000.0 NULL 100.0 NULL 0.5 1
|
||||||
|
pair_coeff * * gran/hooke
|
||||||
|
|
||||||
|
region container block -6 6 -6 6 -6 6 units box
|
||||||
|
fix container all wall/gran/region hooke/history 4000.0 NULL 100.0 NULL 0.5 1 region container
|
||||||
|
|
||||||
|
neighbor 0.3 bin
|
||||||
|
neigh_modify delay 0 every 1 check yes
|
||||||
|
|
||||||
|
fix 2 all nve/sphere
|
||||||
|
fix 3 all gravity 1.0 vector 0 0 -1
|
||||||
|
|
||||||
|
region slab block -2 2 -2 2 -2 2 units box
|
||||||
|
fix ins all pour 100 2 4767548 vol 0.4 10 diam one 1.0 region slab ignore
|
||||||
|
Particle insertion: 48 every 566 steps, 100 by step 1133
|
||||||
|
|
||||||
|
timestep 0.005
|
||||||
|
|
||||||
|
compute 1 all temp
|
||||||
|
compute_modify 1 dynamic yes
|
||||||
|
|
||||||
|
compute 2 all temp/sphere
|
||||||
|
compute_modify 2 dynamic yes
|
||||||
|
|
||||||
|
thermo 100
|
||||||
|
thermo_style custom step atoms temp c_1 c_2 press
|
||||||
|
thermo_modify lost ignore
|
||||||
|
compute_modify thermo_temp dynamic yes
|
||||||
|
|
||||||
|
#dump 2 all image 100 image.*.jpg type type # zoom 1.4 adiam 1.0 box no 0.0 axes yes 0.9 0.03
|
||||||
|
#dump_modify 2 pad 5
|
||||||
|
|
||||||
|
run 5000
|
||||||
|
Neighbor list info ...
|
||||||
|
1 neighbor list requests
|
||||||
|
update every 1 steps, delay 0 steps, check yes
|
||||||
|
max neighbors/atom: 2000, page size: 100000
|
||||||
|
master list distance cutoff = 1.3
|
||||||
|
ghost atom cutoff = 1.3
|
||||||
|
binsize = 0.65 -> bins = 31 31 31
|
||||||
|
Memory usage per processor = 0.0990257 Mbytes
|
||||||
|
Step Atoms Temp c_1 c_2 Press
|
||||||
|
0 0 0 0 0 0
|
||||||
|
100 21 0.54270729 0.54270729 0.26473526 0.0013567682
|
||||||
|
200 21 0.87606961 0.87606961 0.42735103 0.002190174
|
||||||
|
300 21 1.1428374 1.1428374 0.55748167 0.0028570936
|
||||||
|
400 21 1.3543103 1.3543103 0.66829516 0.0033857758
|
||||||
|
500 21 1.0677786 1.0677786 0.53582407 0.0045048164
|
||||||
|
600 56 0.6744286 0.6744286 0.3502938 0.0047464584
|
||||||
|
700 56 0.75569283 0.75569283 0.39779462 0.0051953882
|
||||||
|
800 56 0.61597505 0.61597505 0.32943642 0.0086022783
|
||||||
|
900 56 0.65260802 0.65260802 0.34474044 0.0059298996
|
||||||
|
1000 56 0.51624952 0.51624952 0.28326898 0.0067827337
|
||||||
|
1100 56 0.46050076 0.46050076 0.25656319 0.0061891094
|
||||||
|
1200 81 0.39112377 0.39112377 0.21690744 0.0086559347
|
||||||
|
1300 81 0.33302801 0.33302801 0.19110222 0.0033381288
|
||||||
|
1400 81 0.39333146 0.39333146 0.21220965 0.0041348597
|
||||||
|
1500 81 0.35493951 0.35493951 0.19924958 0.00373736
|
||||||
|
1600 81 0.34154491 0.34154491 0.19031147 0.005349672
|
||||||
|
1700 100 0.25598828 0.25598828 0.14171498 0.0092236643
|
||||||
|
1800 100 0.2114074 0.2114074 0.12162965 0.0027213483
|
||||||
|
1900 100 0.21810423 0.21810423 0.12176698 0.0036436054
|
||||||
|
2000 100 0.2553198 0.2553198 0.13900087 0.0032844518
|
||||||
|
2100 100 0.24809936 0.24809936 0.13753654 0.0088764777
|
||||||
|
2200 100 0.22455625 0.22455625 0.12500973 0.0043515755
|
||||||
|
2300 100 0.19586871 0.19586871 0.11064996 0.0055176298
|
||||||
|
2400 100 0.059621411 0.059621411 0.045535517 0.00079910861
|
||||||
|
2500 100 0.052217518 0.052217518 0.038542594 0.0009759424
|
||||||
|
2600 100 0.036907358 0.036907358 0.027550263 0.0014047668
|
||||||
|
2700 100 0.027926944 0.027926944 0.020599405 0.00063362027
|
||||||
|
2800 100 0.020876282 0.020876282 0.015385856 0.00066161626
|
||||||
|
2900 100 0.010390963 0.010390963 0.0085038611 0.00026222195
|
||||||
|
3000 100 0.0080105974 0.0080105974 0.006995365 0.00059521652
|
||||||
|
3100 100 0.0087388005 0.0087388005 0.0069051613 0.00028045343
|
||||||
|
3200 100 0.0078828927 0.0078828927 0.0060159861 0.00014819289
|
||||||
|
3300 100 0.0039336821 0.0039336821 0.0036525886 0.0001439482
|
||||||
|
3400 100 0.0037684472 0.0037684472 0.0031531439 0.00010653386
|
||||||
|
3500 100 0.0023527874 0.0023527874 0.0020983632 6.3797052e-05
|
||||||
|
3600 100 0.0018768162 0.0018768162 0.0017248798 0.00014904114
|
||||||
|
3700 100 0.00135595 0.00135595 0.0013962044 6.2461444e-05
|
||||||
|
3800 100 0.0012673777 0.0012673777 0.0013074364 0.00028034063
|
||||||
|
3900 100 0.00081311806 0.00081311806 0.00095642595 7.9543605e-05
|
||||||
|
4000 100 0.00059774673 0.00059774673 0.00074849615 6.8190201e-05
|
||||||
|
4100 100 0.00052811986 0.00052811986 0.00067263919 5.012633e-05
|
||||||
|
4200 100 0.00049555855 0.00049555855 0.00061736675 4.9888372e-05
|
||||||
|
4300 100 0.00048274473 0.00048274473 0.00059050389 5.1381757e-05
|
||||||
|
4400 100 0.00047341333 0.00047341333 0.00058083446 5.02623e-05
|
||||||
|
4500 100 0.00046792237 0.00046792237 0.00057416894 4.9019652e-05
|
||||||
|
4600 100 0.00046035378 0.00046035378 0.00056694823 6.0353699e-05
|
||||||
|
4700 100 0.00038114933 0.00038114933 0.0004980117 6.5173515e-05
|
||||||
|
4800 100 0.0003783967 0.0003783967 0.00049488428 4.8463898e-05
|
||||||
|
4900 100 0.00027940611 0.00027940611 0.00041517649 5.0979155e-05
|
||||||
|
5000 100 0.00026071989 0.00026071989 0.00040045214 5.151673e-05
|
||||||
|
Loop time of 0.0799825 on 4 procs for 5000 steps with 100 atoms
|
||||||
|
|
||||||
|
Performance: 27005901.076 tau/day, 62513.660 timesteps/s
|
||||||
|
96.6% CPU use with 4 MPI tasks x no OpenMP threads
|
||||||
|
|
||||||
|
MPI task timing breakdown:
|
||||||
|
Section | min time | avg time | max time |%varavg| %total
|
||||||
|
---------------------------------------------------------------
|
||||||
|
Pair | 0.00093961 | 0.0032012 | 0.0054553 | 3.8 | 4.00
|
||||||
|
Neigh | 0.0032456 | 0.0046872 | 0.0061908 | 2.0 | 5.86
|
||||||
|
Comm | 0.014328 | 0.02121 | 0.029619 | 4.7 | 26.52
|
||||||
|
Output | 0.0011828 | 0.0014142 | 0.0015574 | 0.4 | 1.77
|
||||||
|
Modify | 0.002455 | 0.013876 | 0.026567 | 9.6 | 17.35
|
||||||
|
Other | | 0.03559 | | | 44.50
|
||||||
|
|
||||||
|
Nlocal: 25 ave 51 max 0 min
|
||||||
|
Histogram: 2 0 0 0 0 0 0 0 0 2
|
||||||
|
Nghost: 4.75 ave 11 max 0 min
|
||||||
|
Histogram: 2 0 0 0 0 0 0 1 0 1
|
||||||
|
Neighs: 39.5 ave 85 max 0 min
|
||||||
|
Histogram: 2 0 0 0 0 0 0 0 1 1
|
||||||
|
|
||||||
|
Total # of neighbors = 158
|
||||||
|
Ave neighs/atom = 1.58
|
||||||
|
Neighbor list builds = 305
|
||||||
|
Dangerous builds = 0
|
||||||
|
|
||||||
|
region container delete
|
||||||
|
variable theta equal (step-5000)*(4.0*PI/5000)
|
||||||
|
region container block -6 6 -6 6 -6 6 units box rotate v_theta 0 0 0 0 0 1
|
||||||
|
run 5000
|
||||||
|
Memory usage per processor = 5.16122 Mbytes
|
||||||
|
Step Atoms Temp c_1 c_2 Press
|
||||||
|
5000 100 0.00026071989 0.00026071989 0.00040045214 5.1497323e-05
|
||||||
|
5100 100 0.66352492 0.66352492 0.35750241 0.015948709
|
||||||
|
5200 100 0.6922229 0.6922229 0.37176131 0.011025479
|
||||||
|
5300 100 0.76307067 0.76307067 0.40325027 0.010979511
|
||||||
|
5400 100 0.83871418 0.83871418 0.43756084 0.012600965
|
||||||
|
5500 100 0.93090048 0.93090048 0.4817574 0.012306942
|
||||||
|
5600 100 0.98338567 0.98338567 0.50374148 0.015434412
|
||||||
|
5700 100 1.0455442 1.0455442 0.53265847 0.017959409
|
||||||
|
5800 100 1.1081511 1.1081511 0.56112842 0.018832417
|
||||||
|
5900 100 1.1724309 1.1724309 0.59276447 0.019257973
|
||||||
|
6000 100 1.1914813 1.1914813 0.60201665 0.019694573
|
||||||
|
6100 100 1.2417733 1.2417733 0.62578893 0.019616524
|
||||||
|
6200 100 1.2612898 1.2612898 0.63503847 0.020442394
|
||||||
|
6300 100 1.2657345 1.2657345 0.63714395 0.020498843
|
||||||
|
6400 100 1.2678009 1.2678009 0.63828941 0.019900919
|
||||||
|
6500 100 1.284156 1.284156 0.64724666 0.020147256
|
||||||
|
6600 100 1.3090278 1.3090278 0.65925035 0.02136883
|
||||||
|
6700 100 1.3122075 1.3122075 0.66136807 0.020782325
|
||||||
|
6800 100 1.3147107 1.3147107 0.66026206 0.022887611
|
||||||
|
6900 100 1.3185295 1.3185295 0.66157265 0.021249838
|
||||||
|
7000 100 1.3232771 1.3232771 0.66334852 0.021738995
|
||||||
|
7100 100 1.3375003 1.3375003 0.67017176 0.021997185
|
||||||
|
7200 100 1.3349835 1.3349835 0.66895884 0.022149977
|
||||||
|
7300 100 1.3388711 1.3388711 0.67061163 0.021662545
|
||||||
|
7400 100 1.338676 1.338676 0.67074642 0.021076102
|
||||||
|
7500 100 1.3409052 1.3409052 0.67205098 0.021664853
|
||||||
|
7600 100 1.3499236 1.3499236 0.67612412 0.021653422
|
||||||
|
7700 100 1.3479719 1.3479719 0.67510646 0.021873569
|
||||||
|
7800 100 1.3489138 1.3489138 0.67563223 0.021419315
|
||||||
|
7900 100 1.357018 1.357018 0.6795804 0.022201202
|
||||||
|
8000 100 1.3540513 1.3540513 0.67843711 0.02275761
|
||||||
|
8100 100 1.3560429 1.3560429 0.67947065 0.022421723
|
||||||
|
8200 100 1.3590694 1.3590694 0.6806094 0.022004213
|
||||||
|
8300 100 1.3592154 1.3592154 0.68083948 0.021923269
|
||||||
|
8400 100 1.3601392 1.3601392 0.68121418 0.022155184
|
||||||
|
8500 100 1.3622149 1.3622149 0.6824182 0.022126924
|
||||||
|
8600 100 1.3651697 1.3651697 0.68397342 0.022195287
|
||||||
|
8700 100 1.3679254 1.3679254 0.68540978 0.023609651
|
||||||
|
8800 100 1.3686254 1.3686254 0.68559712 0.02242291
|
||||||
|
8900 100 1.3761277 1.3761277 0.68897201 0.023594162
|
||||||
|
9000 100 1.379968 1.379968 0.69045216 0.022516846
|
||||||
|
9100 100 1.3784732 1.3784732 0.68955121 0.022836115
|
||||||
|
9200 100 1.376848 1.376848 0.6885551 0.02279321
|
||||||
|
9300 100 1.3799231 1.3799231 0.68964009 0.023105818
|
||||||
|
9400 100 1.3817992 1.3817992 0.69057466 0.023062265
|
||||||
|
9500 100 1.3836544 1.3836544 0.69156755 0.024363244
|
||||||
|
9600 100 1.388032 1.388032 0.69348762 0.024930983
|
||||||
|
9700 100 1.3943738 1.3943738 0.6965703 0.024448451
|
||||||
|
9800 100 1.3963094 1.3963094 0.6971039 0.02341203
|
||||||
|
9900 100 1.3995489 1.3995489 0.69881652 0.023502542
|
||||||
|
10000 100 1.3974742 1.3974742 0.69765474 0.02340004
|
||||||
|
Loop time of 0.18267 on 4 procs for 5000 steps with 100 atoms
|
||||||
|
|
||||||
|
Performance: 11824571.055 tau/day, 27371.692 timesteps/s
|
||||||
|
99.1% CPU use with 4 MPI tasks x no OpenMP threads
|
||||||
|
|
||||||
|
MPI task timing breakdown:
|
||||||
|
Section | min time | avg time | max time |%varavg| %total
|
||||||
|
---------------------------------------------------------------
|
||||||
|
Pair | 0.0010765 | 0.012038 | 0.023519 | 9.9 | 6.59
|
||||||
|
Neigh | 0.0057316 | 0.010541 | 0.015351 | 4.6 | 5.77
|
||||||
|
Comm | 0.0067229 | 0.017007 | 0.028509 | 7.8 | 9.31
|
||||||
|
Output | 0.0011928 | 0.002021 | 0.0027668 | 1.6 | 1.11
|
||||||
|
Modify | 0.009697 | 0.053707 | 0.098413 | 19.0 | 29.40
|
||||||
|
Other | | 0.08736 | | | 47.82
|
||||||
|
|
||||||
|
Nlocal: 25 ave 51 max 0 min
|
||||||
|
Histogram: 2 0 0 0 0 0 0 0 0 2
|
||||||
|
Nghost: 3.25 ave 8 max 0 min
|
||||||
|
Histogram: 2 0 0 0 0 0 1 0 0 1
|
||||||
|
Neighs: 46.75 ave 104 max 0 min
|
||||||
|
Histogram: 2 0 0 0 0 0 0 1 0 1
|
||||||
|
|
||||||
|
Total # of neighbors = 187
|
||||||
|
Ave neighs/atom = 1.87
|
||||||
|
Neighbor list builds = 633
|
||||||
|
Dangerous builds = 0
|
||||||
|
|
||||||
|
region container delete
|
||||||
|
region container block -6 6 -6 6 -6 6 units box
|
||||||
|
run 5000
|
||||||
|
Memory usage per processor = 5.16122 Mbytes
|
||||||
|
Step Atoms Temp c_1 c_2 Press
|
||||||
|
10000 100 1.3974742 1.3974742 0.69765474 0.023347613
|
||||||
|
10100 100 0.34944285 0.34944285 0.20251378 0.019176827
|
||||||
|
10200 100 0.22524385 0.22524385 0.14368424 0.0033260831
|
||||||
|
10300 100 0.15243438 0.15243438 0.11070165 0.0064816535
|
||||||
|
10400 100 0.1143586 0.1143586 0.087867032 0.0024091961
|
||||||
|
10500 100 0.092025102 0.092025102 0.071291506 0.0030683413
|
||||||
|
10600 100 0.071051442 0.071051442 0.05700858 0.00100243
|
||||||
|
10700 100 0.058346771 0.058346771 0.04843626 0.0006073275
|
||||||
|
10800 100 0.048700232 0.048700232 0.039550383 0.00091511006
|
||||||
|
10900 100 0.036880936 0.036880936 0.029482183 0.0011698854
|
||||||
|
11000 100 0.028768807 0.028768807 0.023865852 0.0011980794
|
||||||
|
11100 100 0.022823005 0.022823005 0.018819891 0.0004639259
|
||||||
|
11200 100 0.016954703 0.016954703 0.014075803 0.00085142865
|
||||||
|
11300 100 0.015359685 0.015359685 0.01295219 0.00026241662
|
||||||
|
11400 100 0.012748378 0.012748378 0.011085291 0.00045626939
|
||||||
|
11500 100 0.010464459 0.010464459 0.0087024732 0.00029325411
|
||||||
|
11600 100 0.0099186727 0.0099186727 0.0080127406 0.00031388584
|
||||||
|
11700 100 0.0088308874 0.0088308874 0.0072317369 0.00017850972
|
||||||
|
11800 100 0.0081740195 0.0081740195 0.0066522963 0.00012282618
|
||||||
|
11900 100 0.0079005289 0.0079005289 0.0063346391 0.00010630403
|
||||||
|
12000 100 0.0066277573 0.0066277573 0.0054122601 5.4791661e-05
|
||||||
|
12100 100 0.00567928 0.00567928 0.0047331385 9.2668647e-05
|
||||||
|
12200 100 0.005282803 0.005282803 0.0043827202 8.7820361e-05
|
||||||
|
12300 100 0.0051590302 0.0051590302 0.0042806737 6.5433983e-05
|
||||||
|
12400 100 0.0049013329 0.0049013329 0.0040882737 6.2007733e-05
|
||||||
|
12500 100 0.0044725745 0.0044725745 0.0037535523 6.1132729e-05
|
||||||
|
12600 100 0.0043131884 0.0043131884 0.0035845765 5.3375706e-05
|
||||||
|
12700 100 0.0042020236 0.0042020236 0.0034902096 0.0001192142
|
||||||
|
12800 100 0.0041367453 0.0041367453 0.003433341 0.00011052418
|
||||||
|
12900 100 0.0039862367 0.0039862367 0.0033026224 5.2674711e-05
|
||||||
|
13000 100 0.0033163769 0.0033163769 0.0028118123 5.9042575e-05
|
||||||
|
13100 100 0.0030645983 0.0030645983 0.002571872 4.9521551e-05
|
||||||
|
13200 100 0.002808301 0.002808301 0.0023652684 3.4748246e-05
|
||||||
|
13300 100 0.002556475 0.002556475 0.0021699595 0.00042840611
|
||||||
|
13400 100 0.0023430405 0.0023430405 0.0019913198 2.2687303e-05
|
||||||
|
13500 100 0.0021422817 0.0021422817 0.0018017112 -6.7761855e-06
|
||||||
|
13600 100 0.0020993702 0.0020993702 0.001749657 2.5979707e-05
|
||||||
|
13700 100 0.0019871396 0.0019871396 0.0016647634 5.754995e-05
|
||||||
|
13800 100 0.0017311886 0.0017311886 0.0014696399 2.1585018e-05
|
||||||
|
13900 100 0.0016249641 0.0016249641 0.0013982224 2.0108931e-05
|
||||||
|
14000 100 0.0015874763 0.0015874763 0.0013613318 0.00018348921
|
||||||
|
14100 100 0.0013772541 0.0013772541 0.0012193388 1.9336869e-05
|
||||||
|
14200 100 0.0013587865 0.0013587865 0.0012054213 1.807845e-05
|
||||||
|
14300 100 0.0011824329 0.0011824329 0.0010348168 0.00017307518
|
||||||
|
14400 100 0.0011387278 0.0011387278 0.0010010725 1.4091757e-05
|
||||||
|
14500 100 0.0010441599 0.0010441599 0.00092205881 1.3630652e-05
|
||||||
|
14600 100 0.00096839518 0.00096839518 0.00086828535 1.2437299e-05
|
||||||
|
14700 100 0.00094215882 0.00094215882 0.00084418599 5.3989122e-05
|
||||||
|
14800 100 0.00077297853 0.00077297853 0.00070382005 8.5049867e-06
|
||||||
|
14900 100 0.00072181281 0.00072181281 0.00066110432 8.9324335e-06
|
||||||
|
15000 100 0.00070122327 0.00070122327 0.00063826734 3.4876262e-05
|
||||||
|
Loop time of 0.0815294 on 4 procs for 5000 steps with 100 atoms
|
||||||
|
|
||||||
|
Performance: 26493517.176 tau/day, 61327.586 timesteps/s
|
||||||
|
97.8% CPU use with 4 MPI tasks x no OpenMP threads
|
||||||
|
|
||||||
|
MPI task timing breakdown:
|
||||||
|
Section | min time | avg time | max time |%varavg| %total
|
||||||
|
---------------------------------------------------------------
|
||||||
|
Pair | 0.00076294 | 0.0033154 | 0.0062585 | 4.3 | 4.07
|
||||||
|
Neigh | 0.0010953 | 0.0020078 | 0.002914 | 2.0 | 2.46
|
||||||
|
Comm | 0.0021389 | 0.012184 | 0.023433 | 9.1 | 14.94
|
||||||
|
Output | 0.0011332 | 0.0014591 | 0.0017147 | 0.7 | 1.79
|
||||||
|
Modify | 0.00083971 | 0.017889 | 0.035367 | 12.7 | 21.94
|
||||||
|
Other | | 0.04467 | | | 54.79
|
||||||
|
|
||||||
|
Nlocal: 25 ave 54 max 0 min
|
||||||
|
Histogram: 2 0 0 0 0 0 0 0 1 1
|
||||||
|
Nghost: 3.75 ave 8 max 0 min
|
||||||
|
Histogram: 2 0 0 0 0 0 0 0 1 1
|
||||||
|
Neighs: 37.5 ave 97 max 0 min
|
||||||
|
Histogram: 2 0 0 0 0 1 0 0 0 1
|
||||||
|
|
||||||
|
Total # of neighbors = 150
|
||||||
|
Ave neighs/atom = 1.5
|
||||||
|
Neighbor list builds = 120
|
||||||
|
Dangerous builds = 0
|
||||||
|
|
||||||
|
region container delete
|
||||||
|
variable theta equal (step-15000)*(4.0*PI/5000)
|
||||||
|
region container block -6 6 -6 6 -6 6 units box rotate v_theta 0 0 0 1 1 1
|
||||||
|
run 5000
|
||||||
|
Memory usage per processor = 5.16122 Mbytes
|
||||||
|
Step Atoms Temp c_1 c_2 Press
|
||||||
|
15000 100 0.00070122327 0.00070122327 0.00063826734 3.4742207e-05
|
||||||
|
15100 100 1.1981004 1.1981004 0.74046013 0.017300203
|
||||||
|
15200 100 1.2197457 1.2197457 0.75847511 0.016724637
|
||||||
|
15300 100 1.1794198 1.1794198 0.77076582 0.017228755
|
||||||
|
15400 100 1.4027714 1.4027714 0.87950036 0.021028602
|
||||||
|
15500 100 1.5514702 1.5514702 0.95040716 0.019935207
|
||||||
|
15600 100 1.8360404 1.8360404 1.0987247 0.02494663
|
||||||
|
15700 100 2.0317625 2.0317625 1.2004001 0.029286087
|
||||||
|
15800 100 2.0478625 2.0478625 1.189893 0.031660426
|
||||||
|
15900 100 2.1289888 2.1289888 1.2083316 0.028754408
|
||||||
|
16000 100 2.2261493 2.2261493 1.2550891 0.030665647
|
||||||
|
16100 100 2.3005184 2.3005184 1.29238 0.036511242
|
||||||
|
16200 100 2.4515818 2.4515818 1.3563253 0.033787104
|
||||||
|
16300 100 2.4524614 2.4524614 1.3571527 0.031905963
|
||||||
|
16400 100 2.5592541 2.5592541 1.405001 0.035688651
|
||||||
|
16500 100 2.5311864 2.5311864 1.3918694 0.032451265
|
||||||
|
16600 100 2.6471904 2.6471904 1.4481739 0.034763978
|
||||||
|
16700 100 2.7024085 2.7024085 1.4785065 0.037514299
|
||||||
|
16800 100 2.8116979 2.8116979 1.5403269 0.03585152
|
||||||
|
16900 100 2.9095374 2.9095374 1.5962283 0.038244982
|
||||||
|
17000 100 2.9228985 2.9228985 1.5978628 0.037971615
|
||||||
|
17100 100 2.983589 2.983589 1.6205713 0.038332341
|
||||||
|
17200 100 3.1245984 3.1245984 1.6925827 0.042532223
|
||||||
|
17300 100 3.1060575 3.1060575 1.6713928 0.052589575
|
||||||
|
17400 100 3.2494904 3.2494904 1.7567188 0.044783721
|
||||||
|
17500 100 3.2313349 3.2313349 1.7549177 0.044959213
|
||||||
|
17600 100 3.3928412 3.3928412 1.822978 0.052512199
|
||||||
|
17700 100 3.3064729 3.3064729 1.7924768 0.046624738
|
||||||
|
17800 100 3.1907518 3.1907518 1.7406131 0.042864325
|
||||||
|
17900 100 3.0224556 3.0224556 1.6641648 0.040151025
|
||||||
|
18000 100 3.105271 3.105271 1.7045599 0.047137803
|
||||||
|
18100 100 3.0293425 3.0293425 1.6626024 0.04198758
|
||||||
|
18200 100 3.139773 3.139773 1.7310307 0.040137164
|
||||||
|
18300 100 2.9732894 2.9732894 1.6555933 0.03777758
|
||||||
|
18400 100 3.1250324 3.1250324 1.739812 0.038542298
|
||||||
|
18500 100 3.1687407 3.1687407 1.7593494 0.041591022
|
||||||
|
18600 100 3.2880821 3.2880821 1.8169373 0.042503015
|
||||||
|
18700 100 3.4877047 3.4877047 1.9049979 0.048156272
|
||||||
|
18800 100 3.7982973 3.7982973 2.055323 0.049805341
|
||||||
|
18900 100 3.9922267 3.9922267 2.1260665 0.062688073
|
||||||
|
19000 100 3.8620284 3.8620284 2.0652184 0.064418518
|
||||||
|
19100 100 3.8757665 3.8757665 2.0615465 0.058600317
|
||||||
|
19200 100 3.9425495 3.9425495 2.1030375 0.053714175
|
||||||
|
19300 100 3.8589133 3.8589133 2.0485568 0.05531747
|
||||||
|
19400 100 3.9202395 3.9202395 2.0904529 0.056324297
|
||||||
|
19500 100 3.9748628 3.9748628 2.1114492 0.055590699
|
||||||
|
19600 100 3.8876771 3.8876771 2.0918436 0.052415532
|
||||||
|
19700 100 3.8975921 3.8975921 2.0755799 0.050647718
|
||||||
|
19800 100 3.7488333 3.7488333 2.0024562 0.056966734
|
||||||
|
19900 100 3.7818574 3.7818574 2.00915 0.050079148
|
||||||
|
20000 100 3.4510736 3.4510736 1.8525818 0.053548452
|
||||||
|
Loop time of 0.156607 on 4 procs for 5000 steps with 100 atoms
|
||||||
|
|
||||||
|
Performance: 13792452.627 tau/day, 31926.974 timesteps/s
|
||||||
|
98.5% CPU use with 4 MPI tasks x no OpenMP threads
|
||||||
|
|
||||||
|
MPI task timing breakdown:
|
||||||
|
Section | min time | avg time | max time |%varavg| %total
|
||||||
|
---------------------------------------------------------------
|
||||||
|
Pair | 0.0030923 | 0.0049732 | 0.0071678 | 2.1 | 3.18
|
||||||
|
Neigh | 0.012225 | 0.015592 | 0.017859 | 1.7 | 9.96
|
||||||
|
Comm | 0.034876 | 0.037526 | 0.040807 | 1.1 | 23.96
|
||||||
|
Output | 0.0013812 | 0.0015668 | 0.0017419 | 0.3 | 1.00
|
||||||
|
Modify | 0.026932 | 0.044011 | 0.054787 | 5.0 | 28.10
|
||||||
|
Other | | 0.05294 | | | 33.80
|
||||||
|
|
||||||
|
Nlocal: 25 ave 41 max 12 min
|
||||||
|
Histogram: 1 0 0 1 1 0 0 0 0 1
|
||||||
|
Nghost: 3.25 ave 6 max 1 min
|
||||||
|
Histogram: 1 0 1 0 0 0 1 0 0 1
|
||||||
|
Neighs: 35.75 ave 59 max 9 min
|
||||||
|
Histogram: 1 0 0 0 0 1 1 0 0 1
|
||||||
|
|
||||||
|
Total # of neighbors = 143
|
||||||
|
Ave neighs/atom = 1.43
|
||||||
|
Neighbor list builds = 917
|
||||||
|
Dangerous builds = 0
|
||||||
|
|
||||||
|
region container delete
|
||||||
|
region container block -6 6 -6 6 -6 6 units box
|
||||||
|
run 5000
|
||||||
|
Memory usage per processor = 5.16122 Mbytes
|
||||||
|
Step Atoms Temp c_1 c_2 Press
|
||||||
|
20000 100 3.4510736 3.4510736 1.8525818 0.053182767
|
||||||
|
20100 100 0.99241675 0.99241675 0.61590164 0.015233656
|
||||||
|
20200 100 0.92799489 0.92799489 0.55540992 0.011885237
|
||||||
|
20300 100 0.9171573 0.9171573 0.54477252 0.012926388
|
||||||
|
20400 100 0.86718407 0.86718407 0.5145422 0.011384414
|
||||||
|
20500 100 0.84470122 0.84470122 0.50181203 0.010482207
|
||||||
|
20600 100 0.93025469 0.93025469 0.53939952 0.011377044
|
||||||
|
20700 100 0.96631348 0.96631348 0.55772027 0.015287231
|
||||||
|
20800 100 0.90708015 0.90708015 0.52037018 0.014854537
|
||||||
|
20900 100 0.73319001 0.73319001 0.42824847 0.0092980012
|
||||||
|
21000 100 0.3371096 0.3371096 0.21272171 0.0061783554
|
||||||
|
21100 100 0.21771022 0.21771022 0.14128887 0.0082147558
|
||||||
|
21200 100 0.18133275 0.18133275 0.11945636 0.0055722731
|
||||||
|
21300 100 0.17117199 0.17117199 0.11048263 0.0027980106
|
||||||
|
21400 100 0.15741047 0.15741047 0.10346676 0.0023057723
|
||||||
|
21500 100 0.10045855 0.10045855 0.069905343 0.0023941181
|
||||||
|
21600 100 0.066094864 0.066094864 0.051285108 0.0022519002
|
||||||
|
21700 100 0.048622069 0.048622069 0.040662255 0.00073951939
|
||||||
|
21800 100 0.046829799 0.046829799 0.037431722 0.0015913976
|
||||||
|
21900 100 0.025308514 0.025308514 0.02092076 0.00064225773
|
||||||
|
22000 100 0.016326886 0.016326886 0.013588504 0.00087416572
|
||||||
|
22100 100 0.011892981 0.011892981 0.010417133 0.00080132313
|
||||||
|
22200 100 0.011974602 0.011974602 0.010342276 0.00044437732
|
||||||
|
22300 100 0.012567486 0.012567486 0.010294969 0.00048413872
|
||||||
|
22400 100 0.011676022 0.011676022 0.0091714238 0.00066567365
|
||||||
|
22500 100 0.0098737136 0.0098737136 0.0079252142 0.00024081335
|
||||||
|
22600 100 0.0052495523 0.0052495523 0.0047802341 0.00029167814
|
||||||
|
22700 100 0.0049396543 0.0049396543 0.0043570686 0.00019793167
|
||||||
|
22800 100 0.004469254 0.004469254 0.0038657445 0.00052965165
|
||||||
|
22900 100 0.0043837877 0.0043837877 0.0034611363 0.00045595698
|
||||||
|
23000 100 0.003439309 0.003439309 0.0028031344 0.00025784869
|
||||||
|
23100 100 0.0034805091 0.0034805091 0.0027537344 0.00012746906
|
||||||
|
23200 100 0.0045502061 0.0045502061 0.0032298328 0.00024006432
|
||||||
|
23300 100 0.0028553043 0.0028553043 0.0023107483 0.00012803066
|
||||||
|
23400 100 0.0022736412 0.0022736412 0.0018560302 0.0002706771
|
||||||
|
23500 100 0.0020966521 0.0020966521 0.0017106541 0.00014239612
|
||||||
|
23600 100 0.0018760993 0.0018760993 0.0015415318 0.00010892634
|
||||||
|
23700 100 0.0022362451 0.0022362451 0.0017014519 0.00012547256
|
||||||
|
23800 100 0.0017603403 0.0017603403 0.0014681398 0.00023372731
|
||||||
|
23900 100 0.0023396747 0.0023396747 0.0016700312 0.00017014305
|
||||||
|
24000 100 0.0012059144 0.0012059144 0.0009982224 3.6215959e-05
|
||||||
|
24100 100 0.0011739433 0.0011739433 0.00097155852 3.6169918e-05
|
||||||
|
24200 100 0.0011071139 0.0011071139 0.00092095478 8.8000847e-05
|
||||||
|
24300 100 0.0011078659 0.0011078659 0.00092073833 4.8706222e-05
|
||||||
|
24400 100 0.0011037562 0.0011037562 0.00091673546 3.7548502e-05
|
||||||
|
24500 100 0.00098422752 0.00098422752 0.00083054499 9.1151844e-05
|
||||||
|
24600 100 0.00097403646 0.00097403646 0.00082364881 5.0914687e-05
|
||||||
|
24700 100 0.00093082012 0.00093082012 0.00079047801 3.2230016e-05
|
||||||
|
24800 100 0.0009138973 0.0009138973 0.00075880177 2.8780789e-05
|
||||||
|
24900 100 0.0012881027 0.0012881027 0.00093025416 1.6385252e-05
|
||||||
|
25000 100 0.00076099168 0.00076099168 0.00065175575 9.417272e-06
|
||||||
|
Loop time of 0.0846543 on 4 procs for 5000 steps with 100 atoms
|
||||||
|
|
||||||
|
Performance: 25515528.493 tau/day, 59063.723 timesteps/s
|
||||||
|
98.9% CPU use with 4 MPI tasks x no OpenMP threads
|
||||||
|
|
||||||
|
MPI task timing breakdown:
|
||||||
|
Section | min time | avg time | max time |%varavg| %total
|
||||||
|
---------------------------------------------------------------
|
||||||
|
Pair | 0.0010469 | 0.0037468 | 0.0067947 | 4.3 | 4.43
|
||||||
|
Neigh | 0.0032442 | 0.0047541 | 0.0065064 | 2.0 | 5.62
|
||||||
|
Comm | 0.0085762 | 0.016923 | 0.024509 | 5.8 | 19.99
|
||||||
|
Output | 0.0011523 | 0.0014572 | 0.0016789 | 0.6 | 1.72
|
||||||
|
Modify | 0.0017715 | 0.016296 | 0.031399 | 11.1 | 19.25
|
||||||
|
Other | | 0.04148 | | | 49.00
|
||||||
|
|
||||||
|
Nlocal: 25 ave 50 max 0 min
|
||||||
|
Histogram: 2 0 0 0 0 0 0 0 0 2
|
||||||
|
Nghost: 6 ave 13 max 0 min
|
||||||
|
Histogram: 2 0 0 0 0 0 0 0 1 1
|
||||||
|
Neighs: 39 ave 80 max 0 min
|
||||||
|
Histogram: 2 0 0 0 0 0 0 0 0 2
|
||||||
|
|
||||||
|
Total # of neighbors = 156
|
||||||
|
Ave neighs/atom = 1.56
|
||||||
|
Neighbor list builds = 284
|
||||||
|
Dangerous builds = 0
|
||||||
|
Total wall time: 0:00:00
|
||||||
608
examples/granregion/log.6Oct16.granregion.funnel.g++.1
Normal file
608
examples/granregion/log.6Oct16.granregion.funnel.g++.1
Normal file
@ -0,0 +1,608 @@
|
|||||||
|
LAMMPS (5 Oct 2016)
|
||||||
|
# pour particles into cone-shaped funnel, settle them, let them run out bottom
|
||||||
|
|
||||||
|
variable name string funnel_pour
|
||||||
|
|
||||||
|
thermo_modify flush yes
|
||||||
|
units si
|
||||||
|
variable PI equal 3.141592653589
|
||||||
|
variable seed equal 14314
|
||||||
|
|
||||||
|
###############################################
|
||||||
|
# Geometry-related parameters
|
||||||
|
###############################################
|
||||||
|
|
||||||
|
variable xlo equal 10
|
||||||
|
variable xhi equal 40
|
||||||
|
variable ylo equal 10
|
||||||
|
variable yhi equal 40
|
||||||
|
variable zlo equal -20
|
||||||
|
variable zhi equal 50
|
||||||
|
|
||||||
|
variable xc equal 25
|
||||||
|
variable yc equal 25
|
||||||
|
|
||||||
|
variable zconehi equal 50
|
||||||
|
variable zconelo equal 10
|
||||||
|
variable zcyllo equal 0
|
||||||
|
variable radconelo equal 2
|
||||||
|
variable radconehi equal 20
|
||||||
|
|
||||||
|
################################################
|
||||||
|
# Particle sizes
|
||||||
|
################################################
|
||||||
|
|
||||||
|
variable rlo equal 0.25
|
||||||
|
variable rhi equal 0.5
|
||||||
|
variable dlo equal 2.0*${rlo}
|
||||||
|
variable dlo equal 2.0*0.25
|
||||||
|
variable dhi equal 2.0*${rhi}
|
||||||
|
variable dhi equal 2.0*0.5
|
||||||
|
|
||||||
|
variable skin equal ${rhi}
|
||||||
|
variable skin equal 0.5
|
||||||
|
|
||||||
|
###############################################
|
||||||
|
# Granular contact parameters
|
||||||
|
###############################################
|
||||||
|
|
||||||
|
variable coeffRes equal 0.1
|
||||||
|
variable coeffFric equal 0.5
|
||||||
|
|
||||||
|
variable density equal 1.0
|
||||||
|
variable EYoung equal 10^5
|
||||||
|
variable Poisson equal 2.0/7.0
|
||||||
|
variable GShear equal ${EYoung}/(2*(1+${Poisson}))
|
||||||
|
variable GShear equal 100000/(2*(1+${Poisson}))
|
||||||
|
variable GShear equal 100000/(2*(1+0.285714285714286))
|
||||||
|
|
||||||
|
variable gravity equal 1.0
|
||||||
|
|
||||||
|
variable reff equal 0.5*(${rhi}+${rlo})
|
||||||
|
variable reff equal 0.5*(0.5+${rlo})
|
||||||
|
variable reff equal 0.5*(0.5+0.25)
|
||||||
|
variable meff equal ${density}*4.0/3.0*${PI}*${reff}^3
|
||||||
|
variable meff equal 1*4.0/3.0*${PI}*${reff}^3
|
||||||
|
variable meff equal 1*4.0/3.0*3.141592653589*${reff}^3
|
||||||
|
variable meff equal 1*4.0/3.0*3.141592653589*0.375^3
|
||||||
|
variable min_mass equal ${density}*4.0/3.0*${PI}*${rlo}*${rlo}*${rlo}
|
||||||
|
variable min_mass equal 1*4.0/3.0*${PI}*${rlo}*${rlo}*${rlo}
|
||||||
|
variable min_mass equal 1*4.0/3.0*3.141592653589*${rlo}*${rlo}*${rlo}
|
||||||
|
variable min_mass equal 1*4.0/3.0*3.141592653589*0.25*${rlo}*${rlo}
|
||||||
|
variable min_mass equal 1*4.0/3.0*3.141592653589*0.25*0.25*${rlo}
|
||||||
|
variable min_mass equal 1*4.0/3.0*3.141592653589*0.25*0.25*0.25
|
||||||
|
variable max_mass equal ${density}*4.0/3.0*${PI}*${rhi}*${rhi}*${rhi}
|
||||||
|
variable max_mass equal 1*4.0/3.0*${PI}*${rhi}*${rhi}*${rhi}
|
||||||
|
variable max_mass equal 1*4.0/3.0*3.141592653589*${rhi}*${rhi}*${rhi}
|
||||||
|
variable max_mass equal 1*4.0/3.0*3.141592653589*0.5*${rhi}*${rhi}
|
||||||
|
variable max_mass equal 1*4.0/3.0*3.141592653589*0.5*0.5*${rhi}
|
||||||
|
variable max_mass equal 1*4.0/3.0*3.141592653589*0.5*0.5*0.5
|
||||||
|
|
||||||
|
## Typical way to set kn, kt, etc.:
|
||||||
|
variable kn equal 4.0*${GShear}/(3*(1-${Poisson}))
|
||||||
|
variable kn equal 4.0*38888.8888888889/(3*(1-${Poisson}))
|
||||||
|
variable kn equal 4.0*38888.8888888889/(3*(1-0.285714285714286))
|
||||||
|
variable kt equal 4.0*${GShear}/(2-${Poisson})
|
||||||
|
variable kt equal 4.0*38888.8888888889/(2-${Poisson})
|
||||||
|
variable kt equal 4.0*38888.8888888889/(2-0.285714285714286)
|
||||||
|
|
||||||
|
variable a equal (-2.0*log(${coeffRes})/${PI})^2
|
||||||
|
variable a equal (-2.0*log(0.1)/${PI})^2
|
||||||
|
variable a equal (-2.0*log(0.1)/3.141592653589)^2
|
||||||
|
variable gamma_n equal sqrt($a*2*${kn}/${min_mass}/(1+0.25*$a))
|
||||||
|
variable gamma_n equal sqrt(0.405284734569556*2*${kn}/${min_mass}/(1+0.25*$a))
|
||||||
|
variable gamma_n equal sqrt(0.405284734569556*2*72592.5925925926/${min_mass}/(1+0.25*$a))
|
||||||
|
variable gamma_n equal sqrt(0.405284734569556*2*72592.5925925926/0.0654498469497708/(1+0.25*$a))
|
||||||
|
variable gamma_n equal sqrt(0.405284734569556*2*72592.5925925926/0.0654498469497708/(1+0.25*0.405284734569556))
|
||||||
|
variable gamma_t equal ${gamma_n}*0.5
|
||||||
|
variable gamma_t equal 903.503751814138*0.5
|
||||||
|
|
||||||
|
variable tcol equal ${PI}/sqrt(2*${kn}/${min_mass}-${gamma_n}/4.0)
|
||||||
|
variable tcol equal 3.141592653589/sqrt(2*${kn}/${min_mass}-${gamma_n}/4.0)
|
||||||
|
variable tcol equal 3.141592653589/sqrt(2*72592.5925925926/${min_mass}-${gamma_n}/4.0)
|
||||||
|
variable tcol equal 3.141592653589/sqrt(2*72592.5925925926/0.0654498469497708-${gamma_n}/4.0)
|
||||||
|
variable tcol equal 3.141592653589/sqrt(2*72592.5925925926/0.0654498469497708-903.503751814138/4.0)
|
||||||
|
|
||||||
|
variable dt equal ${tcol}*0.05
|
||||||
|
variable dt equal 0.00210943016014969*0.05
|
||||||
|
timestep ${dt}
|
||||||
|
timestep 0.000105471508007485
|
||||||
|
|
||||||
|
###############################################
|
||||||
|
variable dumpfreq equal 1000
|
||||||
|
variable logfreq equal 1000
|
||||||
|
|
||||||
|
newton off
|
||||||
|
atom_style sphere
|
||||||
|
|
||||||
|
boundary p p f
|
||||||
|
|
||||||
|
region boxreg block ${xlo} ${xhi} ${ylo} ${yhi} ${zlo} ${zhi}
|
||||||
|
region boxreg block 10 ${xhi} ${ylo} ${yhi} ${zlo} ${zhi}
|
||||||
|
region boxreg block 10 40 ${ylo} ${yhi} ${zlo} ${zhi}
|
||||||
|
region boxreg block 10 40 10 ${yhi} ${zlo} ${zhi}
|
||||||
|
region boxreg block 10 40 10 40 ${zlo} ${zhi}
|
||||||
|
region boxreg block 10 40 10 40 -20 ${zhi}
|
||||||
|
region boxreg block 10 40 10 40 -20 50
|
||||||
|
create_box 1 boxreg
|
||||||
|
Created orthogonal box = (10 10 -20) to (40 40 50)
|
||||||
|
1 by 1 by 1 MPI processor grid
|
||||||
|
|
||||||
|
pair_style gran/hertz/history ${kn} ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1
|
||||||
|
pair_style gran/hertz/history 72592.5925925926 ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1
|
||||||
|
pair_style gran/hertz/history 72592.5925925926 90740.7407407408 ${gamma_n} ${gamma_t} ${coeffFric} 1
|
||||||
|
pair_style gran/hertz/history 72592.5925925926 90740.7407407408 903.503751814138 ${gamma_t} ${coeffFric} 1
|
||||||
|
pair_style gran/hertz/history 72592.5925925926 90740.7407407408 903.503751814138 451.751875907069 ${coeffFric} 1
|
||||||
|
pair_style gran/hertz/history 72592.5925925926 90740.7407407408 903.503751814138 451.751875907069 0.5 1
|
||||||
|
pair_coeff * *
|
||||||
|
|
||||||
|
neighbor ${skin} bin
|
||||||
|
neighbor 0.5 bin
|
||||||
|
thermo ${logfreq}
|
||||||
|
thermo 1000
|
||||||
|
|
||||||
|
comm_style brick
|
||||||
|
comm_modify mode multi group all vel yes
|
||||||
|
balance 1.1 shift xyz 20 1.1
|
||||||
|
Neighbor list info ...
|
||||||
|
2 neighbor list requests
|
||||||
|
update every 1 steps, delay 10 steps, check yes
|
||||||
|
max neighbors/atom: 2000, page size: 100000
|
||||||
|
master list distance cutoff = 0
|
||||||
|
ghost atom cutoff = 0
|
||||||
|
binsize = 30 -> bins = 1 1 3
|
||||||
|
fix bal all balance 10000 1.1 shift xyz 20 1.01
|
||||||
|
|
||||||
|
####################### Options specific to pouring #########################
|
||||||
|
|
||||||
|
# insertion region for fix/pour
|
||||||
|
|
||||||
|
region insreg cylinder z ${xc} ${yc} 10 30 50 side in units box
|
||||||
|
region insreg cylinder z 25 ${yc} 10 30 50 side in units box
|
||||||
|
region insreg cylinder z 25 25 10 30 50 side in units box
|
||||||
|
|
||||||
|
# define cone and cylinder regions - see lammps doc on region command
|
||||||
|
# note new open options
|
||||||
|
|
||||||
|
region cylreg cylinder z ${xc} ${yc} ${radconelo} ${zcyllo} ${zconelo} side in units box open 2 #Top is open
|
||||||
|
region cylreg cylinder z 25 ${yc} ${radconelo} ${zcyllo} ${zconelo} side in units box open 2
|
||||||
|
region cylreg cylinder z 25 25 ${radconelo} ${zcyllo} ${zconelo} side in units box open 2
|
||||||
|
region cylreg cylinder z 25 25 2 ${zcyllo} ${zconelo} side in units box open 2
|
||||||
|
region cylreg cylinder z 25 25 2 0 ${zconelo} side in units box open 2
|
||||||
|
region cylreg cylinder z 25 25 2 0 10 side in units box open 2
|
||||||
|
|
||||||
|
region conereg cone z ${xc} ${yc} ${radconelo} ${radconehi} ${zconelo} ${zconehi} side in units box open 1 open 2 #Bottom and top are open
|
||||||
|
region conereg cone z 25 ${yc} ${radconelo} ${radconehi} ${zconelo} ${zconehi} side in units box open 1 open 2
|
||||||
|
region conereg cone z 25 25 ${radconelo} ${radconehi} ${zconelo} ${zconehi} side in units box open 1 open 2
|
||||||
|
region conereg cone z 25 25 2 ${radconehi} ${zconelo} ${zconehi} side in units box open 1 open 2
|
||||||
|
region conereg cone z 25 25 2 20 ${zconelo} ${zconehi} side in units box open 1 open 2
|
||||||
|
region conereg cone z 25 25 2 20 10 ${zconehi} side in units box open 1 open 2
|
||||||
|
region conereg cone z 25 25 2 20 10 50 side in units box open 1 open 2
|
||||||
|
|
||||||
|
region hopreg union 2 conereg cylreg
|
||||||
|
|
||||||
|
fix grav all gravity ${gravity} vector 0 0 -1
|
||||||
|
fix grav all gravity 1 vector 0 0 -1
|
||||||
|
fix 1 all nve/sphere
|
||||||
|
|
||||||
|
|
||||||
|
fix hopper3 all wall/gran/region hertz/history ${kn} ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 region hopreg
|
||||||
|
fix hopper3 all wall/gran/region hertz/history 72592.5925925926 ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 region hopreg
|
||||||
|
fix hopper3 all wall/gran/region hertz/history 72592.5925925926 90740.7407407408 ${gamma_n} ${gamma_t} ${coeffFric} 1 region hopreg
|
||||||
|
fix hopper3 all wall/gran/region hertz/history 72592.5925925926 90740.7407407408 903.503751814138 ${gamma_t} ${coeffFric} 1 region hopreg
|
||||||
|
fix hopper3 all wall/gran/region hertz/history 72592.5925925926 90740.7407407408 903.503751814138 451.751875907069 ${coeffFric} 1 region hopreg
|
||||||
|
fix hopper3 all wall/gran/region hertz/history 72592.5925925926 90740.7407407408 903.503751814138 451.751875907069 0.5 1 region hopreg
|
||||||
|
|
||||||
|
fix ins all pour 2000 1 42424 region insreg diam range ${dlo} ${dhi} dens ${density} ${density}
|
||||||
|
fix ins all pour 2000 1 42424 region insreg diam range 0.5 ${dhi} dens ${density} ${density}
|
||||||
|
fix ins all pour 2000 1 42424 region insreg diam range 0.5 1 dens ${density} ${density}
|
||||||
|
fix ins all pour 2000 1 42424 region insreg diam range 0.5 1 dens 1 ${density}
|
||||||
|
fix ins all pour 2000 1 42424 region insreg diam range 0.5 1 dens 1 1
|
||||||
|
Particle insertion: 3000 every 59965 steps, 2000 by step 1
|
||||||
|
|
||||||
|
#dump 1 all custom ${dumpfreq} ${name}.dump # id type mass diameter x y z
|
||||||
|
|
||||||
|
#dump 2 all image 4000 image.*.jpg type type # axes yes 0.8 0.02 view 60 -30 zoom 3.0 # box no 0.0 axes no 0.0 0.0
|
||||||
|
#dump_modify 2 pad 6
|
||||||
|
|
||||||
|
thermo_style custom step cpu atoms ke
|
||||||
|
WARNING: New thermo_style command, previous thermo_modify settings will be lost (../output.cpp:690)
|
||||||
|
thermo_modify flush yes lost warn
|
||||||
|
|
||||||
|
# Initial run to fill up the cone
|
||||||
|
|
||||||
|
run 20000
|
||||||
|
Neighbor list info ...
|
||||||
|
2 neighbor list requests
|
||||||
|
update every 1 steps, delay 10 steps, check yes
|
||||||
|
max neighbors/atom: 2000, page size: 100000
|
||||||
|
master list distance cutoff = 1.5
|
||||||
|
ghost atom cutoff = 1.5
|
||||||
|
binsize = 0.75 -> bins = 40 40 94
|
||||||
|
Memory usage per processor = 3.59417 Mbytes
|
||||||
|
Step CPU Atoms KinEng
|
||||||
|
0 0 0 -0
|
||||||
|
1000 0.54582715 2000 -0
|
||||||
|
2000 0.93155909 2000 -0
|
||||||
|
3000 1.3159981 2000 -0
|
||||||
|
4000 1.697911 2000 -0
|
||||||
|
5000 2.080133 2000 -0
|
||||||
|
6000 2.461525 2000 -0
|
||||||
|
7000 2.842278 2000 -0
|
||||||
|
8000 3.222302 2000 -0
|
||||||
|
9000 3.6018171 2000 -0
|
||||||
|
10000 3.9843922 2000 -0
|
||||||
|
11000 4.363066 2000 -0
|
||||||
|
12000 4.743022 2000 -0
|
||||||
|
13000 5.121953 2000 -0
|
||||||
|
14000 5.5021431 2000 -0
|
||||||
|
15000 5.8807089 2000 -0
|
||||||
|
16000 6.2604752 2000 -0
|
||||||
|
17000 6.640244 2000 -0
|
||||||
|
18000 7.0199981 2000 -0
|
||||||
|
19000 7.40029 2000 -0
|
||||||
|
20000 7.7834539 2000 -0
|
||||||
|
Loop time of 7.78348 on 1 procs for 20000 steps with 2000 atoms
|
||||||
|
|
||||||
|
99.9% CPU use with 1 MPI tasks x no OpenMP threads
|
||||||
|
|
||||||
|
MPI task timing breakdown:
|
||||||
|
Section | min time | avg time | max time |%varavg| %total
|
||||||
|
---------------------------------------------------------------
|
||||||
|
Pair | 0.64588 | 0.64588 | 0.64588 | 0.0 | 8.30
|
||||||
|
Neigh | 0.097229 | 0.097229 | 0.097229 | 0.0 | 1.25
|
||||||
|
Comm | 0.011505 | 0.011505 | 0.011505 | 0.0 | 0.15
|
||||||
|
Output | 0.00041127 | 0.00041127 | 0.00041127 | 0.0 | 0.01
|
||||||
|
Modify | 6.8117 | 6.8117 | 6.8117 | 0.0 | 87.51
|
||||||
|
Other | | 0.2168 | | | 2.79
|
||||||
|
|
||||||
|
Nlocal: 2000 ave 2000 max 2000 min
|
||||||
|
Histogram: 1 0 0 0 0 0 0 0 0 0
|
||||||
|
Nghost: 0 ave 0 max 0 min
|
||||||
|
Histogram: 1 0 0 0 0 0 0 0 0 0
|
||||||
|
Neighs: 1537 ave 1537 max 1537 min
|
||||||
|
Histogram: 1 0 0 0 0 0 0 0 0 0
|
||||||
|
|
||||||
|
Total # of neighbors = 1537
|
||||||
|
Ave neighs/atom = 0.7685
|
||||||
|
Neighbor list builds = 69
|
||||||
|
Dangerous builds = 0
|
||||||
|
unfix ins
|
||||||
|
run 150000
|
||||||
|
Neighbor list info ...
|
||||||
|
2 neighbor list requests
|
||||||
|
update every 1 steps, delay 10 steps, check yes
|
||||||
|
max neighbors/atom: 2000, page size: 100000
|
||||||
|
master list distance cutoff = 1.49993
|
||||||
|
ghost atom cutoff = 1.49993
|
||||||
|
binsize = 0.749963 -> bins = 41 41 94
|
||||||
|
Memory usage per processor = 9.40639 Mbytes
|
||||||
|
Step CPU Atoms KinEng
|
||||||
|
20000 0 2000 6443.7665
|
||||||
|
21000 0.37979388 2000 6572.3531
|
||||||
|
22000 0.76149178 2000 6723.8376
|
||||||
|
23000 1.1449339 2000 6853.1812
|
||||||
|
24000 1.529017 2000 6976.0209
|
||||||
|
25000 1.9145579 2000 7096.9955
|
||||||
|
26000 2.30124 2000 7215.5795
|
||||||
|
27000 2.6893978 2000 7349.2382
|
||||||
|
28000 3.0777299 2000 7471.8719
|
||||||
|
29000 3.4699018 2000 7574.7988
|
||||||
|
30000 3.8656738 2000 7660.2353
|
||||||
|
31000 4.2606828 2000 7703.5736
|
||||||
|
32000 4.6632309 2000 7643.5299
|
||||||
|
33000 5.0728998 2000 7520.14
|
||||||
|
34000 5.4878559 2000 7372.2247
|
||||||
|
35000 5.910604 2000 7192.1639
|
||||||
|
36000 6.340683 2000 6985.7075
|
||||||
|
37000 6.8159268 2000 6858.944
|
||||||
|
38000 7.2553098 2000 6717.0485
|
||||||
|
39000 7.699847 2000 6541.6874
|
||||||
|
40000 8.1524599 2000 6382.1661
|
||||||
|
41000 8.6083429 2000 6235.6681
|
||||||
|
42000 9.0669999 2000 6103.095
|
||||||
|
43000 9.5359929 2000 5951.0523
|
||||||
|
44000 10.012767 2000 5811.0158
|
||||||
|
45000 10.497891 2000 5627.7273
|
||||||
|
46000 10.988827 2000 5471.7262
|
||||||
|
47000 11.48741 2000 5299.1205
|
||||||
|
48000 11.990619 2000 5164.1642
|
||||||
|
49000 12.497663 2000 5006.5014
|
||||||
|
50000 13.020399 2000 4872.2336
|
||||||
|
51000 13.548012 2000 4694.5332
|
||||||
|
52000 14.082238 2000 4515.5164
|
||||||
|
53000 14.622731 2000 4384.7531
|
||||||
|
54000 15.170292 2000 4215.1354
|
||||||
|
55000 15.721908 2000 4063.0658
|
||||||
|
56000 16.285099 2000 3895.7872
|
||||||
|
57000 16.858606 2000 3693.0537
|
||||||
|
58000 17.440427 2000 3514.887
|
||||||
|
59000 18.03239 2000 3268.5625
|
||||||
|
60000 18.640969 2000 3049.7365
|
||||||
|
61000 19.245721 2000 2885.6786
|
||||||
|
62000 19.85574 2000 2652.9108
|
||||||
|
63000 20.47405 2000 2408.6484
|
||||||
|
64000 21.10165 2000 2126.9549
|
||||||
|
65000 21.743939 2000 1879.2829
|
||||||
|
66000 22.39462 2000 1645.0406
|
||||||
|
67000 23.059044 2000 1425.8023
|
||||||
|
68000 23.730976 2000 1160.2206
|
||||||
|
69000 24.410132 2000 961.78467
|
||||||
|
70000 25.096468 2000 785.64232
|
||||||
|
71000 25.778622 2000 626.09642
|
||||||
|
72000 26.474474 2000 468.40645
|
||||||
|
73000 27.171065 2000 358.58331
|
||||||
|
74000 27.860177 2000 299.43443
|
||||||
|
75000 28.544588 2000 246.40717
|
||||||
|
76000 29.226358 2000 206.30408
|
||||||
|
77000 29.902697 2000 176.97739
|
||||||
|
78000 30.577693 2000 144.25328
|
||||||
|
79000 31.269697 2000 115.11502
|
||||||
|
80000 31.977588 2000 97.780887
|
||||||
|
81000 32.685445 2000 82.593472
|
||||||
|
82000 33.397946 2000 72.226521
|
||||||
|
83000 34.114464 2000 62.978026
|
||||||
|
84000 34.831341 2000 55.350711
|
||||||
|
85000 35.545558 2000 51.162661
|
||||||
|
86000 36.266238 2000 46.100957
|
||||||
|
87000 36.99804 2000 41.19148
|
||||||
|
88000 37.743379 2000 36.31567
|
||||||
|
89000 38.499655 2000 32.456379
|
||||||
|
90000 39.270287 2000 30.16589
|
||||||
|
91000 40.035401 2000 27.36473
|
||||||
|
92000 40.799095 2000 25.488138
|
||||||
|
93000 41.564371 2000 23.674866
|
||||||
|
94000 42.335499 2000 22.219066
|
||||||
|
95000 43.114508 2000 20.982603
|
||||||
|
96000 43.897793 2000 19.840979
|
||||||
|
97000 44.685675 2000 19.092279
|
||||||
|
98000 45.483452 2000 18.20277
|
||||||
|
99000 46.282718 2000 17.512786
|
||||||
|
100000 47.085373 2000 16.921053
|
||||||
|
101000 47.888376 2000 16.228234
|
||||||
|
102000 48.698546 2000 15.958752
|
||||||
|
103000 49.51312 2000 15.640913
|
||||||
|
104000 50.330832 2000 14.016542
|
||||||
|
105000 51.146589 2000 13.484725
|
||||||
|
106000 51.96128 2000 13.369222
|
||||||
|
107000 52.781047 2000 12.965898
|
||||||
|
108000 53.604374 2000 12.268212
|
||||||
|
109000 54.424389 2000 11.492904
|
||||||
|
110000 55.253544 2000 11.110936
|
||||||
|
111000 56.077677 2000 10.05383
|
||||||
|
112000 56.904333 2000 10.159311
|
||||||
|
113000 57.729366 2000 10.071694
|
||||||
|
114000 58.559509 2000 9.820289
|
||||||
|
115000 59.391732 2000 9.4736012
|
||||||
|
116000 60.221045 2000 9.5616457
|
||||||
|
117000 61.052557 2000 8.6478552
|
||||||
|
118000 61.890195 2000 8.7425719
|
||||||
|
119000 62.726358 2000 8.4741204
|
||||||
|
120000 63.565646 2000 7.772287
|
||||||
|
121000 64.397804 2000 6.9466866
|
||||||
|
122000 65.231394 2000 6.7645153
|
||||||
|
123000 66.064887 2000 6.6568629
|
||||||
|
124000 66.901915 2000 6.7578346
|
||||||
|
125000 67.741833 2000 6.7845523
|
||||||
|
126000 68.582414 2000 6.8385357
|
||||||
|
127000 69.421944 2000 6.8984218
|
||||||
|
128000 70.262972 2000 7.031649
|
||||||
|
129000 71.108668 2000 6.5894805
|
||||||
|
130000 71.954121 2000 6.6452991
|
||||||
|
131000 72.795366 2000 6.7278453
|
||||||
|
132000 73.639866 2000 6.679577
|
||||||
|
133000 74.484945 2000 6.8049542
|
||||||
|
134000 75.326506 2000 6.9015567
|
||||||
|
135000 76.171268 2000 7.2052436
|
||||||
|
136000 77.015739 2000 7.5532841
|
||||||
|
137000 77.861613 2000 7.2577958
|
||||||
|
138000 78.706479 2000 7.5218509
|
||||||
|
139000 79.549466 2000 7.5221639
|
||||||
|
140000 80.398284 2000 7.6657717
|
||||||
|
141000 81.240794 2000 7.9761942
|
||||||
|
142000 82.087164 2000 8.2314258
|
||||||
|
143000 82.931215 2000 8.3019975
|
||||||
|
144000 83.777896 2000 8.0179905
|
||||||
|
145000 84.622383 2000 8.2517491
|
||||||
|
146000 85.469753 2000 6.9481522
|
||||||
|
147000 86.315756 2000 6.6131212
|
||||||
|
148000 87.164711 2000 6.7706881
|
||||||
|
149000 88.012004 2000 6.8104528
|
||||||
|
150000 88.861557 2000 6.7339102
|
||||||
|
151000 89.708494 2000 6.4777998
|
||||||
|
152000 90.558437 2000 6.3011889
|
||||||
|
153000 91.40365 2000 6.3101502
|
||||||
|
154000 92.249997 2000 6.5542552
|
||||||
|
155000 93.099774 2000 6.7687268
|
||||||
|
156000 93.945557 2000 6.7974687
|
||||||
|
157000 94.795065 2000 6.4615869
|
||||||
|
158000 95.645761 2000 6.5566144
|
||||||
|
159000 96.495711 2000 6.4371
|
||||||
|
160000 97.349979 2000 6.4540668
|
||||||
|
161000 98.19875 2000 6.6987231
|
||||||
|
162000 99.049934 2000 6.2464506
|
||||||
|
163000 99.902813 2000 4.7573102
|
||||||
|
164000 100.75416 2000 4.7782706
|
||||||
|
165000 101.60479 2000 4.9414064
|
||||||
|
166000 102.45183 2000 4.970526
|
||||||
|
167000 103.30172 2000 5.1492473
|
||||||
|
168000 104.15283 2000 5.3633229
|
||||||
|
169000 105.00583 2000 4.3464936
|
||||||
|
170000 105.85919 2000 3.6784016
|
||||||
|
Loop time of 105.859 on 1 procs for 150000 steps with 2000 atoms
|
||||||
|
|
||||||
|
99.9% CPU use with 1 MPI tasks x no OpenMP threads
|
||||||
|
|
||||||
|
MPI task timing breakdown:
|
||||||
|
Section | min time | avg time | max time |%varavg| %total
|
||||||
|
---------------------------------------------------------------
|
||||||
|
Pair | 46.786 | 46.786 | 46.786 | -nan | 44.20
|
||||||
|
Neigh | 0.88556 | 0.88556 | 0.88556 | 0.0 | 0.84
|
||||||
|
Comm | 0.080127 | 0.080127 | 0.080127 | 0.0 | 0.08
|
||||||
|
Output | 0.0033967 | 0.0033967 | 0.0033967 | 0.0 | 0.00
|
||||||
|
Modify | 56.418 | 56.418 | 56.418 | 0.0 | 53.29
|
||||||
|
Other | | 1.687 | | | 1.59
|
||||||
|
|
||||||
|
Nlocal: 2000 ave 2000 max 2000 min
|
||||||
|
Histogram: 1 0 0 0 0 0 0 0 0 0
|
||||||
|
Nghost: 0 ave 0 max 0 min
|
||||||
|
Histogram: 1 0 0 0 0 0 0 0 0 0
|
||||||
|
Neighs: 15507 ave 15507 max 15507 min
|
||||||
|
Histogram: 1 0 0 0 0 0 0 0 0 0
|
||||||
|
|
||||||
|
Total # of neighbors = 15507
|
||||||
|
Ave neighs/atom = 7.7535
|
||||||
|
Neighbor list builds = 401
|
||||||
|
Dangerous builds = 0
|
||||||
|
|
||||||
|
# remove "plug" - need to redefine cylinder region & union
|
||||||
|
|
||||||
|
region cylreg delete
|
||||||
|
region hopreg delete
|
||||||
|
region cylreg cylinder z ${xc} ${yc} ${radconelo} ${zcyllo} ${zconelo} side in units box open 1 open 2 #Bottom & top are open
|
||||||
|
region cylreg cylinder z 25 ${yc} ${radconelo} ${zcyllo} ${zconelo} side in units box open 1 open 2
|
||||||
|
region cylreg cylinder z 25 25 ${radconelo} ${zcyllo} ${zconelo} side in units box open 1 open 2
|
||||||
|
region cylreg cylinder z 25 25 2 ${zcyllo} ${zconelo} side in units box open 1 open 2
|
||||||
|
region cylreg cylinder z 25 25 2 0 ${zconelo} side in units box open 1 open 2
|
||||||
|
region cylreg cylinder z 25 25 2 0 10 side in units box open 1 open 2
|
||||||
|
|
||||||
|
region hopreg union 2 cylreg conereg
|
||||||
|
|
||||||
|
unfix hopper3
|
||||||
|
fix hopper3 all wall/gran/region hertz/history ${kn} ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 region hopreg
|
||||||
|
fix hopper3 all wall/gran/region hertz/history 72592.5925925926 ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 region hopreg
|
||||||
|
fix hopper3 all wall/gran/region hertz/history 72592.5925925926 90740.7407407408 ${gamma_n} ${gamma_t} ${coeffFric} 1 region hopreg
|
||||||
|
fix hopper3 all wall/gran/region hertz/history 72592.5925925926 90740.7407407408 903.503751814138 ${gamma_t} ${coeffFric} 1 region hopreg
|
||||||
|
fix hopper3 all wall/gran/region hertz/history 72592.5925925926 90740.7407407408 903.503751814138 451.751875907069 ${coeffFric} 1 region hopreg
|
||||||
|
fix hopper3 all wall/gran/region hertz/history 72592.5925925926 90740.7407407408 903.503751814138 451.751875907069 0.5 1 region hopreg
|
||||||
|
|
||||||
|
run 100000
|
||||||
|
Memory usage per processor = 9.40667 Mbytes
|
||||||
|
Step CPU Atoms KinEng
|
||||||
|
170000 0 2000 3.6784016
|
||||||
|
171000 0.84847808 2000 4.3936331
|
||||||
|
172000 1.6901879 2000 5.5750342
|
||||||
|
173000 2.523411 2000 6.8205762
|
||||||
|
174000 3.3501492 2000 8.9700613
|
||||||
|
175000 4.1766891 2000 11.336633
|
||||||
|
176000 4.9954321 2000 14.225242
|
||||||
|
177000 5.814229 2000 17.653262
|
||||||
|
178000 6.630548 2000 21.796078
|
||||||
|
179000 7.4493361 2000 26.660801
|
||||||
|
180000 8.2656369 2000 32.428193
|
||||||
|
181000 9.069953 2000 39.229088
|
||||||
|
182000 9.8759181 2000 46.242732
|
||||||
|
183000 10.674972 2000 54.604245
|
||||||
|
184000 11.47082 2000 63.96931
|
||||||
|
185000 12.259916 2000 74.132316
|
||||||
|
186000 13.046788 2000 84.690798
|
||||||
|
187000 13.832446 2000 95.486707
|
||||||
|
188000 14.612976 2000 106.68052
|
||||||
|
189000 15.391779 2000 118.91376
|
||||||
|
190000 16.160107 2000 131.90023
|
||||||
|
191000 16.919573 2000 146.30664
|
||||||
|
192000 17.677855 2000 161.10142
|
||||||
|
193000 18.4352 2000 174.91947
|
||||||
|
194000 19.188156 2000 191.47629
|
||||||
|
195000 19.937255 2000 208.19912
|
||||||
|
196000 20.687716 2000 224.80045
|
||||||
|
197000 21.43754 2000 243.29637
|
||||||
|
198000 22.18579 2000 262.88685
|
||||||
|
199000 22.932473 2000 282.34797
|
||||||
|
200000 23.680828 2000 302.78689
|
||||||
|
201000 24.428559 2000 323.48767
|
||||||
|
202000 25.167341 2000 345.99414
|
||||||
|
203000 25.904465 2000 368.54389
|
||||||
|
204000 26.635727 2000 393.49643
|
||||||
|
205000 27.366891 2000 417.82722
|
||||||
|
206000 28.094282 2000 443.67976
|
||||||
|
207000 28.821021 2000 470.35934
|
||||||
|
208000 29.545596 2000 499.01368
|
||||||
|
209000 30.267439 2000 528.99746
|
||||||
|
210000 30.993287 2000 561.03931
|
||||||
|
211000 31.713729 2000 594.0482
|
||||||
|
212000 32.42933 2000 628.20118
|
||||||
|
213000 33.14608 2000 662.585
|
||||||
|
214000 33.863882 2000 697.41408
|
||||||
|
215000 34.580495 2000 733.36799
|
||||||
|
216000 35.302571 2000 770.46796
|
||||||
|
217000 36.023821 2000 806.72007
|
||||||
|
218000 36.74189 2000 844.06965
|
||||||
|
219000 37.460105 2000 884.31774
|
||||||
|
220000 38.177705 2000 926.23771
|
||||||
|
221000 38.886587 2000 970.02095
|
||||||
|
222000 39.594003 2000 1015.3938
|
||||||
|
223000 40.29579 2000 1061.1281
|
||||||
|
224000 41.001112 2000 1107.9962
|
||||||
|
225000 41.706489 2000 1155.3656
|
||||||
|
226000 42.417622 1998 1196.6939
|
||||||
|
227000 43.133238 1996 1240.8434
|
||||||
|
228000 43.844991 1990 1260.0436
|
||||||
|
229000 44.545565 1986 1280.0431
|
||||||
|
230000 45.246651 1974 1285.222
|
||||||
|
231000 45.934355 1970 1311.8189
|
||||||
|
232000 46.624066 1960 1300.7922
|
||||||
|
233000 47.310339 1943 1282.113
|
||||||
|
234000 47.993433 1932 1261.0871
|
||||||
|
235000 48.66937 1918 1211.0667
|
||||||
|
236000 49.332954 1911 1232.6411
|
||||||
|
237000 49.99742 1898 1209.112
|
||||||
|
238000 50.664096 1888 1189.4002
|
||||||
|
239000 51.336205 1875 1151.415
|
||||||
|
240000 52.010198 1863 1108.0821
|
||||||
|
241000 52.680788 1856 1090.2279
|
||||||
|
242000 53.343069 1843 1062.9726
|
||||||
|
243000 53.996768 1830 1016.0933
|
||||||
|
244000 54.635882 1825 1023.5568
|
||||||
|
245000 55.271259 1817 1012.2897
|
||||||
|
246000 55.902793 1811 1019.8355
|
||||||
|
247000 56.541437 1802 996.81934
|
||||||
|
248000 57.182244 1793 971.29353
|
||||||
|
249000 57.827453 1785 947.98166
|
||||||
|
250000 58.473311 1771 898.58408
|
||||||
|
251000 59.1075 1762 851.46342
|
||||||
|
252000 59.73473 1754 826.46301
|
||||||
|
253000 60.362094 1747 808.08292
|
||||||
|
254000 60.989489 1737 778.86892
|
||||||
|
255000 61.616293 1720 702.90046
|
||||||
|
256000 62.243096 1709 665.14293
|
||||||
|
257000 62.866596 1703 628.63036
|
||||||
|
258000 63.48969 1702 645.42118
|
||||||
|
259000 64.119075 1696 617.03362
|
||||||
|
260000 64.752187 1692 607.96874
|
||||||
|
261000 65.374973 1690 619.83155
|
||||||
|
262000 65.991365 1688 622.09585
|
||||||
|
263000 66.608686 1682 612.86762
|
||||||
|
264000 67.220696 1681 636.53769
|
||||||
|
265000 67.830797 1678 638.33305
|
||||||
|
266000 68.439964 1675 635.97419
|
||||||
|
267000 69.043459 1672 634.91103
|
||||||
|
268000 69.643043 1669 638.50196
|
||||||
|
269000 70.250146 1667 646.16045
|
||||||
|
270000 70.86361 1664 659.62209
|
||||||
|
Loop time of 70.8636 on 1 procs for 100000 steps with 1664 atoms
|
||||||
|
|
||||||
|
99.9% CPU use with 1 MPI tasks x no OpenMP threads
|
||||||
|
|
||||||
|
MPI task timing breakdown:
|
||||||
|
Section | min time | avg time | max time |%varavg| %total
|
||||||
|
---------------------------------------------------------------
|
||||||
|
Pair | 33.501 | 33.501 | 33.501 | 0.0 | 47.27
|
||||||
|
Neigh | 0.63279 | 0.63279 | 0.63279 | 0.0 | 0.89
|
||||||
|
Comm | 0.055495 | 0.055495 | 0.055495 | 0.0 | 0.08
|
||||||
|
Output | 0.0021648 | 0.0021648 | 0.0021648 | 0.0 | 0.00
|
||||||
|
Modify | 35.602 | 35.602 | 35.602 | 0.0 | 50.24
|
||||||
|
Other | | 1.07 | | | 1.51
|
||||||
|
|
||||||
|
Nlocal: 1664 ave 1664 max 1664 min
|
||||||
|
Histogram: 1 0 0 0 0 0 0 0 0 0
|
||||||
|
Nghost: 0 ave 0 max 0 min
|
||||||
|
Histogram: 1 0 0 0 0 0 0 0 0 0
|
||||||
|
Neighs: 11687 ave 11687 max 11687 min
|
||||||
|
Histogram: 1 0 0 0 0 0 0 0 0 0
|
||||||
|
|
||||||
|
Total # of neighbors = 11687
|
||||||
|
Ave neighs/atom = 7.02344
|
||||||
|
Neighbor list builds = 261
|
||||||
|
Dangerous builds = 0
|
||||||
|
Total wall time: 0:03:04
|
||||||
608
examples/granregion/log.6Oct16.granregion.funnel.g++.4
Normal file
608
examples/granregion/log.6Oct16.granregion.funnel.g++.4
Normal file
@ -0,0 +1,608 @@
|
|||||||
|
LAMMPS (5 Oct 2016)
|
||||||
|
# pour particles into cone-shaped funnel, settle them, let them run out bottom
|
||||||
|
|
||||||
|
variable name string funnel_pour
|
||||||
|
|
||||||
|
thermo_modify flush yes
|
||||||
|
units si
|
||||||
|
variable PI equal 3.141592653589
|
||||||
|
variable seed equal 14314
|
||||||
|
|
||||||
|
###############################################
|
||||||
|
# Geometry-related parameters
|
||||||
|
###############################################
|
||||||
|
|
||||||
|
variable xlo equal 10
|
||||||
|
variable xhi equal 40
|
||||||
|
variable ylo equal 10
|
||||||
|
variable yhi equal 40
|
||||||
|
variable zlo equal -20
|
||||||
|
variable zhi equal 50
|
||||||
|
|
||||||
|
variable xc equal 25
|
||||||
|
variable yc equal 25
|
||||||
|
|
||||||
|
variable zconehi equal 50
|
||||||
|
variable zconelo equal 10
|
||||||
|
variable zcyllo equal 0
|
||||||
|
variable radconelo equal 2
|
||||||
|
variable radconehi equal 20
|
||||||
|
|
||||||
|
################################################
|
||||||
|
# Particle sizes
|
||||||
|
################################################
|
||||||
|
|
||||||
|
variable rlo equal 0.25
|
||||||
|
variable rhi equal 0.5
|
||||||
|
variable dlo equal 2.0*${rlo}
|
||||||
|
variable dlo equal 2.0*0.25
|
||||||
|
variable dhi equal 2.0*${rhi}
|
||||||
|
variable dhi equal 2.0*0.5
|
||||||
|
|
||||||
|
variable skin equal ${rhi}
|
||||||
|
variable skin equal 0.5
|
||||||
|
|
||||||
|
###############################################
|
||||||
|
# Granular contact parameters
|
||||||
|
###############################################
|
||||||
|
|
||||||
|
variable coeffRes equal 0.1
|
||||||
|
variable coeffFric equal 0.5
|
||||||
|
|
||||||
|
variable density equal 1.0
|
||||||
|
variable EYoung equal 10^5
|
||||||
|
variable Poisson equal 2.0/7.0
|
||||||
|
variable GShear equal ${EYoung}/(2*(1+${Poisson}))
|
||||||
|
variable GShear equal 100000/(2*(1+${Poisson}))
|
||||||
|
variable GShear equal 100000/(2*(1+0.285714285714286))
|
||||||
|
|
||||||
|
variable gravity equal 1.0
|
||||||
|
|
||||||
|
variable reff equal 0.5*(${rhi}+${rlo})
|
||||||
|
variable reff equal 0.5*(0.5+${rlo})
|
||||||
|
variable reff equal 0.5*(0.5+0.25)
|
||||||
|
variable meff equal ${density}*4.0/3.0*${PI}*${reff}^3
|
||||||
|
variable meff equal 1*4.0/3.0*${PI}*${reff}^3
|
||||||
|
variable meff equal 1*4.0/3.0*3.141592653589*${reff}^3
|
||||||
|
variable meff equal 1*4.0/3.0*3.141592653589*0.375^3
|
||||||
|
variable min_mass equal ${density}*4.0/3.0*${PI}*${rlo}*${rlo}*${rlo}
|
||||||
|
variable min_mass equal 1*4.0/3.0*${PI}*${rlo}*${rlo}*${rlo}
|
||||||
|
variable min_mass equal 1*4.0/3.0*3.141592653589*${rlo}*${rlo}*${rlo}
|
||||||
|
variable min_mass equal 1*4.0/3.0*3.141592653589*0.25*${rlo}*${rlo}
|
||||||
|
variable min_mass equal 1*4.0/3.0*3.141592653589*0.25*0.25*${rlo}
|
||||||
|
variable min_mass equal 1*4.0/3.0*3.141592653589*0.25*0.25*0.25
|
||||||
|
variable max_mass equal ${density}*4.0/3.0*${PI}*${rhi}*${rhi}*${rhi}
|
||||||
|
variable max_mass equal 1*4.0/3.0*${PI}*${rhi}*${rhi}*${rhi}
|
||||||
|
variable max_mass equal 1*4.0/3.0*3.141592653589*${rhi}*${rhi}*${rhi}
|
||||||
|
variable max_mass equal 1*4.0/3.0*3.141592653589*0.5*${rhi}*${rhi}
|
||||||
|
variable max_mass equal 1*4.0/3.0*3.141592653589*0.5*0.5*${rhi}
|
||||||
|
variable max_mass equal 1*4.0/3.0*3.141592653589*0.5*0.5*0.5
|
||||||
|
|
||||||
|
## Typical way to set kn, kt, etc.:
|
||||||
|
variable kn equal 4.0*${GShear}/(3*(1-${Poisson}))
|
||||||
|
variable kn equal 4.0*38888.8888888889/(3*(1-${Poisson}))
|
||||||
|
variable kn equal 4.0*38888.8888888889/(3*(1-0.285714285714286))
|
||||||
|
variable kt equal 4.0*${GShear}/(2-${Poisson})
|
||||||
|
variable kt equal 4.0*38888.8888888889/(2-${Poisson})
|
||||||
|
variable kt equal 4.0*38888.8888888889/(2-0.285714285714286)
|
||||||
|
|
||||||
|
variable a equal (-2.0*log(${coeffRes})/${PI})^2
|
||||||
|
variable a equal (-2.0*log(0.1)/${PI})^2
|
||||||
|
variable a equal (-2.0*log(0.1)/3.141592653589)^2
|
||||||
|
variable gamma_n equal sqrt($a*2*${kn}/${min_mass}/(1+0.25*$a))
|
||||||
|
variable gamma_n equal sqrt(0.405284734569556*2*${kn}/${min_mass}/(1+0.25*$a))
|
||||||
|
variable gamma_n equal sqrt(0.405284734569556*2*72592.5925925926/${min_mass}/(1+0.25*$a))
|
||||||
|
variable gamma_n equal sqrt(0.405284734569556*2*72592.5925925926/0.0654498469497708/(1+0.25*$a))
|
||||||
|
variable gamma_n equal sqrt(0.405284734569556*2*72592.5925925926/0.0654498469497708/(1+0.25*0.405284734569556))
|
||||||
|
variable gamma_t equal ${gamma_n}*0.5
|
||||||
|
variable gamma_t equal 903.503751814138*0.5
|
||||||
|
|
||||||
|
variable tcol equal ${PI}/sqrt(2*${kn}/${min_mass}-${gamma_n}/4.0)
|
||||||
|
variable tcol equal 3.141592653589/sqrt(2*${kn}/${min_mass}-${gamma_n}/4.0)
|
||||||
|
variable tcol equal 3.141592653589/sqrt(2*72592.5925925926/${min_mass}-${gamma_n}/4.0)
|
||||||
|
variable tcol equal 3.141592653589/sqrt(2*72592.5925925926/0.0654498469497708-${gamma_n}/4.0)
|
||||||
|
variable tcol equal 3.141592653589/sqrt(2*72592.5925925926/0.0654498469497708-903.503751814138/4.0)
|
||||||
|
|
||||||
|
variable dt equal ${tcol}*0.05
|
||||||
|
variable dt equal 0.00210943016014969*0.05
|
||||||
|
timestep ${dt}
|
||||||
|
timestep 0.000105471508007485
|
||||||
|
|
||||||
|
###############################################
|
||||||
|
variable dumpfreq equal 1000
|
||||||
|
variable logfreq equal 1000
|
||||||
|
|
||||||
|
newton off
|
||||||
|
atom_style sphere
|
||||||
|
|
||||||
|
boundary p p f
|
||||||
|
|
||||||
|
region boxreg block ${xlo} ${xhi} ${ylo} ${yhi} ${zlo} ${zhi}
|
||||||
|
region boxreg block 10 ${xhi} ${ylo} ${yhi} ${zlo} ${zhi}
|
||||||
|
region boxreg block 10 40 ${ylo} ${yhi} ${zlo} ${zhi}
|
||||||
|
region boxreg block 10 40 10 ${yhi} ${zlo} ${zhi}
|
||||||
|
region boxreg block 10 40 10 40 ${zlo} ${zhi}
|
||||||
|
region boxreg block 10 40 10 40 -20 ${zhi}
|
||||||
|
region boxreg block 10 40 10 40 -20 50
|
||||||
|
create_box 1 boxreg
|
||||||
|
Created orthogonal box = (10 10 -20) to (40 40 50)
|
||||||
|
1 by 1 by 4 MPI processor grid
|
||||||
|
|
||||||
|
pair_style gran/hertz/history ${kn} ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1
|
||||||
|
pair_style gran/hertz/history 72592.5925925926 ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1
|
||||||
|
pair_style gran/hertz/history 72592.5925925926 90740.7407407408 ${gamma_n} ${gamma_t} ${coeffFric} 1
|
||||||
|
pair_style gran/hertz/history 72592.5925925926 90740.7407407408 903.503751814138 ${gamma_t} ${coeffFric} 1
|
||||||
|
pair_style gran/hertz/history 72592.5925925926 90740.7407407408 903.503751814138 451.751875907069 ${coeffFric} 1
|
||||||
|
pair_style gran/hertz/history 72592.5925925926 90740.7407407408 903.503751814138 451.751875907069 0.5 1
|
||||||
|
pair_coeff * *
|
||||||
|
|
||||||
|
neighbor ${skin} bin
|
||||||
|
neighbor 0.5 bin
|
||||||
|
thermo ${logfreq}
|
||||||
|
thermo 1000
|
||||||
|
|
||||||
|
comm_style brick
|
||||||
|
comm_modify mode multi group all vel yes
|
||||||
|
balance 1.1 shift xyz 20 1.1
|
||||||
|
Neighbor list info ...
|
||||||
|
2 neighbor list requests
|
||||||
|
update every 1 steps, delay 10 steps, check yes
|
||||||
|
max neighbors/atom: 2000, page size: 100000
|
||||||
|
master list distance cutoff = 0
|
||||||
|
ghost atom cutoff = 0
|
||||||
|
binsize = 30 -> bins = 1 1 3
|
||||||
|
fix bal all balance 10000 1.1 shift xyz 20 1.01
|
||||||
|
|
||||||
|
####################### Options specific to pouring #########################
|
||||||
|
|
||||||
|
# insertion region for fix/pour
|
||||||
|
|
||||||
|
region insreg cylinder z ${xc} ${yc} 10 30 50 side in units box
|
||||||
|
region insreg cylinder z 25 ${yc} 10 30 50 side in units box
|
||||||
|
region insreg cylinder z 25 25 10 30 50 side in units box
|
||||||
|
|
||||||
|
# define cone and cylinder regions - see lammps doc on region command
|
||||||
|
# note new open options
|
||||||
|
|
||||||
|
region cylreg cylinder z ${xc} ${yc} ${radconelo} ${zcyllo} ${zconelo} side in units box open 2 #Top is open
|
||||||
|
region cylreg cylinder z 25 ${yc} ${radconelo} ${zcyllo} ${zconelo} side in units box open 2
|
||||||
|
region cylreg cylinder z 25 25 ${radconelo} ${zcyllo} ${zconelo} side in units box open 2
|
||||||
|
region cylreg cylinder z 25 25 2 ${zcyllo} ${zconelo} side in units box open 2
|
||||||
|
region cylreg cylinder z 25 25 2 0 ${zconelo} side in units box open 2
|
||||||
|
region cylreg cylinder z 25 25 2 0 10 side in units box open 2
|
||||||
|
|
||||||
|
region conereg cone z ${xc} ${yc} ${radconelo} ${radconehi} ${zconelo} ${zconehi} side in units box open 1 open 2 #Bottom and top are open
|
||||||
|
region conereg cone z 25 ${yc} ${radconelo} ${radconehi} ${zconelo} ${zconehi} side in units box open 1 open 2
|
||||||
|
region conereg cone z 25 25 ${radconelo} ${radconehi} ${zconelo} ${zconehi} side in units box open 1 open 2
|
||||||
|
region conereg cone z 25 25 2 ${radconehi} ${zconelo} ${zconehi} side in units box open 1 open 2
|
||||||
|
region conereg cone z 25 25 2 20 ${zconelo} ${zconehi} side in units box open 1 open 2
|
||||||
|
region conereg cone z 25 25 2 20 10 ${zconehi} side in units box open 1 open 2
|
||||||
|
region conereg cone z 25 25 2 20 10 50 side in units box open 1 open 2
|
||||||
|
|
||||||
|
region hopreg union 2 conereg cylreg
|
||||||
|
|
||||||
|
fix grav all gravity ${gravity} vector 0 0 -1
|
||||||
|
fix grav all gravity 1 vector 0 0 -1
|
||||||
|
fix 1 all nve/sphere
|
||||||
|
|
||||||
|
|
||||||
|
fix hopper3 all wall/gran/region hertz/history ${kn} ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 region hopreg
|
||||||
|
fix hopper3 all wall/gran/region hertz/history 72592.5925925926 ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 region hopreg
|
||||||
|
fix hopper3 all wall/gran/region hertz/history 72592.5925925926 90740.7407407408 ${gamma_n} ${gamma_t} ${coeffFric} 1 region hopreg
|
||||||
|
fix hopper3 all wall/gran/region hertz/history 72592.5925925926 90740.7407407408 903.503751814138 ${gamma_t} ${coeffFric} 1 region hopreg
|
||||||
|
fix hopper3 all wall/gran/region hertz/history 72592.5925925926 90740.7407407408 903.503751814138 451.751875907069 ${coeffFric} 1 region hopreg
|
||||||
|
fix hopper3 all wall/gran/region hertz/history 72592.5925925926 90740.7407407408 903.503751814138 451.751875907069 0.5 1 region hopreg
|
||||||
|
|
||||||
|
fix ins all pour 2000 1 42424 region insreg diam range ${dlo} ${dhi} dens ${density} ${density}
|
||||||
|
fix ins all pour 2000 1 42424 region insreg diam range 0.5 ${dhi} dens ${density} ${density}
|
||||||
|
fix ins all pour 2000 1 42424 region insreg diam range 0.5 1 dens ${density} ${density}
|
||||||
|
fix ins all pour 2000 1 42424 region insreg diam range 0.5 1 dens 1 ${density}
|
||||||
|
fix ins all pour 2000 1 42424 region insreg diam range 0.5 1 dens 1 1
|
||||||
|
Particle insertion: 3000 every 59965 steps, 2000 by step 1
|
||||||
|
|
||||||
|
#dump 1 all custom ${dumpfreq} ${name}.dump # id type mass diameter x y z
|
||||||
|
|
||||||
|
#dump 2 all image 4000 image.*.jpg type type # axes yes 0.8 0.02 view 60 -30 zoom 3.0 # box no 0.0 axes no 0.0 0.0
|
||||||
|
#dump_modify 2 pad 6
|
||||||
|
|
||||||
|
thermo_style custom step cpu atoms ke
|
||||||
|
WARNING: New thermo_style command, previous thermo_modify settings will be lost (../output.cpp:690)
|
||||||
|
thermo_modify flush yes lost warn
|
||||||
|
|
||||||
|
# Initial run to fill up the cone
|
||||||
|
|
||||||
|
run 20000
|
||||||
|
Neighbor list info ...
|
||||||
|
2 neighbor list requests
|
||||||
|
update every 1 steps, delay 10 steps, check yes
|
||||||
|
max neighbors/atom: 2000, page size: 100000
|
||||||
|
master list distance cutoff = 1.5
|
||||||
|
ghost atom cutoff = 1.5
|
||||||
|
binsize = 0.75 -> bins = 40 40 94
|
||||||
|
Memory usage per processor = 2.99539 Mbytes
|
||||||
|
Step CPU Atoms KinEng
|
||||||
|
0 0 0 -0
|
||||||
|
1000 0.53632808 2000 -0
|
||||||
|
2000 0.90599012 2000 -0
|
||||||
|
3000 1.2640941 2000 -0
|
||||||
|
4000 1.6225331 2000 -0
|
||||||
|
5000 1.9735272 2000 -0
|
||||||
|
6000 2.3156731 2000 -0
|
||||||
|
7000 2.6499262 2000 -0
|
||||||
|
8000 2.9751072 2000 -0
|
||||||
|
9000 3.2918322 2000 -0
|
||||||
|
10000 3.597712 2000 -0
|
||||||
|
11000 3.7157061 2000 -0
|
||||||
|
12000 3.833451 2000 -0
|
||||||
|
13000 3.9541111 2000 -0
|
||||||
|
14000 4.081727 2000 -0
|
||||||
|
15000 4.2142782 2000 -0
|
||||||
|
16000 4.3530872 2000 -0
|
||||||
|
17000 4.4987361 2000 -0
|
||||||
|
18000 4.6507492 2000 -0
|
||||||
|
19000 4.807373 2000 -0
|
||||||
|
20000 4.9710512 2000 -0
|
||||||
|
Loop time of 4.97109 on 4 procs for 20000 steps with 2000 atoms
|
||||||
|
|
||||||
|
98.5% CPU use with 4 MPI tasks x no OpenMP threads
|
||||||
|
|
||||||
|
MPI task timing breakdown:
|
||||||
|
Section | min time | avg time | max time |%varavg| %total
|
||||||
|
---------------------------------------------------------------
|
||||||
|
Pair | 0.067799 | 0.17326 | 0.37341 | 28.4 | 3.49
|
||||||
|
Neigh | 0.013881 | 0.025808 | 0.045841 | 7.5 | 0.52
|
||||||
|
Comm | 0.078163 | 0.1808 | 0.2915 | 21.0 | 3.64
|
||||||
|
Output | 0.0011413 | 0.0027029 | 0.0036721 | 1.8 | 0.05
|
||||||
|
Modify | 1.0146 | 1.8605 | 3.562 | 73.8 | 37.43
|
||||||
|
Other | | 2.728 | | | 54.88
|
||||||
|
|
||||||
|
Nlocal: 500 ave 505 max 493 min
|
||||||
|
Histogram: 1 0 0 0 0 1 0 1 0 1
|
||||||
|
Nghost: 159.25 ave 254 max 71 min
|
||||||
|
Histogram: 1 0 0 1 0 1 0 0 0 1
|
||||||
|
Neighs: 397.5 ave 616 max 214 min
|
||||||
|
Histogram: 1 0 1 0 0 0 1 0 0 1
|
||||||
|
|
||||||
|
Total # of neighbors = 1590
|
||||||
|
Ave neighs/atom = 0.795
|
||||||
|
Neighbor list builds = 69
|
||||||
|
Dangerous builds = 0
|
||||||
|
unfix ins
|
||||||
|
run 150000
|
||||||
|
Neighbor list info ...
|
||||||
|
2 neighbor list requests
|
||||||
|
update every 1 steps, delay 10 steps, check yes
|
||||||
|
max neighbors/atom: 2000, page size: 100000
|
||||||
|
master list distance cutoff = 1.49993
|
||||||
|
ghost atom cutoff = 1.49993
|
||||||
|
binsize = 0.749963 -> bins = 41 41 94
|
||||||
|
Memory usage per processor = 9.39737 Mbytes
|
||||||
|
Step CPU Atoms KinEng
|
||||||
|
20000 0 2000 6443.7665
|
||||||
|
21000 0.11240888 2000 6572.3531
|
||||||
|
22000 0.23014092 2000 6723.8376
|
||||||
|
23000 0.35371184 2000 6853.1812
|
||||||
|
24000 0.4838469 2000 6976.0209
|
||||||
|
25000 0.62193394 2000 7096.9955
|
||||||
|
26000 0.76781893 2000 7215.5795
|
||||||
|
27000 0.92212081 2000 7349.2382
|
||||||
|
28000 1.0841098 2000 7471.8719
|
||||||
|
29000 1.2593179 2000 7574.7988
|
||||||
|
30000 1.4459748 2000 7660.2353
|
||||||
|
31000 1.5759299 2000 7703.5736
|
||||||
|
32000 1.7189329 2000 7643.5299
|
||||||
|
33000 1.876133 2000 7520.14
|
||||||
|
34000 2.0453629 2000 7372.2247
|
||||||
|
35000 2.2281299 2000 7192.1638
|
||||||
|
36000 2.4208269 2000 6985.7056
|
||||||
|
37000 2.6258228 2000 6858.9422
|
||||||
|
38000 2.839473 2000 6717.0655
|
||||||
|
39000 3.065336 2000 6541.5809
|
||||||
|
40000 3.3090389 2000 6381.8513
|
||||||
|
41000 3.4969938 2000 6236.4297
|
||||||
|
42000 3.6888108 2000 6104.2528
|
||||||
|
43000 3.8874888 2000 5951.0314
|
||||||
|
44000 4.0956569 2000 5819.0972
|
||||||
|
45000 4.312974 2000 5620.6457
|
||||||
|
46000 4.5343778 2000 5479.332
|
||||||
|
47000 4.757262 2000 5295.328
|
||||||
|
48000 4.9850328 2000 5179.9559
|
||||||
|
49000 5.2210319 2000 5022.5562
|
||||||
|
50000 5.4699879 2000 4899.1332
|
||||||
|
51000 5.6774018 2000 4699.4456
|
||||||
|
52000 5.8900218 2000 4522.5719
|
||||||
|
53000 6.110677 2000 4402.8664
|
||||||
|
54000 6.3361218 2000 4256.1664
|
||||||
|
55000 6.5778289 2000 4093.6265
|
||||||
|
56000 6.8319149 2000 3933.0179
|
||||||
|
57000 7.0925779 2000 3738.4628
|
||||||
|
58000 7.3578169 2000 3535.7866
|
||||||
|
59000 7.6344049 2000 3298.4079
|
||||||
|
60000 7.9258108 2000 3058.9356
|
||||||
|
61000 8.1758959 2000 2888.0074
|
||||||
|
62000 8.4278228 2000 2652.4613
|
||||||
|
63000 8.6815088 2000 2435.0991
|
||||||
|
64000 8.9371588 2000 2147.9441
|
||||||
|
65000 9.208025 2000 1898.0657
|
||||||
|
66000 9.4795358 2000 1650.5794
|
||||||
|
67000 9.7519388 2000 1425.7284
|
||||||
|
68000 10.025867 2000 1193.3786
|
||||||
|
69000 10.313816 2000 940.55767
|
||||||
|
70000 10.610488 2000 761.5312
|
||||||
|
71000 10.879718 2000 599.1989
|
||||||
|
72000 11.154029 2000 453.25929
|
||||||
|
73000 11.424376 2000 345.73222
|
||||||
|
74000 11.697359 2000 273.72167
|
||||||
|
75000 11.966099 2000 222.44251
|
||||||
|
76000 12.230213 2000 190.79993
|
||||||
|
77000 12.481982 2000 157.71153
|
||||||
|
78000 12.73433 2000 131.99208
|
||||||
|
79000 12.986017 2000 111.10589
|
||||||
|
80000 13.243904 2000 96.736337
|
||||||
|
81000 13.500538 2000 81.24169
|
||||||
|
82000 13.765755 2000 66.640863
|
||||||
|
83000 14.032985 2000 53.07725
|
||||||
|
84000 14.308284 2000 45.942738
|
||||||
|
85000 14.586721 2000 38.811918
|
||||||
|
86000 14.861759 2000 34.59113
|
||||||
|
87000 15.135665 2000 31.04487
|
||||||
|
88000 15.417487 2000 27.659144
|
||||||
|
89000 15.698281 2000 24.596119
|
||||||
|
90000 15.97969 2000 22.004865
|
||||||
|
91000 16.266118 2000 20.541665
|
||||||
|
92000 16.557007 2000 18.938077
|
||||||
|
93000 16.846745 2000 17.293956
|
||||||
|
94000 17.133408 2000 16.443596
|
||||||
|
95000 17.42023 2000 15.518083
|
||||||
|
96000 17.709025 2000 14.264343
|
||||||
|
97000 18.001337 2000 13.410217
|
||||||
|
98000 18.292414 2000 13.036621
|
||||||
|
99000 18.583887 2000 12.523214
|
||||||
|
100000 18.880312 2000 12.371509
|
||||||
|
101000 19.176964 2000 11.828077
|
||||||
|
102000 19.474371 2000 11.510333
|
||||||
|
103000 19.770957 2000 11.289304
|
||||||
|
104000 20.070744 2000 10.370661
|
||||||
|
105000 20.372617 2000 10.217921
|
||||||
|
106000 20.673949 2000 9.3275222
|
||||||
|
107000 20.9765 2000 8.9156372
|
||||||
|
108000 21.276062 2000 8.5850821
|
||||||
|
109000 21.585305 2000 8.5326934
|
||||||
|
110000 21.89079 2000 8.0579504
|
||||||
|
111000 22.194207 2000 8.1084595
|
||||||
|
112000 22.501593 2000 7.9190174
|
||||||
|
113000 22.81251 2000 8.0127499
|
||||||
|
114000 23.118514 2000 8.1791911
|
||||||
|
115000 23.432862 2000 8.3333032
|
||||||
|
116000 23.735549 2000 8.4833817
|
||||||
|
117000 24.038329 2000 8.315498
|
||||||
|
118000 24.343247 2000 7.9460007
|
||||||
|
119000 24.643288 2000 7.5922134
|
||||||
|
120000 24.94731 2000 7.4089143
|
||||||
|
121000 25.253605 2000 7.5790659
|
||||||
|
122000 25.56672 2000 7.3778204
|
||||||
|
123000 25.870958 2000 7.1384456
|
||||||
|
124000 26.180729 2000 6.9151887
|
||||||
|
125000 26.493089 2000 6.4671685
|
||||||
|
126000 26.806734 2000 5.6773128
|
||||||
|
127000 27.10969 2000 5.5603057
|
||||||
|
128000 27.410973 2000 5.6376136
|
||||||
|
129000 27.712398 2000 5.5578044
|
||||||
|
130000 28.015943 2000 5.4632646
|
||||||
|
131000 28.319002 2000 4.9669466
|
||||||
|
132000 28.620558 2000 5.0191026
|
||||||
|
133000 28.923233 2000 4.7146653
|
||||||
|
134000 29.235178 2000 4.4835803
|
||||||
|
135000 29.542816 2000 4.5469703
|
||||||
|
136000 29.8518 2000 4.3349926
|
||||||
|
137000 30.159096 2000 4.423031
|
||||||
|
138000 30.464283 2000 4.3680646
|
||||||
|
139000 30.769279 2000 4.2461787
|
||||||
|
140000 31.074457 2000 4.4140001
|
||||||
|
141000 31.380334 2000 4.3991236
|
||||||
|
142000 31.683855 2000 4.572989
|
||||||
|
143000 31.987308 2000 4.7601702
|
||||||
|
144000 32.28998 2000 4.7790587
|
||||||
|
145000 32.594971 2000 4.8127728
|
||||||
|
146000 32.89855 2000 4.8750003
|
||||||
|
147000 33.205142 2000 4.9830109
|
||||||
|
148000 33.509096 2000 4.9960037
|
||||||
|
149000 33.812951 2000 5.2151503
|
||||||
|
150000 34.117585 2000 5.2745187
|
||||||
|
151000 34.420995 2000 4.8959892
|
||||||
|
152000 34.725788 2000 4.7600627
|
||||||
|
153000 35.032001 2000 4.6944719
|
||||||
|
154000 35.337093 2000 4.7647384
|
||||||
|
155000 35.645299 2000 4.312228
|
||||||
|
156000 35.953225 2000 3.8513036
|
||||||
|
157000 36.258107 2000 3.8798947
|
||||||
|
158000 36.570122 2000 3.7116749
|
||||||
|
159000 36.880424 2000 3.7246469
|
||||||
|
160000 37.187331 2000 3.8165318
|
||||||
|
161000 37.491939 2000 3.8954595
|
||||||
|
162000 37.806365 2000 4.0109691
|
||||||
|
163000 38.122006 2000 3.3864369
|
||||||
|
164000 38.437246 2000 3.4533589
|
||||||
|
165000 38.753073 2000 3.4967205
|
||||||
|
166000 39.068713 2000 3.5758702
|
||||||
|
167000 39.376388 2000 2.8913997
|
||||||
|
168000 39.685628 2000 2.507523
|
||||||
|
169000 39.99294 2000 2.4910068
|
||||||
|
170000 40.302393 2000 2.4992886
|
||||||
|
Loop time of 40.3024 on 4 procs for 150000 steps with 2000 atoms
|
||||||
|
|
||||||
|
99.2% CPU use with 4 MPI tasks x no OpenMP threads
|
||||||
|
|
||||||
|
MPI task timing breakdown:
|
||||||
|
Section | min time | avg time | max time |%varavg| %total
|
||||||
|
---------------------------------------------------------------
|
||||||
|
Pair | 7.9352 | 13.451 | 15.947 | 88.7 | 33.37
|
||||||
|
Neigh | 0.15394 | 0.23292 | 0.28243 | 10.0 | 0.58
|
||||||
|
Comm | 2.1471 | 3.534 | 4.4671 | 47.3 | 8.77
|
||||||
|
Output | 0.0070386 | 0.011774 | 0.021483 | 5.4 | 0.03
|
||||||
|
Modify | 10.816 | 14.404 | 16.047 | 55.2 | 35.74
|
||||||
|
Other | | 8.669 | | | 21.51
|
||||||
|
|
||||||
|
Nlocal: 500 ave 542 max 430 min
|
||||||
|
Histogram: 1 0 0 0 0 0 1 0 1 1
|
||||||
|
Nghost: 449.5 ave 679 max 208 min
|
||||||
|
Histogram: 1 0 0 0 1 0 1 0 0 1
|
||||||
|
Neighs: 4506.75 ave 5611 max 3508 min
|
||||||
|
Histogram: 1 0 1 0 0 0 1 0 0 1
|
||||||
|
|
||||||
|
Total # of neighbors = 18027
|
||||||
|
Ave neighs/atom = 9.0135
|
||||||
|
Neighbor list builds = 386
|
||||||
|
Dangerous builds = 0
|
||||||
|
|
||||||
|
# remove "plug" - need to redefine cylinder region & union
|
||||||
|
|
||||||
|
region cylreg delete
|
||||||
|
region hopreg delete
|
||||||
|
region cylreg cylinder z ${xc} ${yc} ${radconelo} ${zcyllo} ${zconelo} side in units box open 1 open 2 #Bottom & top are open
|
||||||
|
region cylreg cylinder z 25 ${yc} ${radconelo} ${zcyllo} ${zconelo} side in units box open 1 open 2
|
||||||
|
region cylreg cylinder z 25 25 ${radconelo} ${zcyllo} ${zconelo} side in units box open 1 open 2
|
||||||
|
region cylreg cylinder z 25 25 2 ${zcyllo} ${zconelo} side in units box open 1 open 2
|
||||||
|
region cylreg cylinder z 25 25 2 0 ${zconelo} side in units box open 1 open 2
|
||||||
|
region cylreg cylinder z 25 25 2 0 10 side in units box open 1 open 2
|
||||||
|
|
||||||
|
region hopreg union 2 cylreg conereg
|
||||||
|
|
||||||
|
unfix hopper3
|
||||||
|
fix hopper3 all wall/gran/region hertz/history ${kn} ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 region hopreg
|
||||||
|
fix hopper3 all wall/gran/region hertz/history 72592.5925925926 ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 region hopreg
|
||||||
|
fix hopper3 all wall/gran/region hertz/history 72592.5925925926 90740.7407407408 ${gamma_n} ${gamma_t} ${coeffFric} 1 region hopreg
|
||||||
|
fix hopper3 all wall/gran/region hertz/history 72592.5925925926 90740.7407407408 903.503751814138 ${gamma_t} ${coeffFric} 1 region hopreg
|
||||||
|
fix hopper3 all wall/gran/region hertz/history 72592.5925925926 90740.7407407408 903.503751814138 451.751875907069 ${coeffFric} 1 region hopreg
|
||||||
|
fix hopper3 all wall/gran/region hertz/history 72592.5925925926 90740.7407407408 903.503751814138 451.751875907069 0.5 1 region hopreg
|
||||||
|
|
||||||
|
run 100000
|
||||||
|
Memory usage per processor = 9.41929 Mbytes
|
||||||
|
Step CPU Atoms KinEng
|
||||||
|
170000 0 2000 2.4992886
|
||||||
|
171000 0.30864286 2000 3.6052039
|
||||||
|
172000 0.62273479 2000 4.8584577
|
||||||
|
173000 0.94411087 2000 6.5620833
|
||||||
|
174000 1.2588799 2000 8.8636423
|
||||||
|
175000 1.574302 2000 11.743197
|
||||||
|
176000 1.888201 2000 15.60405
|
||||||
|
177000 2.1948938 2000 20.29426
|
||||||
|
178000 2.508261 2000 25.069266
|
||||||
|
179000 2.8257489 2000 31.340924
|
||||||
|
180000 3.1444538 2000 38.454779
|
||||||
|
181000 3.4541628 2000 46.488676
|
||||||
|
182000 3.7632799 2000 55.279578
|
||||||
|
183000 4.0711808 2000 65.192327
|
||||||
|
184000 4.386853 2000 75.466011
|
||||||
|
185000 4.7000408 2000 86.06934
|
||||||
|
186000 5.00436 2000 97.157035
|
||||||
|
187000 5.3041189 2000 108.92242
|
||||||
|
188000 5.601872 2000 120.88599
|
||||||
|
189000 5.9027078 2000 134.09884
|
||||||
|
190000 6.2037618 2000 148.60143
|
||||||
|
191000 6.4879329 2000 163.96898
|
||||||
|
192000 6.7703898 2000 180.32931
|
||||||
|
193000 7.0603459 2000 198.83575
|
||||||
|
194000 7.3395619 2000 217.46631
|
||||||
|
195000 7.6245389 2000 235.34916
|
||||||
|
196000 7.911685 2000 253.61893
|
||||||
|
197000 8.1976559 2000 271.3908
|
||||||
|
198000 8.483418 2000 289.60064
|
||||||
|
199000 8.7664149 2000 309.44306
|
||||||
|
200000 9.0593698 2000 331.9367
|
||||||
|
201000 9.3373818 2000 354.86646
|
||||||
|
202000 9.612149 2000 380.56766
|
||||||
|
203000 9.8876739 2000 406.97399
|
||||||
|
204000 10.152671 2000 435.69917
|
||||||
|
205000 10.415859 2000 465.1954
|
||||||
|
206000 10.67967 2000 494.6045
|
||||||
|
207000 10.941435 2000 522.71704
|
||||||
|
208000 11.205367 2000 550.56072
|
||||||
|
209000 11.471415 2000 580.10547
|
||||||
|
210000 11.738137 2000 610.36222
|
||||||
|
211000 12.006432 2000 641.99128
|
||||||
|
212000 12.270102 2000 676.0736
|
||||||
|
213000 12.531937 2000 711.70118
|
||||||
|
214000 12.797442 2000 747.84561
|
||||||
|
215000 13.062646 2000 785.59575
|
||||||
|
216000 13.33019 2000 826.36549
|
||||||
|
217000 13.598467 2000 868.35085
|
||||||
|
218000 13.863022 2000 911.07041
|
||||||
|
219000 14.127777 2000 953.70251
|
||||||
|
220000 14.391496 2000 997.5717
|
||||||
|
221000 14.655347 2000 1043.5565
|
||||||
|
222000 14.923357 2000 1090.7944
|
||||||
|
223000 15.193349 2000 1140.1324
|
||||||
|
224000 15.462326 2000 1190.6956
|
||||||
|
225000 15.729748 1999 1238.1536
|
||||||
|
226000 15.996867 1998 1286.8076
|
||||||
|
227000 16.261762 1995 1326.9895
|
||||||
|
228000 16.527382 1989 1349.5997
|
||||||
|
229000 16.788356 1984 1370.593
|
||||||
|
230000 17.05426 1968 1344.3763
|
||||||
|
231000 17.320126 1962 1363.7958
|
||||||
|
232000 17.58387 1949 1340.1482
|
||||||
|
233000 17.850221 1940 1348.409
|
||||||
|
234000 18.116595 1929 1335.9703
|
||||||
|
235000 18.383276 1918 1328.201
|
||||||
|
236000 18.650066 1905 1309.6469
|
||||||
|
237000 18.916963 1896 1292.9758
|
||||||
|
238000 19.185209 1884 1266.3598
|
||||||
|
239000 19.453402 1872 1221.0069
|
||||||
|
240000 19.722178 1855 1166.1488
|
||||||
|
241000 19.98987 1842 1126.9482
|
||||||
|
242000 20.257783 1828 1107.128
|
||||||
|
243000 20.523743 1815 1060.6573
|
||||||
|
244000 20.793404 1805 1026.0259
|
||||||
|
245000 21.061462 1797 1009.4924
|
||||||
|
246000 21.325574 1790 995.26136
|
||||||
|
247000 21.587046 1782 976.04886
|
||||||
|
248000 21.840234 1778 989.11589
|
||||||
|
249000 22.09455 1762 903.62508
|
||||||
|
250000 22.356228 1748 852.03257
|
||||||
|
251000 22.602243 1738 807.41049
|
||||||
|
252000 22.852106 1722 738.82529
|
||||||
|
253000 23.097209 1712 706.05657
|
||||||
|
254000 23.341263 1696 626.53135
|
||||||
|
255000 23.58614 1692 613.89548
|
||||||
|
256000 23.83122 1686 598.9367
|
||||||
|
257000 24.076937 1683 589.27487
|
||||||
|
258000 24.321166 1681 591.42793
|
||||||
|
259000 24.566143 1678 595.25383
|
||||||
|
260000 24.820743 1677 617.50379
|
||||||
|
261000 25.057835 1675 623.39319
|
||||||
|
262000 25.294068 1673 627.08829
|
||||||
|
263000 25.526724 1669 623.52963
|
||||||
|
264000 25.766729 1667 626.44957
|
||||||
|
265000 26.005453 1664 631.58936
|
||||||
|
266000 26.244549 1660 605.22452
|
||||||
|
267000 26.478879 1657 611.76935
|
||||||
|
268000 26.71252 1655 611.73538
|
||||||
|
269000 26.951368 1652 624.58227
|
||||||
|
270000 27.186447 1648 625.97446
|
||||||
|
Loop time of 27.1865 on 4 procs for 100000 steps with 1648 atoms
|
||||||
|
|
||||||
|
99.2% CPU use with 4 MPI tasks x no OpenMP threads
|
||||||
|
|
||||||
|
MPI task timing breakdown:
|
||||||
|
Section | min time | avg time | max time |%varavg| %total
|
||||||
|
---------------------------------------------------------------
|
||||||
|
Pair | 4.6257 | 9.631 | 13.049 | 100.0 | 35.43
|
||||||
|
Neigh | 0.1522 | 0.17549 | 0.19588 | 4.3 | 0.65
|
||||||
|
Comm | 1.5797 | 2.7289 | 3.602 | 48.7 | 10.04
|
||||||
|
Output | 0.0014181 | 0.007208 | 0.016675 | 6.8 | 0.03
|
||||||
|
Modify | 7.7129 | 9.0949 | 10.256 | 31.9 | 33.45
|
||||||
|
Other | | 5.549 | | | 20.41
|
||||||
|
|
||||||
|
Nlocal: 412 ave 436 max 388 min
|
||||||
|
Histogram: 1 1 0 0 0 0 0 0 1 1
|
||||||
|
Nghost: 391 ave 629 max 158 min
|
||||||
|
Histogram: 1 0 0 1 0 1 0 0 0 1
|
||||||
|
Neighs: 3406 ave 4479 max 2040 min
|
||||||
|
Histogram: 1 0 0 0 1 0 0 1 0 1
|
||||||
|
|
||||||
|
Total # of neighbors = 13624
|
||||||
|
Ave neighs/atom = 8.26699
|
||||||
|
Neighbor list builds = 260
|
||||||
|
Dangerous builds = 0
|
||||||
|
Total wall time: 0:01:12
|
||||||
609
examples/granregion/log.6Oct16.granregion.mixer.g++.1
Normal file
609
examples/granregion/log.6Oct16.granregion.mixer.g++.1
Normal file
@ -0,0 +1,609 @@
|
|||||||
|
LAMMPS (5 Oct 2016)
|
||||||
|
variable name string mixer
|
||||||
|
|
||||||
|
thermo_modify flush yes
|
||||||
|
variable seed equal 14314
|
||||||
|
|
||||||
|
###############################################
|
||||||
|
# Particle parameters
|
||||||
|
################################################
|
||||||
|
|
||||||
|
variable rlo equal 0.3
|
||||||
|
variable rhi equal 0.6
|
||||||
|
variable dlo equal 2.0*${rlo}
|
||||||
|
variable dlo equal 2.0*0.3
|
||||||
|
variable dhi equal 2.0*${rhi}
|
||||||
|
variable dhi equal 2.0*0.6
|
||||||
|
variable skin equal ${rhi}
|
||||||
|
variable skin equal 0.6
|
||||||
|
|
||||||
|
variable coeffRes equal 0.1
|
||||||
|
variable coeffFric equal 0.5
|
||||||
|
|
||||||
|
variable kn equal 10^5
|
||||||
|
variable kt equal 0.2*${kn}
|
||||||
|
variable kt equal 0.2*100000
|
||||||
|
|
||||||
|
variable gravity equal 1.0
|
||||||
|
variable density equal 1.0
|
||||||
|
|
||||||
|
variable min_mass equal ${density}*4.0/3.0*PI*${rlo}*${rlo}*${rlo}
|
||||||
|
variable min_mass equal 1*4.0/3.0*PI*${rlo}*${rlo}*${rlo}
|
||||||
|
variable min_mass equal 1*4.0/3.0*PI*0.3*${rlo}*${rlo}
|
||||||
|
variable min_mass equal 1*4.0/3.0*PI*0.3*0.3*${rlo}
|
||||||
|
variable min_mass equal 1*4.0/3.0*PI*0.3*0.3*0.3
|
||||||
|
variable a equal (-2.0*log(${coeffRes})/PI)^2
|
||||||
|
variable a equal (-2.0*log(0.1)/PI)^2
|
||||||
|
variable gamma_n equal sqrt($a*2*${kn}/${min_mass}/(1+0.25*$a))
|
||||||
|
variable gamma_n equal sqrt(0.405284734569351*2*${kn}/${min_mass}/(1+0.25*$a))
|
||||||
|
variable gamma_n equal sqrt(0.405284734569351*2*100000/${min_mass}/(1+0.25*$a))
|
||||||
|
variable gamma_n equal sqrt(0.405284734569351*2*100000/0.113097335529233/(1+0.25*$a))
|
||||||
|
variable gamma_n equal sqrt(0.405284734569351*2*100000/0.113097335529233/(1+0.25*0.405284734569351))
|
||||||
|
variable gamma_t equal ${gamma_n}*0.5
|
||||||
|
variable gamma_t equal 806.699778405191*0.5
|
||||||
|
|
||||||
|
variable tcol equal PI/sqrt(2*${kn}/${min_mass}-${gamma_n}/4.0)
|
||||||
|
variable tcol equal PI/sqrt(2*100000/${min_mass}-${gamma_n}/4.0)
|
||||||
|
variable tcol equal PI/sqrt(2*100000/0.113097335529233-${gamma_n}/4.0)
|
||||||
|
variable tcol equal PI/sqrt(2*100000/0.113097335529233-806.699778405191/4.0)
|
||||||
|
|
||||||
|
variable dt equal ${tcol}*0.02
|
||||||
|
variable dt equal 0.00236257621510454*0.02
|
||||||
|
timestep ${dt}
|
||||||
|
timestep 4.72515243020908e-05
|
||||||
|
|
||||||
|
###############################################
|
||||||
|
|
||||||
|
variable dumpfreq equal 1000
|
||||||
|
variable logfreq equal 1000
|
||||||
|
|
||||||
|
newton on
|
||||||
|
atom_style sphere
|
||||||
|
|
||||||
|
boundary p p f
|
||||||
|
|
||||||
|
region boxreg block 0 20 0 20 0 20
|
||||||
|
create_box 1 boxreg
|
||||||
|
Created orthogonal box = (0 0 0) to (20 20 20)
|
||||||
|
1 by 1 by 1 MPI processor grid
|
||||||
|
|
||||||
|
pair_style gran/hertz/history ${kn} ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1
|
||||||
|
pair_style gran/hertz/history 100000 ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1
|
||||||
|
pair_style gran/hertz/history 100000 20000 ${gamma_n} ${gamma_t} ${coeffFric} 1
|
||||||
|
pair_style gran/hertz/history 100000 20000 806.699778405191 ${gamma_t} ${coeffFric} 1
|
||||||
|
pair_style gran/hertz/history 100000 20000 806.699778405191 403.349889202595 ${coeffFric} 1
|
||||||
|
pair_style gran/hertz/history 100000 20000 806.699778405191 403.349889202595 0.5 1
|
||||||
|
pair_coeff * *
|
||||||
|
|
||||||
|
neighbor ${skin} bin
|
||||||
|
neighbor 0.6 bin
|
||||||
|
thermo ${logfreq}
|
||||||
|
thermo 1000
|
||||||
|
|
||||||
|
comm_style brick
|
||||||
|
comm_modify mode multi group all vel yes
|
||||||
|
balance 1.1 shift xyz 20 1.1
|
||||||
|
Neighbor list info ...
|
||||||
|
2 neighbor list requests
|
||||||
|
update every 1 steps, delay 10 steps, check yes
|
||||||
|
max neighbors/atom: 2000, page size: 100000
|
||||||
|
master list distance cutoff = 0
|
||||||
|
ghost atom cutoff = 0
|
||||||
|
binsize = 20 -> bins = 1 1 1
|
||||||
|
fix bal all balance 10000 1.1 shift xyz 20 1.01
|
||||||
|
|
||||||
|
####################### Options specific to pouring #########################
|
||||||
|
|
||||||
|
region insreg cylinder z 10 10 8 10 18 side in units box
|
||||||
|
region cylreg cylinder z 10 10 10 0 20 side in units box
|
||||||
|
|
||||||
|
variable theta equal (step/400000)*2*PI
|
||||||
|
|
||||||
|
region b1 block 2 18 9 11 0 4 side out rotate v_theta 10 10 0 0 0 1 units box
|
||||||
|
region b2 block 9 11 2 18 0 3.99999 side out rotate v_theta 10 10 0 0 0 1 units box
|
||||||
|
|
||||||
|
region mixer intersect 3 cylreg b1 b2 side in
|
||||||
|
|
||||||
|
fix grav all gravity ${gravity} vector 0 0 -1
|
||||||
|
fix grav all gravity 1 vector 0 0 -1
|
||||||
|
fix 1 all nve/sphere
|
||||||
|
|
||||||
|
fix mixwall all wall/gran/region hertz/history ${kn} ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 region mixer
|
||||||
|
fix mixwall all wall/gran/region hertz/history 100000 ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 region mixer
|
||||||
|
fix mixwall all wall/gran/region hertz/history 100000 20000 ${gamma_n} ${gamma_t} ${coeffFric} 1 region mixer
|
||||||
|
fix mixwall all wall/gran/region hertz/history 100000 20000 806.699778405191 ${gamma_t} ${coeffFric} 1 region mixer
|
||||||
|
fix mixwall all wall/gran/region hertz/history 100000 20000 806.699778405191 403.349889202595 ${coeffFric} 1 region mixer
|
||||||
|
fix mixwall all wall/gran/region hertz/history 100000 20000 806.699778405191 403.349889202595 0.5 1 region mixer
|
||||||
|
|
||||||
|
fix ins all pour 1000 1 42424 region insreg diam range ${dlo} ${dhi} dens ${density} ${density}
|
||||||
|
fix ins all pour 1000 1 42424 region insreg diam range 0.6 ${dhi} dens ${density} ${density}
|
||||||
|
fix ins all pour 1000 1 42424 region insreg diam range 0.6 1.2 dens ${density} ${density}
|
||||||
|
fix ins all pour 1000 1 42424 region insreg diam range 0.6 1.2 dens 1 ${density}
|
||||||
|
fix ins all pour 1000 1 42424 region insreg diam range 0.6 1.2 dens 1 1
|
||||||
|
Particle insertion: 444 every 84653 steps, 1000 by step 169307
|
||||||
|
|
||||||
|
#dump 1 all custom ${dumpfreq} ${name}_pour.dump # id type mass diameter x y z
|
||||||
|
|
||||||
|
#dump 2 all image 4000 image.*.jpg type type # axes yes 0.8 0.02 view 60 -30 zoom 1.5 # box no 0.0 axes no 0.0 0.0
|
||||||
|
#dump_modify 2 pad 6
|
||||||
|
|
||||||
|
thermo_style custom step cpu atoms ke v_theta
|
||||||
|
WARNING: New thermo_style command, previous thermo_modify settings will be lost (../output.cpp:690)
|
||||||
|
thermo_modify flush yes lost warn
|
||||||
|
|
||||||
|
run 200000
|
||||||
|
Neighbor list info ...
|
||||||
|
2 neighbor list requests
|
||||||
|
update every 1 steps, delay 10 steps, check yes
|
||||||
|
max neighbors/atom: 2000, page size: 100000
|
||||||
|
master list distance cutoff = 1.8
|
||||||
|
ghost atom cutoff = 1.8
|
||||||
|
binsize = 0.9 -> bins = 23 23 23
|
||||||
|
Memory usage per processor = 2.80779 Mbytes
|
||||||
|
Step CPU Atoms KinEng v_theta
|
||||||
|
0 0 0 -0 0
|
||||||
|
1000 0.16771817 444 -0 0.015707963
|
||||||
|
2000 0.33019304 444 -0 0.031415927
|
||||||
|
3000 0.4894321 444 -0 0.04712389
|
||||||
|
4000 0.64879322 444 -0 0.062831853
|
||||||
|
5000 0.80816507 444 -0 0.078539816
|
||||||
|
6000 0.96711302 444 -0 0.09424778
|
||||||
|
7000 1.1265812 444 -0 0.10995574
|
||||||
|
8000 1.286129 444 -0 0.12566371
|
||||||
|
9000 1.445487 444 -0 0.14137167
|
||||||
|
10000 1.6056392 444 -0 0.15707963
|
||||||
|
11000 1.7650061 444 -0 0.1727876
|
||||||
|
12000 1.9249642 444 -0 0.18849556
|
||||||
|
13000 2.0851831 444 -0 0.20420352
|
||||||
|
14000 2.244523 444 -0 0.21991149
|
||||||
|
15000 2.4043641 444 -0 0.23561945
|
||||||
|
16000 2.5638251 444 -0 0.25132741
|
||||||
|
17000 2.7155962 444 -0 0.26703538
|
||||||
|
18000 2.866904 444 -0 0.28274334
|
||||||
|
19000 3.0188181 444 -0 0.2984513
|
||||||
|
20000 3.17047 444 -0 0.31415927
|
||||||
|
21000 3.3214712 444 -0 0.32986723
|
||||||
|
22000 3.472692 444 -0 0.34557519
|
||||||
|
23000 3.6240032 444 -0 0.36128316
|
||||||
|
24000 3.7753551 444 -0 0.37699112
|
||||||
|
25000 3.926239 444 -0 0.39269908
|
||||||
|
26000 4.0782132 444 -0 0.40840704
|
||||||
|
27000 4.2301712 444 -0 0.42411501
|
||||||
|
28000 4.382267 444 -0 0.43982297
|
||||||
|
29000 4.5339992 444 -0 0.45553093
|
||||||
|
30000 4.6860211 444 -0 0.4712389
|
||||||
|
31000 4.8376751 444 -0 0.48694686
|
||||||
|
32000 4.989748 444 -0 0.50265482
|
||||||
|
33000 5.1418142 444 -0 0.51836279
|
||||||
|
34000 5.294476 444 -0 0.53407075
|
||||||
|
35000 5.4472861 444 -0 0.54977871
|
||||||
|
36000 5.5999811 444 -0 0.56548668
|
||||||
|
37000 5.7526181 444 -0 0.58119464
|
||||||
|
38000 5.9061031 444 -0 0.5969026
|
||||||
|
39000 6.0593271 444 -0 0.61261057
|
||||||
|
40000 6.2123802 444 -0 0.62831853
|
||||||
|
41000 6.3652351 444 -0 0.64402649
|
||||||
|
42000 6.5186551 444 -0 0.65973446
|
||||||
|
43000 6.672132 444 -0 0.67544242
|
||||||
|
44000 6.8245611 444 -0 0.69115038
|
||||||
|
45000 6.9778051 444 -0 0.70685835
|
||||||
|
46000 7.131258 444 -0 0.72256631
|
||||||
|
47000 7.2841291 444 -0 0.73827427
|
||||||
|
48000 7.4379101 444 -0 0.75398224
|
||||||
|
49000 7.5915 444 -0 0.7696902
|
||||||
|
50000 7.7461231 444 -0 0.78539816
|
||||||
|
51000 7.9047191 444 -0 0.80110613
|
||||||
|
52000 8.0634432 444 -0 0.81681409
|
||||||
|
53000 8.2226322 444 -0 0.83252205
|
||||||
|
54000 8.3817451 444 -0 0.84823002
|
||||||
|
55000 8.5419021 444 -0 0.86393798
|
||||||
|
56000 8.701194 444 -0 0.87964594
|
||||||
|
57000 8.8613491 444 -0 0.89535391
|
||||||
|
58000 9.0211501 444 -0 0.91106187
|
||||||
|
59000 9.180917 444 -0 0.92676983
|
||||||
|
60000 9.341964 444 -0 0.9424778
|
||||||
|
61000 9.5026722 444 -0 0.95818576
|
||||||
|
62000 9.6630561 444 -0 0.97389372
|
||||||
|
63000 9.8236201 444 -0 0.98960169
|
||||||
|
64000 9.9854801 444 -0 1.0053096
|
||||||
|
65000 10.148318 444 -0 1.0210176
|
||||||
|
66000 10.311267 444 -0 1.0367256
|
||||||
|
67000 10.476498 444 -0 1.0524335
|
||||||
|
68000 10.640768 444 -0 1.0681415
|
||||||
|
69000 10.804709 444 -0 1.0838495
|
||||||
|
70000 10.969271 444 -0 1.0995574
|
||||||
|
71000 11.133451 444 -0 1.1152654
|
||||||
|
72000 11.299253 444 -0 1.1309734
|
||||||
|
73000 11.463999 444 -0 1.1466813
|
||||||
|
74000 11.62903 444 -0 1.1623893
|
||||||
|
75000 11.795109 444 -0 1.1780972
|
||||||
|
76000 11.962154 444 -0 1.1938052
|
||||||
|
77000 12.1292 444 -0 1.2095132
|
||||||
|
78000 12.298106 444 -0 1.2252211
|
||||||
|
79000 12.46744 444 -0 1.2409291
|
||||||
|
80000 12.637916 444 -0 1.2566371
|
||||||
|
81000 12.808494 444 -0 1.272345
|
||||||
|
82000 12.97813 444 -0 1.288053
|
||||||
|
83000 13.149135 444 -0 1.303761
|
||||||
|
84000 13.32082 444 -0 1.3194689
|
||||||
|
85000 13.56205 888 -0 1.3351769
|
||||||
|
86000 13.908699 888 -0 1.3508848
|
||||||
|
87000 14.254615 888 -0 1.3665928
|
||||||
|
88000 14.600851 888 -0 1.3823008
|
||||||
|
89000 14.946295 888 -0 1.3980087
|
||||||
|
90000 15.291315 888 -0 1.4137167
|
||||||
|
91000 15.637396 888 -0 1.4294247
|
||||||
|
92000 15.981426 888 -0 1.4451326
|
||||||
|
93000 16.327519 888 -0 1.4608406
|
||||||
|
94000 16.675434 888 -0 1.4765485
|
||||||
|
95000 17.023515 888 -0 1.4922565
|
||||||
|
96000 17.372152 888 -0 1.5079645
|
||||||
|
97000 17.719346 888 -0 1.5236724
|
||||||
|
98000 18.067159 888 -0 1.5393804
|
||||||
|
99000 18.414599 888 -0 1.5550884
|
||||||
|
100000 18.764775 888 -0 1.5707963
|
||||||
|
101000 19.114239 888 -0 1.5865043
|
||||||
|
102000 19.464285 888 -0 1.6022123
|
||||||
|
103000 19.813956 888 -0 1.6179202
|
||||||
|
104000 20.163276 888 -0 1.6336282
|
||||||
|
105000 20.553808 888 -0 1.6493361
|
||||||
|
106000 20.904093 888 -0 1.6650441
|
||||||
|
107000 21.25918 888 -0 1.6807521
|
||||||
|
108000 21.615056 888 -0 1.69646
|
||||||
|
109000 21.971067 888 -0 1.712168
|
||||||
|
110000 22.326407 888 -0 1.727876
|
||||||
|
111000 22.68062 888 -0 1.7435839
|
||||||
|
112000 23.03653 888 -0 1.7592919
|
||||||
|
113000 23.39161 888 -0 1.7749998
|
||||||
|
114000 23.751273 888 -0 1.7907078
|
||||||
|
115000 24.106946 888 -0 1.8064158
|
||||||
|
116000 24.461182 888 -0 1.8221237
|
||||||
|
117000 24.797533 888 -0 1.8378317
|
||||||
|
118000 25.133924 888 -0 1.8535397
|
||||||
|
119000 25.472617 888 -0 1.8692476
|
||||||
|
120000 25.810786 888 -0 1.8849556
|
||||||
|
121000 26.147399 888 -0 1.9006636
|
||||||
|
122000 26.485868 888 -0 1.9163715
|
||||||
|
123000 26.82395 888 -0 1.9320795
|
||||||
|
124000 27.162345 888 -0 1.9477874
|
||||||
|
125000 27.501503 888 -0 1.9634954
|
||||||
|
126000 27.843318 888 -0 1.9792034
|
||||||
|
127000 28.183379 888 -0 1.9949113
|
||||||
|
128000 28.525406 888 -0 2.0106193
|
||||||
|
129000 28.869601 888 -0 2.0263273
|
||||||
|
130000 29.216232 888 -0 2.0420352
|
||||||
|
131000 29.562432 888 -0 2.0577432
|
||||||
|
132000 29.95624 888 -0 2.0734512
|
||||||
|
133000 30.308919 888 -0 2.0891591
|
||||||
|
134000 30.662184 888 -0 2.1048671
|
||||||
|
135000 31.015509 888 -0 2.120575
|
||||||
|
136000 31.366132 888 -0 2.136283
|
||||||
|
137000 31.71887 888 -0 2.151991
|
||||||
|
138000 32.0723 888 -0 2.1676989
|
||||||
|
139000 32.428657 888 -0 2.1834069
|
||||||
|
140000 32.781484 888 -0 2.1991149
|
||||||
|
141000 33.133593 888 -0 2.2148228
|
||||||
|
142000 33.487376 888 -0 2.2305308
|
||||||
|
143000 33.838656 888 -0 2.2462387
|
||||||
|
144000 34.188723 888 -0 2.2619467
|
||||||
|
145000 34.540083 888 -0 2.2776547
|
||||||
|
146000 34.895624 888 -0 2.2933626
|
||||||
|
147000 35.25153 888 -0 2.3090706
|
||||||
|
148000 35.607482 888 -0 2.3247786
|
||||||
|
149000 35.9642 888 -0 2.3404865
|
||||||
|
150000 36.321759 888 -0 2.3561945
|
||||||
|
151000 36.667172 888 -0 2.3719025
|
||||||
|
152000 37.013822 888 -0 2.3876104
|
||||||
|
153000 37.362735 888 -0 2.4033184
|
||||||
|
154000 37.712576 888 -0 2.4190263
|
||||||
|
155000 38.063528 888 -0 2.4347343
|
||||||
|
156000 38.414666 888 -0 2.4504423
|
||||||
|
157000 38.766119 888 -0 2.4661502
|
||||||
|
158000 39.115828 888 -0 2.4818582
|
||||||
|
159000 39.470874 888 -0 2.4975662
|
||||||
|
160000 39.827871 888 -0 2.5132741
|
||||||
|
161000 40.184885 888 -0 2.5289821
|
||||||
|
162000 40.543838 888 -0 2.54469
|
||||||
|
163000 40.901814 888 -0 2.560398
|
||||||
|
164000 41.258631 888 -0 2.576106
|
||||||
|
165000 41.619086 888 -0 2.5918139
|
||||||
|
166000 41.977332 888 -0 2.6075219
|
||||||
|
167000 42.33775 888 -0 2.6232299
|
||||||
|
168000 42.701344 888 -0 2.6389378
|
||||||
|
169000 43.067663 888 -0 2.6546458
|
||||||
|
170000 43.461687 1000 -0 2.6703538
|
||||||
|
171000 43.866086 1000 -0 2.6860617
|
||||||
|
172000 44.271406 1000 -0 2.7017697
|
||||||
|
173000 44.677085 1000 -0 2.7174776
|
||||||
|
174000 45.082441 1000 -0 2.7331856
|
||||||
|
175000 45.491593 1000 -0 2.7488936
|
||||||
|
176000 45.903002 1000 -0 2.7646015
|
||||||
|
177000 46.315031 1000 -0 2.7803095
|
||||||
|
178000 46.726531 1000 -0 2.7960175
|
||||||
|
179000 47.140818 1000 -0 2.8117254
|
||||||
|
180000 47.553784 1000 -0 2.8274334
|
||||||
|
181000 47.964021 1000 -0 2.8431414
|
||||||
|
182000 48.376739 1000 -0 2.8588493
|
||||||
|
183000 48.789612 1000 -0 2.8745573
|
||||||
|
184000 49.204073 1000 -0 2.8902652
|
||||||
|
185000 49.642401 1000 -0 2.9059732
|
||||||
|
186000 50.083479 1000 -0 2.9216812
|
||||||
|
187000 50.523357 1000 -0 2.9373891
|
||||||
|
188000 50.963685 1000 -0 2.9530971
|
||||||
|
189000 51.404166 1000 -0 2.9688051
|
||||||
|
190000 51.849094 1000 -0 2.984513
|
||||||
|
191000 52.291805 1000 -0 3.000221
|
||||||
|
192000 52.731855 1000 -0 3.0159289
|
||||||
|
193000 53.174104 1000 -0 3.0316369
|
||||||
|
194000 53.619739 1000 -0 3.0473449
|
||||||
|
195000 54.061019 1000 -0 3.0630528
|
||||||
|
196000 54.501149 1000 -0 3.0787608
|
||||||
|
197000 54.940486 1000 -0 3.0944688
|
||||||
|
198000 55.381843 1000 -0 3.1101767
|
||||||
|
199000 55.822243 1000 -0 3.1258847
|
||||||
|
200000 56.264319 1000 -0 3.1415927
|
||||||
|
Loop time of 56.2643 on 1 procs for 200000 steps with 1000 atoms
|
||||||
|
|
||||||
|
Performance: 14511.970 tau/day, 3554.650 timesteps/s
|
||||||
|
99.9% CPU use with 1 MPI tasks x no OpenMP threads
|
||||||
|
|
||||||
|
MPI task timing breakdown:
|
||||||
|
Section | min time | avg time | max time |%varavg| %total
|
||||||
|
---------------------------------------------------------------
|
||||||
|
Pair | 4.6309 | 4.6309 | 4.6309 | 0.0 | 8.23
|
||||||
|
Neigh | 0.071456 | 0.071456 | 0.071456 | 0.0 | 0.13
|
||||||
|
Comm | 0.50064 | 0.50064 | 0.50064 | 0.0 | 0.89
|
||||||
|
Output | 0.0039163 | 0.0039163 | 0.0039163 | 0.0 | 0.01
|
||||||
|
Modify | 50.189 | 50.189 | 50.189 | 0.0 | 89.20
|
||||||
|
Other | | 0.8688 | | | 1.54
|
||||||
|
|
||||||
|
Nlocal: 1000 ave 1000 max 1000 min
|
||||||
|
Histogram: 1 0 0 0 0 0 0 0 0 0
|
||||||
|
Nghost: 183 ave 183 max 183 min
|
||||||
|
Histogram: 1 0 0 0 0 0 0 0 0 0
|
||||||
|
Neighs: 3926 ave 3926 max 3926 min
|
||||||
|
Histogram: 1 0 0 0 0 0 0 0 0 0
|
||||||
|
|
||||||
|
Total # of neighbors = 3926
|
||||||
|
Ave neighs/atom = 3.926
|
||||||
|
Neighbor list builds = 217
|
||||||
|
Dangerous builds = 0
|
||||||
|
unfix ins
|
||||||
|
run 200000
|
||||||
|
Neighbor list info ...
|
||||||
|
2 neighbor list requests
|
||||||
|
update every 1 steps, delay 10 steps, check yes
|
||||||
|
max neighbors/atom: 2000, page size: 100000
|
||||||
|
master list distance cutoff = 1.79826
|
||||||
|
ghost atom cutoff = 1.79826
|
||||||
|
binsize = 0.899132 -> bins = 23 23 23
|
||||||
|
Memory usage per processor = 8.62017 Mbytes
|
||||||
|
Step CPU Atoms KinEng v_theta
|
||||||
|
200000 0 1000 0.90078559 3.1415927
|
||||||
|
201000 0.44072509 1000 0.90377135 3.1573006
|
||||||
|
202000 0.8800211 1000 0.89194106 3.1730086
|
||||||
|
203000 1.3210881 1000 0.8940532 3.1887165
|
||||||
|
204000 1.762887 1000 0.8967696 3.2044245
|
||||||
|
205000 2.2080901 1000 0.89758718 3.2201325
|
||||||
|
206000 2.6548181 1000 0.89434418 3.2358404
|
||||||
|
207000 3.1002531 1000 0.87633906 3.2515484
|
||||||
|
208000 3.547334 1000 0.86721615 3.2672564
|
||||||
|
209000 3.993988 1000 0.86214817 3.2829643
|
||||||
|
210000 4.4423161 1000 0.85463743 3.2986723
|
||||||
|
211000 4.889446 1000 0.85744914 3.3143802
|
||||||
|
212000 5.3357229 1000 0.84702799 3.3300882
|
||||||
|
213000 5.780273 1000 0.84375104 3.3457962
|
||||||
|
214000 6.2249129 1000 0.83820701 3.3615041
|
||||||
|
215000 6.670651 1000 0.83566708 3.3772121
|
||||||
|
216000 7.113143 1000 0.83620798 3.3929201
|
||||||
|
217000 7.5359521 1000 0.83581605 3.408628
|
||||||
|
218000 7.9623129 1000 0.84045719 3.424336
|
||||||
|
219000 8.3878851 1000 0.85410521 3.440044
|
||||||
|
220000 8.8153811 1000 0.84336839 3.4557519
|
||||||
|
221000 9.244349 1000 0.85145747 3.4714599
|
||||||
|
222000 9.6728511 1000 0.8476916 3.4871678
|
||||||
|
223000 10.104052 1000 0.8412701 3.5028758
|
||||||
|
224000 10.532736 1000 0.8390277 3.5185838
|
||||||
|
225000 10.959564 1000 0.8359107 3.5342917
|
||||||
|
226000 11.38617 1000 0.83920631 3.5499997
|
||||||
|
227000 11.814104 1000 0.83930526 3.5657077
|
||||||
|
228000 12.241758 1000 0.83152308 3.5814156
|
||||||
|
229000 12.67198 1000 0.81211079 3.5971236
|
||||||
|
230000 13.101597 1000 0.80395018 3.6128316
|
||||||
|
231000 13.532943 1000 0.79991397 3.6285395
|
||||||
|
232000 13.969412 1000 0.80828959 3.6442475
|
||||||
|
233000 14.403885 1000 0.80892923 3.6599554
|
||||||
|
234000 14.833452 1000 0.82048914 3.6756634
|
||||||
|
235000 15.266211 1000 0.8174713 3.6913714
|
||||||
|
236000 15.697822 1000 0.81898551 3.7070793
|
||||||
|
237000 16.133023 1000 0.82034714 3.7227873
|
||||||
|
238000 16.569559 1000 0.81950728 3.7384953
|
||||||
|
239000 17.006308 1000 0.82152915 3.7542032
|
||||||
|
240000 17.445493 1000 0.83217597 3.7699112
|
||||||
|
241000 17.885585 1000 0.83464253 3.7856191
|
||||||
|
242000 18.324268 1000 0.84326166 3.8013271
|
||||||
|
243000 18.763748 1000 0.84235055 3.8170351
|
||||||
|
244000 19.203869 1000 0.83325408 3.832743
|
||||||
|
245000 19.645 1000 0.82577315 3.848451
|
||||||
|
246000 20.08666 1000 0.83923456 3.864159
|
||||||
|
247000 20.530596 1000 0.84153419 3.8798669
|
||||||
|
248000 20.971984 1000 0.85768309 3.8955749
|
||||||
|
249000 21.413571 1000 0.86910799 3.9112829
|
||||||
|
250000 21.854153 1000 0.8775521 3.9269908
|
||||||
|
251000 22.302884 1000 0.87299296 3.9426988
|
||||||
|
252000 22.753789 1000 0.86613861 3.9584067
|
||||||
|
253000 23.202458 1000 0.85513456 3.9741147
|
||||||
|
254000 23.655372 1000 0.84629733 3.9898227
|
||||||
|
255000 24.108225 1000 0.84154885 4.0055306
|
||||||
|
256000 24.561535 1000 0.84162715 4.0212386
|
||||||
|
257000 25.012338 1000 0.83959672 4.0369466
|
||||||
|
258000 25.466506 1000 0.83577695 4.0526545
|
||||||
|
259000 25.919168 1000 0.83021368 4.0683625
|
||||||
|
260000 26.37215 1000 0.81106893 4.0840704
|
||||||
|
261000 26.823834 1000 0.79884608 4.0997784
|
||||||
|
262000 27.276505 1000 0.78360303 4.1154864
|
||||||
|
263000 27.728503 1000 0.77030843 4.1311943
|
||||||
|
264000 28.181969 1000 0.76127974 4.1469023
|
||||||
|
265000 28.636329 1000 0.75553065 4.1626103
|
||||||
|
266000 29.090593 1000 0.75332019 4.1783182
|
||||||
|
267000 29.549547 1000 0.74670528 4.1940262
|
||||||
|
268000 30.008774 1000 0.74216141 4.2097342
|
||||||
|
269000 30.463826 1000 0.74564756 4.2254421
|
||||||
|
270000 30.920159 1000 0.7416035 4.2411501
|
||||||
|
271000 31.377192 1000 0.73061389 4.256858
|
||||||
|
272000 31.836268 1000 0.71620113 4.272566
|
||||||
|
273000 32.291662 1000 0.70840181 4.288274
|
||||||
|
274000 32.743646 1000 0.70946906 4.3039819
|
||||||
|
275000 33.197723 1000 0.70418049 4.3196899
|
||||||
|
276000 33.651405 1000 0.69591327 4.3353979
|
||||||
|
277000 34.106289 1000 0.69499716 4.3511058
|
||||||
|
278000 34.564324 1000 0.69242545 4.3668138
|
||||||
|
279000 35.020887 1000 0.69690811 4.3825218
|
||||||
|
280000 35.478222 1000 0.70402124 4.3982297
|
||||||
|
281000 35.938226 1000 0.71936578 4.4139377
|
||||||
|
282000 36.39808 1000 0.72439386 4.4296456
|
||||||
|
283000 36.855587 1000 0.72221632 4.4453536
|
||||||
|
284000 37.309629 1000 0.70387029 4.4610616
|
||||||
|
285000 37.791869 1000 0.70505716 4.4767695
|
||||||
|
286000 38.277853 1000 0.70731734 4.4924775
|
||||||
|
287000 38.764774 1000 0.71149743 4.5081855
|
||||||
|
288000 39.24815 1000 0.70994023 4.5238934
|
||||||
|
289000 39.728005 1000 0.69794225 4.5396014
|
||||||
|
290000 40.206798 1000 0.6905751 4.5553093
|
||||||
|
291000 40.678802 1000 0.68652972 4.5710173
|
||||||
|
292000 41.147991 1000 0.6743341 4.5867253
|
||||||
|
293000 41.618836 1000 0.67357205 4.6024332
|
||||||
|
294000 42.08982 1000 0.66465346 4.6181412
|
||||||
|
295000 42.561323 1000 0.65587678 4.6338492
|
||||||
|
296000 43.034196 1000 0.65455827 4.6495571
|
||||||
|
297000 43.505748 1000 0.65135145 4.6652651
|
||||||
|
298000 43.975299 1000 0.65400349 4.6809731
|
||||||
|
299000 44.447556 1000 0.66186899 4.696681
|
||||||
|
300000 44.926073 1000 0.66844193 4.712389
|
||||||
|
301000 45.402658 1000 0.67720506 4.7280969
|
||||||
|
302000 45.880643 1000 0.68554918 4.7438049
|
||||||
|
303000 46.359444 1000 0.69321489 4.7595129
|
||||||
|
304000 46.841542 1000 0.70345329 4.7752208
|
||||||
|
305000 47.323539 1000 0.70172137 4.7909288
|
||||||
|
306000 47.809358 1000 0.70989191 4.8066368
|
||||||
|
307000 48.291664 1000 0.70546377 4.8223447
|
||||||
|
308000 48.770327 1000 0.70820389 4.8380527
|
||||||
|
309000 49.248974 1000 0.69637815 4.8537606
|
||||||
|
310000 49.72965 1000 0.68679532 4.8694686
|
||||||
|
311000 50.204503 1000 0.68824984 4.8851766
|
||||||
|
312000 50.683502 1000 0.68647935 4.9008845
|
||||||
|
313000 51.161407 1000 0.68289956 4.9165925
|
||||||
|
314000 51.638365 1000 0.68356788 4.9323005
|
||||||
|
315000 52.114341 1000 0.68269829 4.9480084
|
||||||
|
316000 52.590791 1000 0.67961769 4.9637164
|
||||||
|
317000 53.043198 1000 0.67437047 4.9794244
|
||||||
|
318000 53.499062 1000 0.66534726 4.9951323
|
||||||
|
319000 53.954004 1000 0.66052125 5.0108403
|
||||||
|
320000 54.409776 1000 0.65351962 5.0265482
|
||||||
|
321000 54.867935 1000 0.64155441 5.0422562
|
||||||
|
322000 55.324528 1000 0.63463177 5.0579642
|
||||||
|
323000 55.780399 1000 0.62945691 5.0736721
|
||||||
|
324000 56.239189 1000 0.63156746 5.0893801
|
||||||
|
325000 56.697767 1000 0.63883759 5.1050881
|
||||||
|
326000 57.155746 1000 0.64703516 5.120796
|
||||||
|
327000 57.618744 1000 0.65532057 5.136504
|
||||||
|
328000 58.083021 1000 0.66697061 5.152212
|
||||||
|
329000 58.547646 1000 0.66896271 5.1679199
|
||||||
|
330000 59.011518 1000 0.66551963 5.1836279
|
||||||
|
331000 59.478689 1000 0.65083894 5.1993358
|
||||||
|
332000 59.94887 1000 0.65171641 5.2150438
|
||||||
|
333000 60.416096 1000 0.65122777 5.2307518
|
||||||
|
334000 60.889826 1000 0.65844334 5.2464597
|
||||||
|
335000 61.363105 1000 0.66931264 5.2621677
|
||||||
|
336000 61.832482 1000 0.66847415 5.2778757
|
||||||
|
337000 62.300731 1000 0.65863495 5.2935836
|
||||||
|
338000 62.769011 1000 0.64977739 5.3092916
|
||||||
|
339000 63.232862 1000 0.6454395 5.3249995
|
||||||
|
340000 63.699228 1000 0.63484999 5.3407075
|
||||||
|
341000 64.165101 1000 0.62753448 5.3564155
|
||||||
|
342000 64.631118 1000 0.62781442 5.3721234
|
||||||
|
343000 65.099469 1000 0.63813963 5.3878314
|
||||||
|
344000 65.576568 1000 0.6485183 5.4035394
|
||||||
|
345000 66.054068 1000 0.67111606 5.4192473
|
||||||
|
346000 66.531747 1000 0.68435581 5.4349553
|
||||||
|
347000 67.007296 1000 0.69526046 5.4506633
|
||||||
|
348000 67.478242 1000 0.6876531 5.4663712
|
||||||
|
349000 67.944422 1000 0.67962108 5.4820792
|
||||||
|
350000 68.410281 1000 0.6800934 5.4977871
|
||||||
|
351000 68.862112 1000 0.67658657 5.5134951
|
||||||
|
352000 69.316476 1000 0.67043355 5.5292031
|
||||||
|
353000 69.76356 1000 0.66863154 5.544911
|
||||||
|
354000 70.212144 1000 0.65806572 5.560619
|
||||||
|
355000 70.658375 1000 0.6498301 5.576327
|
||||||
|
356000 71.103688 1000 0.64384284 5.5920349
|
||||||
|
357000 71.551545 1000 0.64228421 5.6077429
|
||||||
|
358000 72.001238 1000 0.6408188 5.6234508
|
||||||
|
359000 72.45158 1000 0.64388002 5.6391588
|
||||||
|
360000 72.906369 1000 0.64347896 5.6548668
|
||||||
|
361000 73.358316 1000 0.65055455 5.6705747
|
||||||
|
362000 73.814119 1000 0.65545061 5.6862827
|
||||||
|
363000 74.277034 1000 0.6667431 5.7019907
|
||||||
|
364000 74.737593 1000 0.6869856 5.7176986
|
||||||
|
365000 75.20209 1000 0.69651407 5.7334066
|
||||||
|
366000 75.667448 1000 0.70824091 5.7491146
|
||||||
|
367000 76.132389 1000 0.7144853 5.7648225
|
||||||
|
368000 76.596067 1000 0.71780876 5.7805305
|
||||||
|
369000 77.059749 1000 0.7159398 5.7962384
|
||||||
|
370000 77.519236 1000 0.70648968 5.8119464
|
||||||
|
371000 77.977404 1000 0.69796557 5.8276544
|
||||||
|
372000 78.434017 1000 0.69876891 5.8433623
|
||||||
|
373000 78.887217 1000 0.70908957 5.8590703
|
||||||
|
374000 79.341658 1000 0.70831124 5.8747783
|
||||||
|
375000 79.802381 1000 0.70631178 5.8904862
|
||||||
|
376000 80.265165 1000 0.70533876 5.9061942
|
||||||
|
377000 80.727821 1000 0.70097225 5.9219022
|
||||||
|
378000 81.187538 1000 0.70139806 5.9376101
|
||||||
|
379000 81.645627 1000 0.69691027 5.9533181
|
||||||
|
380000 82.105692 1000 0.69163881 5.969026
|
||||||
|
381000 82.56483 1000 0.68973183 5.984734
|
||||||
|
382000 83.025126 1000 0.68059207 6.000442
|
||||||
|
383000 83.482786 1000 0.68096466 6.0161499
|
||||||
|
384000 83.939808 1000 0.6698933 6.0318579
|
||||||
|
385000 84.418408 1000 0.66795846 6.0475659
|
||||||
|
386000 84.898757 1000 0.66153854 6.0632738
|
||||||
|
387000 85.376756 1000 0.66560025 6.0789818
|
||||||
|
388000 85.853575 1000 0.66671699 6.0946897
|
||||||
|
389000 86.32865 1000 0.66013733 6.1103977
|
||||||
|
390000 86.807772 1000 0.66181942 6.1261057
|
||||||
|
391000 87.290335 1000 0.66281334 6.1418136
|
||||||
|
392000 87.773899 1000 0.66657879 6.1575216
|
||||||
|
393000 88.248567 1000 0.66608992 6.1732296
|
||||||
|
394000 88.723817 1000 0.66128929 6.1889375
|
||||||
|
395000 89.200089 1000 0.65764538 6.2046455
|
||||||
|
396000 89.671826 1000 0.65073015 6.2203535
|
||||||
|
397000 90.142595 1000 0.64967355 6.2360614
|
||||||
|
398000 90.616654 1000 0.65193957 6.2517694
|
||||||
|
399000 91.093856 1000 0.64936977 6.2674773
|
||||||
|
400000 91.571678 1000 0.65849743 6.2831853
|
||||||
|
Loop time of 91.5717 on 1 procs for 200000 steps with 1000 atoms
|
||||||
|
|
||||||
|
Performance: 8916.580 tau/day, 2184.081 timesteps/s
|
||||||
|
99.9% CPU use with 1 MPI tasks x no OpenMP threads
|
||||||
|
|
||||||
|
MPI task timing breakdown:
|
||||||
|
Section | min time | avg time | max time |%varavg| %total
|
||||||
|
---------------------------------------------------------------
|
||||||
|
Pair | 13.827 | 13.827 | 13.827 | 0.0 | 15.10
|
||||||
|
Neigh | 0.097679 | 0.097679 | 0.097679 | 0.0 | 0.11
|
||||||
|
Comm | 1.5668 | 1.5668 | 1.5668 | 0.0 | 1.71
|
||||||
|
Output | 0.0042615 | 0.0042615 | 0.0042615 | 0.0 | 0.00
|
||||||
|
Modify | 74.804 | 74.804 | 74.804 | 0.0 | 81.69
|
||||||
|
Other | | 1.273 | | | 1.39
|
||||||
|
|
||||||
|
Nlocal: 1000 ave 1000 max 1000 min
|
||||||
|
Histogram: 1 0 0 0 0 0 0 0 0 0
|
||||||
|
Nghost: 289 ave 289 max 289 min
|
||||||
|
Histogram: 1 0 0 0 0 0 0 0 0 0
|
||||||
|
Neighs: 5091 ave 5091 max 5091 min
|
||||||
|
Histogram: 1 0 0 0 0 0 0 0 0 0
|
||||||
|
|
||||||
|
Total # of neighbors = 5091
|
||||||
|
Ave neighs/atom = 5.091
|
||||||
|
Neighbor list builds = 160
|
||||||
|
Dangerous builds = 0
|
||||||
|
Total wall time: 0:02:27
|
||||||
609
examples/granregion/log.6Oct16.granregion.mixer.g++.4
Normal file
609
examples/granregion/log.6Oct16.granregion.mixer.g++.4
Normal file
@ -0,0 +1,609 @@
|
|||||||
|
LAMMPS (5 Oct 2016)
|
||||||
|
variable name string mixer
|
||||||
|
|
||||||
|
thermo_modify flush yes
|
||||||
|
variable seed equal 14314
|
||||||
|
|
||||||
|
###############################################
|
||||||
|
# Particle parameters
|
||||||
|
################################################
|
||||||
|
|
||||||
|
variable rlo equal 0.3
|
||||||
|
variable rhi equal 0.6
|
||||||
|
variable dlo equal 2.0*${rlo}
|
||||||
|
variable dlo equal 2.0*0.3
|
||||||
|
variable dhi equal 2.0*${rhi}
|
||||||
|
variable dhi equal 2.0*0.6
|
||||||
|
variable skin equal ${rhi}
|
||||||
|
variable skin equal 0.6
|
||||||
|
|
||||||
|
variable coeffRes equal 0.1
|
||||||
|
variable coeffFric equal 0.5
|
||||||
|
|
||||||
|
variable kn equal 10^5
|
||||||
|
variable kt equal 0.2*${kn}
|
||||||
|
variable kt equal 0.2*100000
|
||||||
|
|
||||||
|
variable gravity equal 1.0
|
||||||
|
variable density equal 1.0
|
||||||
|
|
||||||
|
variable min_mass equal ${density}*4.0/3.0*PI*${rlo}*${rlo}*${rlo}
|
||||||
|
variable min_mass equal 1*4.0/3.0*PI*${rlo}*${rlo}*${rlo}
|
||||||
|
variable min_mass equal 1*4.0/3.0*PI*0.3*${rlo}*${rlo}
|
||||||
|
variable min_mass equal 1*4.0/3.0*PI*0.3*0.3*${rlo}
|
||||||
|
variable min_mass equal 1*4.0/3.0*PI*0.3*0.3*0.3
|
||||||
|
variable a equal (-2.0*log(${coeffRes})/PI)^2
|
||||||
|
variable a equal (-2.0*log(0.1)/PI)^2
|
||||||
|
variable gamma_n equal sqrt($a*2*${kn}/${min_mass}/(1+0.25*$a))
|
||||||
|
variable gamma_n equal sqrt(0.405284734569351*2*${kn}/${min_mass}/(1+0.25*$a))
|
||||||
|
variable gamma_n equal sqrt(0.405284734569351*2*100000/${min_mass}/(1+0.25*$a))
|
||||||
|
variable gamma_n equal sqrt(0.405284734569351*2*100000/0.113097335529233/(1+0.25*$a))
|
||||||
|
variable gamma_n equal sqrt(0.405284734569351*2*100000/0.113097335529233/(1+0.25*0.405284734569351))
|
||||||
|
variable gamma_t equal ${gamma_n}*0.5
|
||||||
|
variable gamma_t equal 806.699778405191*0.5
|
||||||
|
|
||||||
|
variable tcol equal PI/sqrt(2*${kn}/${min_mass}-${gamma_n}/4.0)
|
||||||
|
variable tcol equal PI/sqrt(2*100000/${min_mass}-${gamma_n}/4.0)
|
||||||
|
variable tcol equal PI/sqrt(2*100000/0.113097335529233-${gamma_n}/4.0)
|
||||||
|
variable tcol equal PI/sqrt(2*100000/0.113097335529233-806.699778405191/4.0)
|
||||||
|
|
||||||
|
variable dt equal ${tcol}*0.02
|
||||||
|
variable dt equal 0.00236257621510454*0.02
|
||||||
|
timestep ${dt}
|
||||||
|
timestep 4.72515243020908e-05
|
||||||
|
|
||||||
|
###############################################
|
||||||
|
|
||||||
|
variable dumpfreq equal 1000
|
||||||
|
variable logfreq equal 1000
|
||||||
|
|
||||||
|
newton on
|
||||||
|
atom_style sphere
|
||||||
|
|
||||||
|
boundary p p f
|
||||||
|
|
||||||
|
region boxreg block 0 20 0 20 0 20
|
||||||
|
create_box 1 boxreg
|
||||||
|
Created orthogonal box = (0 0 0) to (20 20 20)
|
||||||
|
1 by 2 by 2 MPI processor grid
|
||||||
|
|
||||||
|
pair_style gran/hertz/history ${kn} ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1
|
||||||
|
pair_style gran/hertz/history 100000 ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1
|
||||||
|
pair_style gran/hertz/history 100000 20000 ${gamma_n} ${gamma_t} ${coeffFric} 1
|
||||||
|
pair_style gran/hertz/history 100000 20000 806.699778405191 ${gamma_t} ${coeffFric} 1
|
||||||
|
pair_style gran/hertz/history 100000 20000 806.699778405191 403.349889202595 ${coeffFric} 1
|
||||||
|
pair_style gran/hertz/history 100000 20000 806.699778405191 403.349889202595 0.5 1
|
||||||
|
pair_coeff * *
|
||||||
|
|
||||||
|
neighbor ${skin} bin
|
||||||
|
neighbor 0.6 bin
|
||||||
|
thermo ${logfreq}
|
||||||
|
thermo 1000
|
||||||
|
|
||||||
|
comm_style brick
|
||||||
|
comm_modify mode multi group all vel yes
|
||||||
|
balance 1.1 shift xyz 20 1.1
|
||||||
|
Neighbor list info ...
|
||||||
|
2 neighbor list requests
|
||||||
|
update every 1 steps, delay 10 steps, check yes
|
||||||
|
max neighbors/atom: 2000, page size: 100000
|
||||||
|
master list distance cutoff = 0
|
||||||
|
ghost atom cutoff = 0
|
||||||
|
binsize = 20 -> bins = 1 1 1
|
||||||
|
fix bal all balance 10000 1.1 shift xyz 20 1.01
|
||||||
|
|
||||||
|
####################### Options specific to pouring #########################
|
||||||
|
|
||||||
|
region insreg cylinder z 10 10 8 10 18 side in units box
|
||||||
|
region cylreg cylinder z 10 10 10 0 20 side in units box
|
||||||
|
|
||||||
|
variable theta equal (step/400000)*2*PI
|
||||||
|
|
||||||
|
region b1 block 2 18 9 11 0 4 side out rotate v_theta 10 10 0 0 0 1 units box
|
||||||
|
region b2 block 9 11 2 18 0 3.99999 side out rotate v_theta 10 10 0 0 0 1 units box
|
||||||
|
|
||||||
|
region mixer intersect 3 cylreg b1 b2 side in
|
||||||
|
|
||||||
|
fix grav all gravity ${gravity} vector 0 0 -1
|
||||||
|
fix grav all gravity 1 vector 0 0 -1
|
||||||
|
fix 1 all nve/sphere
|
||||||
|
|
||||||
|
fix mixwall all wall/gran/region hertz/history ${kn} ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 region mixer
|
||||||
|
fix mixwall all wall/gran/region hertz/history 100000 ${kt} ${gamma_n} ${gamma_t} ${coeffFric} 1 region mixer
|
||||||
|
fix mixwall all wall/gran/region hertz/history 100000 20000 ${gamma_n} ${gamma_t} ${coeffFric} 1 region mixer
|
||||||
|
fix mixwall all wall/gran/region hertz/history 100000 20000 806.699778405191 ${gamma_t} ${coeffFric} 1 region mixer
|
||||||
|
fix mixwall all wall/gran/region hertz/history 100000 20000 806.699778405191 403.349889202595 ${coeffFric} 1 region mixer
|
||||||
|
fix mixwall all wall/gran/region hertz/history 100000 20000 806.699778405191 403.349889202595 0.5 1 region mixer
|
||||||
|
|
||||||
|
fix ins all pour 1000 1 42424 region insreg diam range ${dlo} ${dhi} dens ${density} ${density}
|
||||||
|
fix ins all pour 1000 1 42424 region insreg diam range 0.6 ${dhi} dens ${density} ${density}
|
||||||
|
fix ins all pour 1000 1 42424 region insreg diam range 0.6 1.2 dens ${density} ${density}
|
||||||
|
fix ins all pour 1000 1 42424 region insreg diam range 0.6 1.2 dens 1 ${density}
|
||||||
|
fix ins all pour 1000 1 42424 region insreg diam range 0.6 1.2 dens 1 1
|
||||||
|
Particle insertion: 444 every 84653 steps, 1000 by step 169307
|
||||||
|
|
||||||
|
#dump 1 all custom ${dumpfreq} ${name}_pour.dump # id type mass diameter x y z
|
||||||
|
|
||||||
|
#dump 2 all image 4000 image.*.jpg type type # axes yes 0.8 0.02 view 60 -30 zoom 1.5 # box no 0.0 axes no 0.0 0.0
|
||||||
|
#dump_modify 2 pad 6
|
||||||
|
|
||||||
|
thermo_style custom step cpu atoms ke v_theta
|
||||||
|
WARNING: New thermo_style command, previous thermo_modify settings will be lost (../output.cpp:690)
|
||||||
|
thermo_modify flush yes lost warn
|
||||||
|
|
||||||
|
run 200000
|
||||||
|
Neighbor list info ...
|
||||||
|
2 neighbor list requests
|
||||||
|
update every 1 steps, delay 10 steps, check yes
|
||||||
|
max neighbors/atom: 2000, page size: 100000
|
||||||
|
master list distance cutoff = 1.8
|
||||||
|
ghost atom cutoff = 1.8
|
||||||
|
binsize = 0.9 -> bins = 23 23 23
|
||||||
|
Memory usage per processor = 2.76258 Mbytes
|
||||||
|
Step CPU Atoms KinEng v_theta
|
||||||
|
0 0 0 -0 0
|
||||||
|
1000 0.10398197 444 -0 0.015707963
|
||||||
|
2000 0.20485091 444 -0 0.031415927
|
||||||
|
3000 0.3069241 444 -0 0.04712389
|
||||||
|
4000 0.40875912 444 -0 0.062831853
|
||||||
|
5000 0.50989199 444 -0 0.078539816
|
||||||
|
6000 0.60949397 444 -0 0.09424778
|
||||||
|
7000 0.708915 444 -0 0.10995574
|
||||||
|
8000 0.80870605 444 -0 0.12566371
|
||||||
|
9000 0.90752602 444 -0 0.14137167
|
||||||
|
10000 1.0054469 444 -0 0.15707963
|
||||||
|
11000 1.072515 444 -0 0.1727876
|
||||||
|
12000 1.139096 444 -0 0.18849556
|
||||||
|
13000 1.2049479 444 -0 0.20420352
|
||||||
|
14000 1.2707851 444 -0 0.21991149
|
||||||
|
15000 1.3377919 444 -0 0.23561945
|
||||||
|
16000 1.405757 444 -0 0.25132741
|
||||||
|
17000 1.471797 444 -0 0.26703538
|
||||||
|
18000 1.538343 444 -0 0.28274334
|
||||||
|
19000 1.6035659 444 -0 0.2984513
|
||||||
|
20000 1.6690421 444 -0 0.31415927
|
||||||
|
21000 1.729399 444 -0 0.32986723
|
||||||
|
22000 1.7885301 444 -0 0.34557519
|
||||||
|
23000 1.8496239 444 -0 0.36128316
|
||||||
|
24000 1.913486 444 -0 0.37699112
|
||||||
|
25000 1.977428 444 -0 0.39269908
|
||||||
|
26000 2.04282 444 -0 0.40840704
|
||||||
|
27000 2.1089439 444 -0 0.42411501
|
||||||
|
28000 2.1759491 444 -0 0.43982297
|
||||||
|
29000 2.243813 444 -0 0.45553093
|
||||||
|
30000 2.312156 444 -0 0.4712389
|
||||||
|
31000 2.3742449 444 -0 0.48694686
|
||||||
|
32000 2.435447 444 -0 0.50265482
|
||||||
|
33000 2.495765 444 -0 0.51836279
|
||||||
|
34000 2.556865 444 -0 0.53407075
|
||||||
|
35000 2.6201291 444 -0 0.54977871
|
||||||
|
36000 2.6843281 444 -0 0.56548668
|
||||||
|
37000 2.7505059 444 -0 0.58119464
|
||||||
|
38000 2.817348 444 -0 0.5969026
|
||||||
|
39000 2.8837919 444 -0 0.61261057
|
||||||
|
40000 2.951216 444 -0 0.62831853
|
||||||
|
41000 3.012845 444 -0 0.64402649
|
||||||
|
42000 3.074688 444 -0 0.65973446
|
||||||
|
43000 3.13556 444 -0 0.67544242
|
||||||
|
44000 3.1965449 444 -0 0.69115038
|
||||||
|
45000 3.2582009 444 -0 0.70685835
|
||||||
|
46000 3.3201971 444 -0 0.72256631
|
||||||
|
47000 3.3819821 444 -0 0.73827427
|
||||||
|
48000 3.4455171 444 -0 0.75398224
|
||||||
|
49000 3.508738 444 -0 0.7696902
|
||||||
|
50000 3.5734961 444 -0 0.78539816
|
||||||
|
51000 3.6333289 444 -0 0.80110613
|
||||||
|
52000 3.694531 444 -0 0.81681409
|
||||||
|
53000 3.757041 444 -0 0.83252205
|
||||||
|
54000 3.820612 444 -0 0.84823002
|
||||||
|
55000 3.8852711 444 -0 0.86393798
|
||||||
|
56000 3.950211 444 -0 0.87964594
|
||||||
|
57000 4.015795 444 -0 0.89535391
|
||||||
|
58000 4.0818441 444 -0 0.91106187
|
||||||
|
59000 4.1476641 444 -0 0.92676983
|
||||||
|
60000 4.2141221 444 -0 0.9424778
|
||||||
|
61000 4.276612 444 -0 0.95818576
|
||||||
|
62000 4.339952 444 -0 0.97389372
|
||||||
|
63000 4.404351 444 -0 0.98960169
|
||||||
|
64000 4.4700999 444 -0 1.0053096
|
||||||
|
65000 4.5364759 444 -0 1.0210176
|
||||||
|
66000 4.605715 444 -0 1.0367256
|
||||||
|
67000 4.677629 444 -0 1.0524335
|
||||||
|
68000 4.7494669 444 -0 1.0681415
|
||||||
|
69000 4.8212609 444 -0 1.0838495
|
||||||
|
70000 4.894326 444 -0 1.0995574
|
||||||
|
71000 4.9639831 444 -0 1.1152654
|
||||||
|
72000 5.0345671 444 -0 1.1309734
|
||||||
|
73000 5.1048689 444 -0 1.1466813
|
||||||
|
74000 5.175498 444 -0 1.1623893
|
||||||
|
75000 5.2477591 444 -0 1.1780972
|
||||||
|
76000 5.3205409 444 -0 1.1938052
|
||||||
|
77000 5.394573 444 -0 1.2095132
|
||||||
|
78000 5.4685309 444 -0 1.2252211
|
||||||
|
79000 5.5431759 444 -0 1.2409291
|
||||||
|
80000 5.6212411 444 -0 1.2566371
|
||||||
|
81000 5.6890731 444 -0 1.272345
|
||||||
|
82000 5.7582159 444 -0 1.288053
|
||||||
|
83000 5.8298571 444 -0 1.303761
|
||||||
|
84000 5.9029069 444 -0 1.3194689
|
||||||
|
85000 6.0061591 888 -0 1.3351769
|
||||||
|
86000 6.1541281 888 -0 1.3508848
|
||||||
|
87000 6.3004079 888 -0 1.3665928
|
||||||
|
88000 6.4460659 888 -0 1.3823008
|
||||||
|
89000 6.591886 888 -0 1.3980087
|
||||||
|
90000 6.7376239 888 -0 1.4137167
|
||||||
|
91000 6.850734 888 -0 1.4294247
|
||||||
|
92000 6.9631939 888 -0 1.4451326
|
||||||
|
93000 7.0786369 888 -0 1.4608406
|
||||||
|
94000 7.1958089 888 -0 1.4765485
|
||||||
|
95000 7.3130219 888 -0 1.4922565
|
||||||
|
96000 7.430867 888 -0 1.5079645
|
||||||
|
97000 7.5498819 888 -0 1.5236724
|
||||||
|
98000 7.673686 888 -0 1.5393804
|
||||||
|
99000 7.7966969 888 -0 1.5550884
|
||||||
|
100000 7.921546 888 -0 1.5707963
|
||||||
|
101000 8.0396931 888 -0 1.5865043
|
||||||
|
102000 8.1583791 888 -0 1.6022123
|
||||||
|
103000 8.276613 888 -0 1.6179202
|
||||||
|
104000 8.3952639 888 -0 1.6336282
|
||||||
|
105000 8.514308 888 -0 1.6493361
|
||||||
|
106000 8.6361439 888 -0 1.6650441
|
||||||
|
107000 8.762326 888 -0 1.6807521
|
||||||
|
108000 8.8900061 888 -0 1.69646
|
||||||
|
109000 9.0179789 888 -0 1.712168
|
||||||
|
110000 9.1496761 888 -0 1.727876
|
||||||
|
111000 9.2728269 888 -0 1.7435839
|
||||||
|
112000 9.398078 888 -0 1.7592919
|
||||||
|
113000 9.519841 888 -0 1.7749998
|
||||||
|
114000 9.642343 888 -0 1.7907078
|
||||||
|
115000 9.7643859 888 -0 1.8064158
|
||||||
|
116000 9.8893411 888 -0 1.8221237
|
||||||
|
117000 10.01295 888 -0 1.8378317
|
||||||
|
118000 10.137574 888 -0 1.8535397
|
||||||
|
119000 10.263738 888 -0 1.8692476
|
||||||
|
120000 10.388673 888 -0 1.8849556
|
||||||
|
121000 10.507599 888 -0 1.9006636
|
||||||
|
122000 10.623901 888 -0 1.9163715
|
||||||
|
123000 10.740251 888 -0 1.9320795
|
||||||
|
124000 10.857467 888 -0 1.9477874
|
||||||
|
125000 10.975856 888 -0 1.9634954
|
||||||
|
126000 11.096002 888 -0 1.9792034
|
||||||
|
127000 11.217218 888 -0 1.9949113
|
||||||
|
128000 11.341925 888 -0 2.0106193
|
||||||
|
129000 11.467607 888 -0 2.0263273
|
||||||
|
130000 11.59517 888 -0 2.0420352
|
||||||
|
131000 11.71358 888 -0 2.0577432
|
||||||
|
132000 11.833024 888 -0 2.0734512
|
||||||
|
133000 11.954967 888 -0 2.0891591
|
||||||
|
134000 12.078482 888 -0 2.1048671
|
||||||
|
135000 12.202435 888 -0 2.120575
|
||||||
|
136000 12.327202 888 -0 2.136283
|
||||||
|
137000 12.453334 888 -0 2.151991
|
||||||
|
138000 12.583142 888 -0 2.1676989
|
||||||
|
139000 12.718396 888 -0 2.1834069
|
||||||
|
140000 12.854459 888 -0 2.1991149
|
||||||
|
141000 12.981024 888 -0 2.2148228
|
||||||
|
142000 13.108875 888 -0 2.2305308
|
||||||
|
143000 13.236802 888 -0 2.2462387
|
||||||
|
144000 13.36691 888 -0 2.2619467
|
||||||
|
145000 13.500126 888 -0 2.2776547
|
||||||
|
146000 13.633748 888 -0 2.2933626
|
||||||
|
147000 13.769077 888 -0 2.3090706
|
||||||
|
148000 13.90522 888 -0 2.3247786
|
||||||
|
149000 14.040417 888 -0 2.3404865
|
||||||
|
150000 14.176483 888 -0 2.3561945
|
||||||
|
151000 14.303389 888 -0 2.3719025
|
||||||
|
152000 14.432187 888 -0 2.3876104
|
||||||
|
153000 14.559857 888 -0 2.4033184
|
||||||
|
154000 14.691256 888 -0 2.4190263
|
||||||
|
155000 14.823413 888 -0 2.4347343
|
||||||
|
156000 14.956581 888 -0 2.4504423
|
||||||
|
157000 15.090666 888 -0 2.4661502
|
||||||
|
158000 15.228012 888 -0 2.4818582
|
||||||
|
159000 15.364569 888 -0 2.4975662
|
||||||
|
160000 15.501847 888 -0 2.5132741
|
||||||
|
161000 15.642772 888 -0 2.5289821
|
||||||
|
162000 15.783889 888 -0 2.54469
|
||||||
|
163000 15.926508 888 -0 2.560398
|
||||||
|
164000 16.07293 888 -0 2.576106
|
||||||
|
165000 16.221293 888 -0 2.5918139
|
||||||
|
166000 16.371738 888 -0 2.6075219
|
||||||
|
167000 16.523027 888 -0 2.6232299
|
||||||
|
168000 16.675525 888 -0 2.6389378
|
||||||
|
169000 16.830527 888 -0 2.6546458
|
||||||
|
170000 16.989955 1000 -0 2.6703538
|
||||||
|
171000 17.14772 1000 -0 2.6860617
|
||||||
|
172000 17.305565 1000 -0 2.7017697
|
||||||
|
173000 17.463517 1000 -0 2.7174776
|
||||||
|
174000 17.623862 1000 -0 2.7331856
|
||||||
|
175000 17.788165 1000 -0 2.7488936
|
||||||
|
176000 17.952028 1000 -0 2.7646015
|
||||||
|
177000 18.119269 1000 -0 2.7803095
|
||||||
|
178000 18.285714 1000 -0 2.7960175
|
||||||
|
179000 18.452439 1000 -0 2.8117254
|
||||||
|
180000 18.621119 1000 -0 2.8274334
|
||||||
|
181000 18.777982 1000 -0 2.8431414
|
||||||
|
182000 18.940248 1000 -0 2.8588493
|
||||||
|
183000 19.105385 1000 -0 2.8745573
|
||||||
|
184000 19.273934 1000 -0 2.8902652
|
||||||
|
185000 19.450922 1000 -0 2.9059732
|
||||||
|
186000 19.625563 1000 -0 2.9216812
|
||||||
|
187000 19.801329 1000 -0 2.9373891
|
||||||
|
188000 19.976869 1000 -0 2.9530971
|
||||||
|
189000 20.151134 1000 -0 2.9688051
|
||||||
|
190000 20.319214 1000 -0 2.984513
|
||||||
|
191000 20.485033 1000 -0 3.000221
|
||||||
|
192000 20.652254 1000 -0 3.0159289
|
||||||
|
193000 20.820876 1000 -0 3.0316369
|
||||||
|
194000 20.988597 1000 -0 3.0473449
|
||||||
|
195000 21.154705 1000 -0 3.0630528
|
||||||
|
196000 21.322634 1000 -0 3.0787608
|
||||||
|
197000 21.489394 1000 -0 3.0944688
|
||||||
|
198000 21.659512 1000 -0 3.1101767
|
||||||
|
199000 21.833228 1000 -0 3.1258847
|
||||||
|
200000 22.006487 1000 -0 3.1415927
|
||||||
|
Loop time of 22.0065 on 4 procs for 200000 steps with 1000 atoms
|
||||||
|
|
||||||
|
Performance: 37102.953 tau/day, 9088.222 timesteps/s
|
||||||
|
99.1% CPU use with 4 MPI tasks x no OpenMP threads
|
||||||
|
|
||||||
|
MPI task timing breakdown:
|
||||||
|
Section | min time | avg time | max time |%varavg| %total
|
||||||
|
---------------------------------------------------------------
|
||||||
|
Pair | 0.67692 | 1.166 | 1.6704 | 44.4 | 5.30
|
||||||
|
Neigh | 0.01562 | 0.018723 | 0.0222 | 2.3 | 0.09
|
||||||
|
Comm | 3.845 | 4.4454 | 5.0282 | 26.1 | 20.20
|
||||||
|
Output | 0.0043464 | 0.0052906 | 0.0056455 | 0.8 | 0.02
|
||||||
|
Modify | 12.239 | 13.152 | 14.347 | 25.1 | 59.76
|
||||||
|
Other | | 3.22 | | | 14.63
|
||||||
|
|
||||||
|
Nlocal: 250 ave 257 max 244 min
|
||||||
|
Histogram: 1 1 0 0 0 0 1 0 0 1
|
||||||
|
Nghost: 305.75 ave 372 max 242 min
|
||||||
|
Histogram: 1 0 0 1 0 1 0 0 0 1
|
||||||
|
Neighs: 982.5 ave 1380 max 572 min
|
||||||
|
Histogram: 2 0 0 0 0 0 0 0 0 2
|
||||||
|
|
||||||
|
Total # of neighbors = 3930
|
||||||
|
Ave neighs/atom = 3.93
|
||||||
|
Neighbor list builds = 216
|
||||||
|
Dangerous builds = 0
|
||||||
|
unfix ins
|
||||||
|
run 200000
|
||||||
|
Neighbor list info ...
|
||||||
|
2 neighbor list requests
|
||||||
|
update every 1 steps, delay 10 steps, check yes
|
||||||
|
max neighbors/atom: 2000, page size: 100000
|
||||||
|
master list distance cutoff = 1.79826
|
||||||
|
ghost atom cutoff = 1.79826
|
||||||
|
binsize = 0.899132 -> bins = 23 23 23
|
||||||
|
Memory usage per processor = 8.63577 Mbytes
|
||||||
|
Step CPU Atoms KinEng v_theta
|
||||||
|
200000 0 1000 0.90316284 3.1415927
|
||||||
|
201000 0.16518497 1000 0.8867387 3.1573006
|
||||||
|
202000 0.33065486 1000 0.88745316 3.1730086
|
||||||
|
203000 0.4991529 1000 0.87793424 3.1887165
|
||||||
|
204000 0.6695168 1000 0.87009551 3.2044245
|
||||||
|
205000 0.83599901 1000 0.86431259 3.2201325
|
||||||
|
206000 1.001833 1000 0.85039776 3.2358404
|
||||||
|
207000 1.166487 1000 0.82897867 3.2515484
|
||||||
|
208000 1.3331649 1000 0.82069182 3.2672564
|
||||||
|
209000 1.5031869 1000 0.82349024 3.2829643
|
||||||
|
210000 1.6751509 1000 0.81859611 3.2986723
|
||||||
|
211000 1.846776 1000 0.82053992 3.3143802
|
||||||
|
212000 2.0198569 1000 0.82832647 3.3300882
|
||||||
|
213000 2.1932938 1000 0.82676865 3.3457962
|
||||||
|
214000 2.3676898 1000 0.82425781 3.3615041
|
||||||
|
215000 2.5424879 1000 0.83127148 3.3772121
|
||||||
|
216000 2.715348 1000 0.83925992 3.3929201
|
||||||
|
217000 2.8844988 1000 0.84390181 3.408628
|
||||||
|
218000 3.0485029 1000 0.85705713 3.424336
|
||||||
|
219000 3.211767 1000 0.85325946 3.440044
|
||||||
|
220000 3.3767338 1000 0.85641557 3.4557519
|
||||||
|
221000 3.5419538 1000 0.86922287 3.4714599
|
||||||
|
222000 3.710084 1000 0.89591143 3.4871678
|
||||||
|
223000 3.880873 1000 0.90395821 3.5028758
|
||||||
|
224000 4.054816 1000 0.91161431 3.5185838
|
||||||
|
225000 4.2260928 1000 0.92716425 3.5342917
|
||||||
|
226000 4.3996999 1000 0.91664886 3.5499997
|
||||||
|
227000 4.5679309 1000 0.9128853 3.5657077
|
||||||
|
228000 4.7353978 1000 0.91063998 3.5814156
|
||||||
|
229000 4.9045198 1000 0.90616712 3.5971236
|
||||||
|
230000 5.079206 1000 0.9042797 3.6128316
|
||||||
|
231000 5.252316 1000 0.91588137 3.6285395
|
||||||
|
232000 5.4218178 1000 0.92322871 3.6442475
|
||||||
|
233000 5.592988 1000 0.92370885 3.6599554
|
||||||
|
234000 5.753634 1000 0.91531408 3.6756634
|
||||||
|
235000 5.9159088 1000 0.91016621 3.6913714
|
||||||
|
236000 6.0817358 1000 0.89501073 3.7070793
|
||||||
|
237000 6.249059 1000 0.88504426 3.7227873
|
||||||
|
238000 6.4182718 1000 0.88268268 3.7384953
|
||||||
|
239000 6.5897119 1000 0.87811868 3.7542032
|
||||||
|
240000 6.758353 1000 0.88272663 3.7699112
|
||||||
|
241000 6.928581 1000 0.87751512 3.7856191
|
||||||
|
242000 7.0978079 1000 0.87017281 3.8013271
|
||||||
|
243000 7.268832 1000 0.86587613 3.8170351
|
||||||
|
244000 7.439904 1000 0.85157794 3.832743
|
||||||
|
245000 7.6105168 1000 0.8291738 3.848451
|
||||||
|
246000 7.7830069 1000 0.82315948 3.864159
|
||||||
|
247000 7.9578128 1000 0.81231703 3.8798669
|
||||||
|
248000 8.134944 1000 0.79931415 3.8955749
|
||||||
|
249000 8.3061719 1000 0.78877578 3.9112829
|
||||||
|
250000 8.476692 1000 0.78519942 3.9269908
|
||||||
|
251000 8.6525538 1000 0.78837716 3.9426988
|
||||||
|
252000 8.8288019 1000 0.79621044 3.9584067
|
||||||
|
253000 9.006846 1000 0.78744385 3.9741147
|
||||||
|
254000 9.1839809 1000 0.78810047 3.9898227
|
||||||
|
255000 9.3600328 1000 0.79053484 4.0055306
|
||||||
|
256000 9.538172 1000 0.79976932 4.0212386
|
||||||
|
257000 9.7188668 1000 0.81724577 4.0369466
|
||||||
|
258000 9.9032769 1000 0.81135963 4.0526545
|
||||||
|
259000 10.084928 1000 0.82017101 4.0683625
|
||||||
|
260000 10.266693 1000 0.82352898 4.0840704
|
||||||
|
261000 10.449515 1000 0.81662689 4.0997784
|
||||||
|
262000 10.630166 1000 0.82707216 4.1154864
|
||||||
|
263000 10.812056 1000 0.82001278 4.1311943
|
||||||
|
264000 10.991668 1000 0.81136264 4.1469023
|
||||||
|
265000 11.172162 1000 0.80507755 4.1626103
|
||||||
|
266000 11.353101 1000 0.80247583 4.1783182
|
||||||
|
267000 11.533476 1000 0.78870449 4.1940262
|
||||||
|
268000 11.716022 1000 0.77775428 4.2097342
|
||||||
|
269000 11.900351 1000 0.78170639 4.2254421
|
||||||
|
270000 12.083609 1000 0.78023258 4.2411501
|
||||||
|
271000 12.266298 1000 0.76257507 4.256858
|
||||||
|
272000 12.449454 1000 0.75871195 4.272566
|
||||||
|
273000 12.633748 1000 0.75909277 4.288274
|
||||||
|
274000 12.820916 1000 0.76329234 4.3039819
|
||||||
|
275000 13.004197 1000 0.76188557 4.3196899
|
||||||
|
276000 13.188507 1000 0.75974847 4.3353979
|
||||||
|
277000 13.372202 1000 0.75392834 4.3511058
|
||||||
|
278000 13.557712 1000 0.74837333 4.3668138
|
||||||
|
279000 13.747933 1000 0.74268307 4.3825218
|
||||||
|
280000 13.934871 1000 0.73840427 4.3982297
|
||||||
|
281000 14.11717 1000 0.73817851 4.4139377
|
||||||
|
282000 14.30208 1000 0.73666069 4.4296456
|
||||||
|
283000 14.485039 1000 0.74064713 4.4453536
|
||||||
|
284000 14.671087 1000 0.73916222 4.4610616
|
||||||
|
285000 14.863267 1000 0.73225442 4.4767695
|
||||||
|
286000 15.050005 1000 0.7312283 4.4924775
|
||||||
|
287000 15.234556 1000 0.72947519 4.5081855
|
||||||
|
288000 15.422593 1000 0.72469992 4.5238934
|
||||||
|
289000 15.609153 1000 0.70843645 4.5396014
|
||||||
|
290000 15.797906 1000 0.69731415 4.5553093
|
||||||
|
291000 15.983677 1000 0.69099822 4.5710173
|
||||||
|
292000 16.168935 1000 0.68855366 4.5867253
|
||||||
|
293000 16.355853 1000 0.69826256 4.6024332
|
||||||
|
294000 16.544831 1000 0.70211589 4.6181412
|
||||||
|
295000 16.733875 1000 0.7055847 4.6338492
|
||||||
|
296000 16.918698 1000 0.69692413 4.6495571
|
||||||
|
297000 17.100869 1000 0.68027227 4.6652651
|
||||||
|
298000 17.280404 1000 0.67254493 4.6809731
|
||||||
|
299000 17.46406 1000 0.67767946 4.696681
|
||||||
|
300000 17.652748 1000 0.68480172 4.712389
|
||||||
|
301000 17.84199 1000 0.67864643 4.7280969
|
||||||
|
302000 18.025759 1000 0.67656342 4.7438049
|
||||||
|
303000 18.208747 1000 0.67719641 4.7595129
|
||||||
|
304000 18.391225 1000 0.68049491 4.7752208
|
||||||
|
305000 18.576276 1000 0.68230722 4.7909288
|
||||||
|
306000 18.764125 1000 0.67985 4.8066368
|
||||||
|
307000 18.956063 1000 0.67790944 4.8223447
|
||||||
|
308000 19.147159 1000 0.6836647 4.8380527
|
||||||
|
309000 19.339173 1000 0.69705355 4.8537606
|
||||||
|
310000 19.530591 1000 0.69858847 4.8694686
|
||||||
|
311000 19.720214 1000 0.69448554 4.8851766
|
||||||
|
312000 19.907717 1000 0.68878539 4.9008845
|
||||||
|
313000 20.088793 1000 0.68810484 4.9165925
|
||||||
|
314000 20.268118 1000 0.68483484 4.9323005
|
||||||
|
315000 20.445564 1000 0.67732034 4.9480084
|
||||||
|
316000 20.627415 1000 0.67943319 4.9637164
|
||||||
|
317000 20.807826 1000 0.67326868 4.9794244
|
||||||
|
318000 20.983587 1000 0.67762092 4.9951323
|
||||||
|
319000 21.156655 1000 0.68914624 5.0108403
|
||||||
|
320000 21.331391 1000 0.69872806 5.0265482
|
||||||
|
321000 21.506313 1000 0.71510434 5.0422562
|
||||||
|
322000 21.679505 1000 0.71452122 5.0579642
|
||||||
|
323000 21.85396 1000 0.71765429 5.0736721
|
||||||
|
324000 22.02904 1000 0.72748838 5.0893801
|
||||||
|
325000 22.205191 1000 0.72974854 5.1050881
|
||||||
|
326000 22.38063 1000 0.73324928 5.120796
|
||||||
|
327000 22.555817 1000 0.72479525 5.136504
|
||||||
|
328000 22.729859 1000 0.71942855 5.152212
|
||||||
|
329000 22.903234 1000 0.71890587 5.1679199
|
||||||
|
330000 23.078575 1000 0.73495891 5.1836279
|
||||||
|
331000 23.252865 1000 0.74306733 5.1993358
|
||||||
|
332000 23.427175 1000 0.75274051 5.2150438
|
||||||
|
333000 23.604881 1000 0.75981346 5.2307518
|
||||||
|
334000 23.789045 1000 0.75410165 5.2464597
|
||||||
|
335000 23.971105 1000 0.74802374 5.2621677
|
||||||
|
336000 24.150954 1000 0.73111266 5.2778757
|
||||||
|
337000 24.331991 1000 0.72226021 5.2935836
|
||||||
|
338000 24.515157 1000 0.70866271 5.3092916
|
||||||
|
339000 24.69639 1000 0.70253496 5.3249995
|
||||||
|
340000 24.879524 1000 0.69381505 5.3407075
|
||||||
|
341000 25.061928 1000 0.68285569 5.3564155
|
||||||
|
342000 25.2437 1000 0.67262303 5.3721234
|
||||||
|
343000 25.423809 1000 0.67160137 5.3878314
|
||||||
|
344000 25.605531 1000 0.67658439 5.4035394
|
||||||
|
345000 25.78848 1000 0.67113748 5.4192473
|
||||||
|
346000 25.969866 1000 0.67506296 5.4349553
|
||||||
|
347000 26.152485 1000 0.67686518 5.4506633
|
||||||
|
348000 26.335445 1000 0.68878941 5.4663712
|
||||||
|
349000 26.522271 1000 0.70728493 5.4820792
|
||||||
|
350000 26.709942 1000 0.70870657 5.4977871
|
||||||
|
351000 26.889998 1000 0.71541489 5.5134951
|
||||||
|
352000 27.069872 1000 0.71827633 5.5292031
|
||||||
|
353000 27.249259 1000 0.7099127 5.544911
|
||||||
|
354000 27.428386 1000 0.70507946 5.560619
|
||||||
|
355000 27.607797 1000 0.70709703 5.576327
|
||||||
|
356000 27.788887 1000 0.70637714 5.5920349
|
||||||
|
357000 27.975344 1000 0.7088694 5.6077429
|
||||||
|
358000 28.164236 1000 0.70907948 5.6234508
|
||||||
|
359000 28.352999 1000 0.71504714 5.6391588
|
||||||
|
360000 28.539172 1000 0.71417205 5.6548668
|
||||||
|
361000 28.722691 1000 0.70716852 5.6705747
|
||||||
|
362000 28.906856 1000 0.70193967 5.6862827
|
||||||
|
363000 29.087598 1000 0.69786793 5.7019907
|
||||||
|
364000 29.268141 1000 0.68714789 5.7176986
|
||||||
|
365000 29.450765 1000 0.68170443 5.7334066
|
||||||
|
366000 29.633131 1000 0.67832571 5.7491146
|
||||||
|
367000 29.816219 1000 0.67809457 5.7648225
|
||||||
|
368000 29.999479 1000 0.66886004 5.7805305
|
||||||
|
369000 30.182675 1000 0.67233336 5.7962384
|
||||||
|
370000 30.36698 1000 0.67433369 5.8119464
|
||||||
|
371000 30.550787 1000 0.67478226 5.8276544
|
||||||
|
372000 30.736018 1000 0.67882814 5.8433623
|
||||||
|
373000 30.922576 1000 0.68494254 5.8590703
|
||||||
|
374000 31.107558 1000 0.69046765 5.8747783
|
||||||
|
375000 31.291329 1000 0.69398953 5.8904862
|
||||||
|
376000 31.474582 1000 0.68692367 5.9061942
|
||||||
|
377000 31.656979 1000 0.674184 5.9219022
|
||||||
|
378000 31.83851 1000 0.65899449 5.9376101
|
||||||
|
379000 32.019869 1000 0.65198402 5.9533181
|
||||||
|
380000 32.200375 1000 0.64366122 5.969026
|
||||||
|
381000 32.381651 1000 0.64443345 5.984734
|
||||||
|
382000 32.561897 1000 0.64655912 6.000442
|
||||||
|
383000 32.743947 1000 0.64894161 6.0161499
|
||||||
|
384000 32.927231 1000 0.65259561 6.0318579
|
||||||
|
385000 33.11882 1000 0.65230446 6.0475659
|
||||||
|
386000 33.311072 1000 0.64177598 6.0632738
|
||||||
|
387000 33.50435 1000 0.63900349 6.0789818
|
||||||
|
388000 33.695734 1000 0.64611067 6.0946897
|
||||||
|
389000 33.885915 1000 0.64943993 6.1103977
|
||||||
|
390000 34.076093 1000 0.66303716 6.1261057
|
||||||
|
391000 34.264909 1000 0.68916583 6.1418136
|
||||||
|
392000 34.45411 1000 0.71501556 6.1575216
|
||||||
|
393000 34.644116 1000 0.73685375 6.1732296
|
||||||
|
394000 34.834608 1000 0.74461041 6.1889375
|
||||||
|
395000 35.025693 1000 0.75251204 6.2046455
|
||||||
|
396000 35.217372 1000 0.75493054 6.2203535
|
||||||
|
397000 35.407008 1000 0.77028775 6.2360614
|
||||||
|
398000 35.594868 1000 0.7686439 6.2517694
|
||||||
|
399000 35.778411 1000 0.75167376 6.2674773
|
||||||
|
400000 35.962646 1000 0.73505917 6.2831853
|
||||||
|
Loop time of 35.9627 on 4 procs for 200000 steps with 1000 atoms
|
||||||
|
|
||||||
|
Performance: 22704.278 tau/day, 5561.323 timesteps/s
|
||||||
|
99.0% CPU use with 4 MPI tasks x no OpenMP threads
|
||||||
|
|
||||||
|
MPI task timing breakdown:
|
||||||
|
Section | min time | avg time | max time |%varavg| %total
|
||||||
|
---------------------------------------------------------------
|
||||||
|
Pair | 2.0549 | 3.4094 | 4.9773 | 72.1 | 9.48
|
||||||
|
Neigh | 0.022087 | 0.026923 | 0.032716 | 2.9 | 0.07
|
||||||
|
Comm | 7.3555 | 9.2143 | 10.854 | 53.0 | 25.62
|
||||||
|
Output | 0.0046289 | 0.0058927 | 0.0071292 | 1.4 | 0.02
|
||||||
|
Modify | 17.504 | 19.601 | 22.342 | 44.9 | 54.50
|
||||||
|
Other | | 3.705 | | | 10.30
|
||||||
|
|
||||||
|
Nlocal: 250 ave 269 max 225 min
|
||||||
|
Histogram: 1 0 0 0 0 1 0 1 0 1
|
||||||
|
Nghost: 408.5 ave 500 max 320 min
|
||||||
|
Histogram: 2 0 0 0 0 0 0 0 0 2
|
||||||
|
Neighs: 1262.25 ave 1665 max 880 min
|
||||||
|
Histogram: 1 0 1 0 0 0 0 1 0 1
|
||||||
|
|
||||||
|
Total # of neighbors = 5049
|
||||||
|
Ave neighs/atom = 5.049
|
||||||
|
Neighbor list builds = 166
|
||||||
|
Dangerous builds = 0
|
||||||
|
Total wall time: 0:00:57
|
||||||
@ -12,7 +12,8 @@
|
|||||||
------------------------------------------------------------------------- */
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
/* ----------------------------------------------------------------------
|
||||||
Contributing authors: Leo Silbert (SNL), Gary Grest (SNL)
|
Contributing authors: Leo Silbert (SNL), Gary Grest (SNL),
|
||||||
|
Dan Bolintineanu (SNL)
|
||||||
------------------------------------------------------------------------- */
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
@ -34,8 +35,11 @@ using namespace LAMMPS_NS;
|
|||||||
using namespace FixConst;
|
using namespace FixConst;
|
||||||
using namespace MathConst;
|
using namespace MathConst;
|
||||||
|
|
||||||
enum{XPLANE=0,YPLANE=1,ZPLANE=2,ZCYLINDER}; // XYZ PLANE need to be 0,1,2
|
// XYZ PLANE need to be 0,1,2
|
||||||
enum{HOOKE,HOOKE_HISTORY,HERTZ_HISTORY};
|
|
||||||
|
enum{XPLANE=0,YPLANE=1,ZPLANE=2,ZCYLINDER,REGION};
|
||||||
|
enum{HOOKE,HOOKE_HISTORY,HERTZ_HISTORY,BONDED_HISTORY};
|
||||||
|
enum{NONE,CONSTANT,EQUAL};
|
||||||
|
|
||||||
#define BIG 1.0e20
|
#define BIG 1.0e20
|
||||||
|
|
||||||
@ -44,7 +48,7 @@ enum{HOOKE,HOOKE_HISTORY,HERTZ_HISTORY};
|
|||||||
FixWallGran::FixWallGran(LAMMPS *lmp, int narg, char **arg) :
|
FixWallGran::FixWallGran(LAMMPS *lmp, int narg, char **arg) :
|
||||||
Fix(lmp, narg, arg)
|
Fix(lmp, narg, arg)
|
||||||
{
|
{
|
||||||
if (narg < 11) error->all(FLERR,"Illegal fix wall/gran command");
|
if (narg < 4) error->all(FLERR,"Illegal fix wall/gran command");
|
||||||
|
|
||||||
if (!atom->sphere_flag)
|
if (!atom->sphere_flag)
|
||||||
error->all(FLERR,"Fix wall/gran requires atom style sphere");
|
error->all(FLERR,"Fix wall/gran requires atom style sphere");
|
||||||
@ -53,43 +57,71 @@ FixWallGran::FixWallGran(LAMMPS *lmp, int narg, char **arg) :
|
|||||||
create_attribute = 1;
|
create_attribute = 1;
|
||||||
|
|
||||||
// set interaction style
|
// set interaction style
|
||||||
|
// disable bonded/history option for now
|
||||||
|
|
||||||
if (strcmp(arg[3],"hooke") == 0) pairstyle = HOOKE;
|
if (strcmp(arg[3],"hooke") == 0) pairstyle = HOOKE;
|
||||||
else if (strcmp(arg[3],"hooke/history") == 0) pairstyle = HOOKE_HISTORY;
|
else if (strcmp(arg[3],"hooke/history") == 0) pairstyle = HOOKE_HISTORY;
|
||||||
else if (strcmp(arg[3],"hertz/history") == 0) pairstyle = HERTZ_HISTORY;
|
else if (strcmp(arg[3],"hertz/history") == 0) pairstyle = HERTZ_HISTORY;
|
||||||
|
//else if (strcmp(arg[3],"bonded/history") == 0) pairstyle = BONDED_HISTORY;
|
||||||
else error->all(FLERR,"Invalid fix wall/gran interaction style");
|
else error->all(FLERR,"Invalid fix wall/gran interaction style");
|
||||||
|
|
||||||
history = 1;
|
history = 1;
|
||||||
if (pairstyle == HOOKE) history = 0;
|
if (pairstyle == HOOKE) history = 0;
|
||||||
|
|
||||||
// particle/wall coefficients
|
// wall/particle coefficients
|
||||||
|
|
||||||
kn = force->numeric(FLERR,arg[4]);
|
int iarg;
|
||||||
if (strcmp(arg[5],"NULL") == 0) kt = kn * 2.0/7.0;
|
|
||||||
else kt = force->numeric(FLERR,arg[5]);
|
|
||||||
|
|
||||||
gamman = force->numeric(FLERR,arg[6]);
|
if (pairstyle != BONDED_HISTORY) {
|
||||||
if (strcmp(arg[7],"NULL") == 0) gammat = 0.5 * gamman;
|
if (narg < 11) error->all(FLERR,"Illegal fix wall/gran command");
|
||||||
else gammat = force->numeric(FLERR,arg[7]);
|
|
||||||
|
|
||||||
xmu = force->numeric(FLERR,arg[8]);
|
kn = force->numeric(FLERR,arg[4]);
|
||||||
int dampflag = force->inumeric(FLERR,arg[9]);
|
if (strcmp(arg[5],"NULL") == 0) kt = kn * 2.0/7.0;
|
||||||
if (dampflag == 0) gammat = 0.0;
|
else kt = force->numeric(FLERR,arg[5]);
|
||||||
|
|
||||||
|
gamman = force->numeric(FLERR,arg[6]);
|
||||||
|
if (strcmp(arg[7],"NULL") == 0) gammat = 0.5 * gamman;
|
||||||
|
else gammat = force->numeric(FLERR,arg[7]);
|
||||||
|
|
||||||
|
xmu = force->numeric(FLERR,arg[8]);
|
||||||
|
int dampflag = force->inumeric(FLERR,arg[9]);
|
||||||
|
if (dampflag == 0) gammat = 0.0;
|
||||||
|
|
||||||
|
if (kn < 0.0 || kt < 0.0 || gamman < 0.0 || gammat < 0.0 ||
|
||||||
|
xmu < 0.0 || xmu > 10000.0 || dampflag < 0 || dampflag > 1)
|
||||||
|
error->all(FLERR,"Illegal fix wall/gran command");
|
||||||
|
|
||||||
|
// convert Kn and Kt from pressure units to force/distance^2 if Hertzian
|
||||||
|
|
||||||
|
if (pairstyle == HERTZ_HISTORY) {
|
||||||
|
kn /= force->nktv2p;
|
||||||
|
kt /= force->nktv2p;
|
||||||
|
}
|
||||||
|
|
||||||
if (kn < 0.0 || kt < 0.0 || gamman < 0.0 || gammat < 0.0 ||
|
iarg = 10;
|
||||||
xmu < 0.0 || xmu > 10000.0 || dampflag < 0 || dampflag > 1)
|
}
|
||||||
error->all(FLERR,"Illegal fix wall/gran command");
|
|
||||||
|
|
||||||
// convert Kn and Kt from pressure units to force/distance^2 if Hertzian
|
else {
|
||||||
|
if (narg < 10) error->all(FLERR,"Illegal fix wall/gran command");
|
||||||
|
|
||||||
if (pairstyle == HERTZ_HISTORY) {
|
E = force->numeric(FLERR,arg[4]);
|
||||||
kn /= force->nktv2p;
|
G = force->numeric(FLERR,arg[5]);
|
||||||
kt /= force->nktv2p;
|
SurfEnergy = force->numeric(FLERR,arg[6]);
|
||||||
|
// Note: this doesn't get used, check w/ Jeremy?
|
||||||
|
gamman = force->numeric(FLERR,arg[7]);
|
||||||
|
|
||||||
|
xmu = force->numeric(FLERR,arg[8]);
|
||||||
|
// pois = E/(2.0*G) - 1.0;
|
||||||
|
// kn = 2.0*E/(3.0*(1.0+pois)*(1.0-pois));
|
||||||
|
// gammat=0.5*gamman;
|
||||||
|
|
||||||
|
iarg = 9;
|
||||||
}
|
}
|
||||||
|
|
||||||
// wallstyle args
|
// wallstyle args
|
||||||
|
|
||||||
|
idregion = NULL;
|
||||||
|
|
||||||
int iarg = 10;
|
|
||||||
if (strcmp(arg[iarg],"xplane") == 0) {
|
if (strcmp(arg[iarg],"xplane") == 0) {
|
||||||
if (narg < iarg+3) error->all(FLERR,"Illegal fix wall/gran command");
|
if (narg < iarg+3) error->all(FLERR,"Illegal fix wall/gran command");
|
||||||
wallstyle = XPLANE;
|
wallstyle = XPLANE;
|
||||||
@ -118,15 +150,22 @@ FixWallGran::FixWallGran(LAMMPS *lmp, int narg, char **arg) :
|
|||||||
if (narg < iarg+2) error->all(FLERR,"Illegal fix wall/gran command");
|
if (narg < iarg+2) error->all(FLERR,"Illegal fix wall/gran command");
|
||||||
wallstyle = ZCYLINDER;
|
wallstyle = ZCYLINDER;
|
||||||
lo = hi = 0.0;
|
lo = hi = 0.0;
|
||||||
cylradius = force->numeric(FLERR,arg[iarg+1]);
|
cylradius = force->numeric(FLERR,arg[iarg+3]);
|
||||||
|
iarg += 2;
|
||||||
|
} else if (strcmp(arg[iarg],"region") == 0) {
|
||||||
|
if (narg < iarg+2) error->all(FLERR,"Illegal fix wall/gran command");
|
||||||
|
wallstyle = REGION;
|
||||||
|
int n = strlen(arg[iarg+1]) + 1;
|
||||||
|
idregion = new char[n];
|
||||||
|
strcpy(idregion,arg[iarg+1]);
|
||||||
iarg += 2;
|
iarg += 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
// check for trailing keyword/values
|
// optional args
|
||||||
|
|
||||||
wiggle = 0;
|
wiggle = 0;
|
||||||
wshear = 0;
|
wshear = 0;
|
||||||
|
|
||||||
while (iarg < narg) {
|
while (iarg < narg) {
|
||||||
if (strcmp(arg[iarg],"wiggle") == 0) {
|
if (strcmp(arg[iarg],"wiggle") == 0) {
|
||||||
if (iarg+4 > narg) error->all(FLERR,"Illegal fix wall/gran command");
|
if (iarg+4 > narg) error->all(FLERR,"Illegal fix wall/gran command");
|
||||||
@ -149,7 +188,7 @@ FixWallGran::FixWallGran(LAMMPS *lmp, int narg, char **arg) :
|
|||||||
iarg += 3;
|
iarg += 3;
|
||||||
} else error->all(FLERR,"Illegal fix wall/gran command");
|
} else error->all(FLERR,"Illegal fix wall/gran command");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (wallstyle == XPLANE && domain->xperiodic)
|
if (wallstyle == XPLANE && domain->xperiodic)
|
||||||
error->all(FLERR,"Cannot use wall in periodic dimension");
|
error->all(FLERR,"Cannot use wall in periodic dimension");
|
||||||
if (wallstyle == YPLANE && domain->yperiodic)
|
if (wallstyle == YPLANE && domain->yperiodic)
|
||||||
@ -158,7 +197,7 @@ FixWallGran::FixWallGran(LAMMPS *lmp, int narg, char **arg) :
|
|||||||
error->all(FLERR,"Cannot use wall in periodic dimension");
|
error->all(FLERR,"Cannot use wall in periodic dimension");
|
||||||
if (wallstyle == ZCYLINDER && (domain->xperiodic || domain->yperiodic))
|
if (wallstyle == ZCYLINDER && (domain->xperiodic || domain->yperiodic))
|
||||||
error->all(FLERR,"Cannot use wall in periodic dimension");
|
error->all(FLERR,"Cannot use wall in periodic dimension");
|
||||||
|
|
||||||
if (wiggle && wshear)
|
if (wiggle && wshear)
|
||||||
error->all(FLERR,"Cannot wiggle and shear fix wall/gran");
|
error->all(FLERR,"Cannot wiggle and shear fix wall/gran");
|
||||||
if (wiggle && wallstyle == ZCYLINDER && axis != 2)
|
if (wiggle && wallstyle == ZCYLINDER && axis != 2)
|
||||||
@ -169,15 +208,20 @@ FixWallGran::FixWallGran(LAMMPS *lmp, int narg, char **arg) :
|
|||||||
error->all(FLERR,"Invalid shear direction for fix wall/gran");
|
error->all(FLERR,"Invalid shear direction for fix wall/gran");
|
||||||
if (wshear && wallstyle == ZPLANE && axis == 2)
|
if (wshear && wallstyle == ZPLANE && axis == 2)
|
||||||
error->all(FLERR,"Invalid shear direction for fix wall/gran");
|
error->all(FLERR,"Invalid shear direction for fix wall/gran");
|
||||||
|
if ((wiggle || wshear) && wallstyle == REGION)
|
||||||
|
error->all(FLERR,"Cannot wiggle or shear with fix wall/gran/region");
|
||||||
|
|
||||||
// setup oscillations
|
// setup oscillations
|
||||||
|
|
||||||
if (wiggle) omega = 2.0*MY_PI / period;
|
if (wiggle) omega = 2.0*MY_PI / period;
|
||||||
|
|
||||||
// perform initial allocation of atom-based arrays
|
// perform initial allocation of atom-based arrays
|
||||||
// register with Atom class
|
// register with Atom class
|
||||||
|
|
||||||
shear = NULL;
|
if (pairstyle == BONDED_HISTORY) sheardim = 7;
|
||||||
|
else sheardim = 3;
|
||||||
|
|
||||||
|
shearone = NULL;
|
||||||
grow_arrays(atom->nmax);
|
grow_arrays(atom->nmax);
|
||||||
atom->add_callback(0);
|
atom->add_callback(0);
|
||||||
atom->add_callback(1);
|
atom->add_callback(1);
|
||||||
@ -185,12 +229,14 @@ FixWallGran::FixWallGran(LAMMPS *lmp, int narg, char **arg) :
|
|||||||
nmax = 0;
|
nmax = 0;
|
||||||
mass_rigid = NULL;
|
mass_rigid = NULL;
|
||||||
|
|
||||||
// initialize as if particle is not touching wall
|
// initialize shear history as if particle is not touching region
|
||||||
|
// shearone will be NULL for wallstyle = REGION
|
||||||
|
|
||||||
if (history) {
|
if (history && shearone) {
|
||||||
int nlocal = atom->nlocal;
|
int nlocal = atom->nlocal;
|
||||||
for (int i = 0; i < nlocal; i++)
|
for (int i = 0; i < nlocal; i++)
|
||||||
shear[i][0] = shear[i][1] = shear[i][2] = 0.0;
|
for (int j = 0; j < sheardim; j++)
|
||||||
|
shearone[i][j] = 0.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
time_origin = update->ntimestep;
|
time_origin = update->ntimestep;
|
||||||
@ -205,9 +251,10 @@ FixWallGran::~FixWallGran()
|
|||||||
atom->delete_callback(id,0);
|
atom->delete_callback(id,0);
|
||||||
atom->delete_callback(id,1);
|
atom->delete_callback(id,1);
|
||||||
|
|
||||||
// delete locally stored arrays
|
// delete local storage
|
||||||
|
|
||||||
memory->destroy(shear);
|
delete [] idregion;
|
||||||
|
memory->destroy(shearone);
|
||||||
memory->destroy(mass_rigid);
|
memory->destroy(mass_rigid);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -257,8 +304,8 @@ void FixWallGran::setup(int vflag)
|
|||||||
|
|
||||||
void FixWallGran::post_force(int vflag)
|
void FixWallGran::post_force(int vflag)
|
||||||
{
|
{
|
||||||
int i;
|
int i,j;
|
||||||
double dx,dy,dz,del1,del2,delxy,delr,rsq,meff;
|
double dx,dy,dz,del1,del2,delxy,delr,rsq,rwall,meff;
|
||||||
double vwall[3];
|
double vwall[3];
|
||||||
|
|
||||||
// do not update shear history during setup
|
// do not update shear history during setup
|
||||||
@ -301,7 +348,7 @@ void FixWallGran::post_force(int vflag)
|
|||||||
}
|
}
|
||||||
vwall[axis] = amplitude*omega*sin(arg);
|
vwall[axis] = amplitude*omega*sin(arg);
|
||||||
} else if (wshear) vwall[axis] = vshear;
|
} else if (wshear) vwall[axis] = vshear;
|
||||||
|
|
||||||
// loop over all my atoms
|
// loop over all my atoms
|
||||||
// rsq = distance from wall
|
// rsq = distance from wall
|
||||||
// dx,dy,dz = signed distance from wall
|
// dx,dy,dz = signed distance from wall
|
||||||
@ -311,7 +358,7 @@ void FixWallGran::post_force(int vflag)
|
|||||||
// compute force and torque on atom if close enough to wall
|
// compute force and torque on atom if close enough to wall
|
||||||
// via wall potential matched to pair potential
|
// via wall potential matched to pair potential
|
||||||
// set shear if pair potential stores history
|
// set shear if pair potential stores history
|
||||||
|
|
||||||
double **x = atom->x;
|
double **x = atom->x;
|
||||||
double **v = atom->v;
|
double **v = atom->v;
|
||||||
double **f = atom->f;
|
double **f = atom->f;
|
||||||
@ -321,12 +368,14 @@ void FixWallGran::post_force(int vflag)
|
|||||||
double *rmass = atom->rmass;
|
double *rmass = atom->rmass;
|
||||||
int *mask = atom->mask;
|
int *mask = atom->mask;
|
||||||
int nlocal = atom->nlocal;
|
int nlocal = atom->nlocal;
|
||||||
|
|
||||||
|
rwall = 0.0;
|
||||||
|
|
||||||
for (int i = 0; i < nlocal; i++) {
|
for (int i = 0; i < nlocal; i++) {
|
||||||
if (mask[i] & groupbit) {
|
if (mask[i] & groupbit) {
|
||||||
|
|
||||||
dx = dy = dz = 0.0;
|
dx = dy = dz = 0.0;
|
||||||
|
|
||||||
if (wallstyle == XPLANE) {
|
if (wallstyle == XPLANE) {
|
||||||
del1 = x[i][0] - wlo;
|
del1 = x[i][0] - wlo;
|
||||||
del2 = whi - x[i][0];
|
del2 = whi - x[i][0];
|
||||||
@ -345,26 +394,29 @@ void FixWallGran::post_force(int vflag)
|
|||||||
} else if (wallstyle == ZCYLINDER) {
|
} else if (wallstyle == ZCYLINDER) {
|
||||||
delxy = sqrt(x[i][0]*x[i][0] + x[i][1]*x[i][1]);
|
delxy = sqrt(x[i][0]*x[i][0] + x[i][1]*x[i][1]);
|
||||||
delr = cylradius - delxy;
|
delr = cylradius - delxy;
|
||||||
if (delr > radius[i]) dz = cylradius;
|
if (delr > radius[i]) {
|
||||||
else {
|
dz = cylradius;
|
||||||
|
rwall = 0.0;
|
||||||
|
} else {
|
||||||
dx = -delr/delxy * x[i][0];
|
dx = -delr/delxy * x[i][0];
|
||||||
dy = -delr/delxy * x[i][1];
|
dy = -delr/delxy * x[i][1];
|
||||||
|
// rwall = -2r_c if inside cylinder, 2r_c outside
|
||||||
|
rwall = 2*(1-2*(delxy < cylradius))*cylradius;
|
||||||
if (wshear && axis != 2) {
|
if (wshear && axis != 2) {
|
||||||
vwall[0] = vshear * x[i][1]/delxy;
|
vwall[0] += vshear * x[i][1]/delxy;
|
||||||
vwall[1] = -vshear * x[i][0]/delxy;
|
vwall[1] += -vshear * x[i][0]/delxy;
|
||||||
vwall[2] = 0.0;
|
vwall[2] = 0.0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
rsq = dx*dx + dy*dy + dz*dz;
|
rsq = dx*dx + dy*dy + dz*dz;
|
||||||
|
|
||||||
if (rsq > radius[i]*radius[i]) {
|
if (rsq > radius[i]*radius[i]) {
|
||||||
if (pairstyle != HOOKE) {
|
if (history)
|
||||||
shear[i][0] = 0.0;
|
for (j = 0; j < sheardim; j++)
|
||||||
shear[i][1] = 0.0;
|
shearone[i][j] = 0.0;
|
||||||
shear[i][2] = 0.0;
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
// meff = effective mass of sphere
|
// meff = effective mass of sphere
|
||||||
@ -373,17 +425,20 @@ void FixWallGran::post_force(int vflag)
|
|||||||
meff = rmass[i];
|
meff = rmass[i];
|
||||||
if (fix_rigid && mass_rigid[i] > 0.0) meff = mass_rigid[i];
|
if (fix_rigid && mass_rigid[i] > 0.0) meff = mass_rigid[i];
|
||||||
|
|
||||||
// inovke sphere/wall interaction
|
// invoke sphere/wall interaction
|
||||||
|
|
||||||
if (pairstyle == HOOKE)
|
if (pairstyle == HOOKE)
|
||||||
hooke(rsq,dx,dy,dz,vwall,v[i],f[i],omega[i],torque[i],
|
hooke(rsq,dx,dy,dz,vwall,v[i],f[i],
|
||||||
radius[i],meff);
|
omega[i],torque[i],radius[i],meff);
|
||||||
else if (pairstyle == HOOKE_HISTORY)
|
else if (pairstyle == HOOKE_HISTORY)
|
||||||
hooke_history(rsq,dx,dy,dz,vwall,v[i],f[i],omega[i],torque[i],
|
hooke_history(rsq,dx,dy,dz,vwall,v[i],f[i],
|
||||||
radius[i],meff,shear[i]);
|
omega[i],torque[i],radius[i],meff,shearone[i]);
|
||||||
else if (pairstyle == HERTZ_HISTORY)
|
else if (pairstyle == HERTZ_HISTORY)
|
||||||
hertz_history(rsq,dx,dy,dz,vwall,v[i],f[i],omega[i],torque[i],
|
hertz_history(rsq,dx,dy,dz,vwall,rwall,v[i],f[i],
|
||||||
radius[i],meff,shear[i]);
|
omega[i],torque[i],radius[i],meff,shearone[i]);
|
||||||
|
else if (pairstyle == BONDED_HISTORY)
|
||||||
|
bonded_history(rsq,dx,dy,dz,vwall,rwall,v[i],f[i],
|
||||||
|
omega[i],torque[i],radius[i],meff,shearone[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -412,66 +467,66 @@ void FixWallGran::hooke(double rsq, double dx, double dy, double dz,
|
|||||||
rsqinv = 1.0/rsq;
|
rsqinv = 1.0/rsq;
|
||||||
|
|
||||||
// relative translational velocity
|
// relative translational velocity
|
||||||
|
|
||||||
vr1 = v[0] - vwall[0];
|
vr1 = v[0] - vwall[0];
|
||||||
vr2 = v[1] - vwall[1];
|
vr2 = v[1] - vwall[1];
|
||||||
vr3 = v[2] - vwall[2];
|
vr3 = v[2] - vwall[2];
|
||||||
|
|
||||||
// normal component
|
// normal component
|
||||||
|
|
||||||
vnnr = vr1*dx + vr2*dy + vr3*dz;
|
vnnr = vr1*dx + vr2*dy + vr3*dz;
|
||||||
vn1 = dx*vnnr * rsqinv;
|
vn1 = dx*vnnr * rsqinv;
|
||||||
vn2 = dy*vnnr * rsqinv;
|
vn2 = dy*vnnr * rsqinv;
|
||||||
vn3 = dz*vnnr * rsqinv;
|
vn3 = dz*vnnr * rsqinv;
|
||||||
|
|
||||||
// tangential component
|
// tangential component
|
||||||
|
|
||||||
vt1 = vr1 - vn1;
|
vt1 = vr1 - vn1;
|
||||||
vt2 = vr2 - vn2;
|
vt2 = vr2 - vn2;
|
||||||
vt3 = vr3 - vn3;
|
vt3 = vr3 - vn3;
|
||||||
|
|
||||||
// relative rotational velocity
|
// relative rotational velocity
|
||||||
|
|
||||||
wr1 = radius*omega[0] * rinv;
|
wr1 = radius*omega[0] * rinv;
|
||||||
wr2 = radius*omega[1] * rinv;
|
wr2 = radius*omega[1] * rinv;
|
||||||
wr3 = radius*omega[2] * rinv;
|
wr3 = radius*omega[2] * rinv;
|
||||||
|
|
||||||
// normal forces = Hookian contact + normal velocity damping
|
// normal forces = Hookian contact + normal velocity damping
|
||||||
|
|
||||||
damp = meff*gamman*vnnr*rsqinv;
|
damp = meff*gamman*vnnr*rsqinv;
|
||||||
ccel = kn*(radius-r)*rinv - damp;
|
ccel = kn*(radius-r)*rinv - damp;
|
||||||
|
|
||||||
// relative velocities
|
// relative velocities
|
||||||
|
|
||||||
vtr1 = vt1 - (dz*wr2-dy*wr3);
|
vtr1 = vt1 - (dz*wr2-dy*wr3);
|
||||||
vtr2 = vt2 - (dx*wr3-dz*wr1);
|
vtr2 = vt2 - (dx*wr3-dz*wr1);
|
||||||
vtr3 = vt3 - (dy*wr1-dx*wr2);
|
vtr3 = vt3 - (dy*wr1-dx*wr2);
|
||||||
vrel = vtr1*vtr1 + vtr2*vtr2 + vtr3*vtr3;
|
vrel = vtr1*vtr1 + vtr2*vtr2 + vtr3*vtr3;
|
||||||
vrel = sqrt(vrel);
|
vrel = sqrt(vrel);
|
||||||
|
|
||||||
// force normalization
|
// force normalization
|
||||||
|
|
||||||
fn = xmu * fabs(ccel*r);
|
fn = xmu * fabs(ccel*r);
|
||||||
fs = meff*gammat*vrel;
|
fs = meff*gammat*vrel;
|
||||||
if (vrel != 0.0) ft = MIN(fn,fs) / vrel;
|
if (vrel != 0.0) ft = MIN(fn,fs) / vrel;
|
||||||
else ft = 0.0;
|
else ft = 0.0;
|
||||||
|
|
||||||
// tangential force due to tangential velocity damping
|
// tangential force due to tangential velocity damping
|
||||||
|
|
||||||
fs1 = -ft*vtr1;
|
fs1 = -ft*vtr1;
|
||||||
fs2 = -ft*vtr2;
|
fs2 = -ft*vtr2;
|
||||||
fs3 = -ft*vtr3;
|
fs3 = -ft*vtr3;
|
||||||
|
|
||||||
// forces & torques
|
// forces & torques
|
||||||
|
|
||||||
fx = dx*ccel + fs1;
|
fx = dx*ccel + fs1;
|
||||||
fy = dy*ccel + fs2;
|
fy = dy*ccel + fs2;
|
||||||
fz = dz*ccel + fs3;
|
fz = dz*ccel + fs3;
|
||||||
|
|
||||||
f[0] += fx;
|
f[0] += fx;
|
||||||
f[1] += fy;
|
f[1] += fy;
|
||||||
f[2] += fz;
|
f[2] += fz;
|
||||||
|
|
||||||
tor1 = rinv * (dy*fs3 - dz*fs2);
|
tor1 = rinv * (dy*fs3 - dz*fs2);
|
||||||
tor2 = rinv * (dz*fs1 - dx*fs3);
|
tor2 = rinv * (dz*fs1 - dx*fs3);
|
||||||
tor3 = rinv * (dx*fs2 - dy*fs1);
|
tor3 = rinv * (dx*fs2 - dy*fs1);
|
||||||
@ -491,49 +546,172 @@ void FixWallGran::hooke_history(double rsq, double dx, double dy, double dz,
|
|||||||
double wr1,wr2,wr3,damp,ccel,vtr1,vtr2,vtr3,vrel;
|
double wr1,wr2,wr3,damp,ccel,vtr1,vtr2,vtr3,vrel;
|
||||||
double fn,fs,fs1,fs2,fs3,fx,fy,fz,tor1,tor2,tor3;
|
double fn,fs,fs1,fs2,fs3,fx,fy,fz,tor1,tor2,tor3;
|
||||||
double shrmag,rsht,rinv,rsqinv;
|
double shrmag,rsht,rinv,rsqinv;
|
||||||
|
|
||||||
r = sqrt(rsq);
|
r = sqrt(rsq);
|
||||||
rinv = 1.0/r;
|
rinv = 1.0/r;
|
||||||
rsqinv = 1.0/rsq;
|
rsqinv = 1.0/rsq;
|
||||||
|
|
||||||
// relative translational velocity
|
// relative translational velocity
|
||||||
|
|
||||||
vr1 = v[0] - vwall[0];
|
vr1 = v[0] - vwall[0];
|
||||||
vr2 = v[1] - vwall[1];
|
vr2 = v[1] - vwall[1];
|
||||||
vr3 = v[2] - vwall[2];
|
vr3 = v[2] - vwall[2];
|
||||||
|
|
||||||
// normal component
|
// normal component
|
||||||
|
|
||||||
vnnr = vr1*dx + vr2*dy + vr3*dz;
|
vnnr = vr1*dx + vr2*dy + vr3*dz;
|
||||||
vn1 = dx*vnnr * rsqinv;
|
vn1 = dx*vnnr * rsqinv;
|
||||||
vn2 = dy*vnnr * rsqinv;
|
vn2 = dy*vnnr * rsqinv;
|
||||||
vn3 = dz*vnnr * rsqinv;
|
vn3 = dz*vnnr * rsqinv;
|
||||||
|
|
||||||
// tangential component
|
// tangential component
|
||||||
|
|
||||||
vt1 = vr1 - vn1;
|
vt1 = vr1 - vn1;
|
||||||
vt2 = vr2 - vn2;
|
vt2 = vr2 - vn2;
|
||||||
vt3 = vr3 - vn3;
|
vt3 = vr3 - vn3;
|
||||||
|
|
||||||
// relative rotational velocity
|
// relative rotational velocity
|
||||||
|
|
||||||
wr1 = radius*omega[0] * rinv;
|
wr1 = radius*omega[0] * rinv;
|
||||||
wr2 = radius*omega[1] * rinv;
|
wr2 = radius*omega[1] * rinv;
|
||||||
wr3 = radius*omega[2] * rinv;
|
wr3 = radius*omega[2] * rinv;
|
||||||
|
|
||||||
// normal forces = Hookian contact + normal velocity damping
|
// normal forces = Hookian contact + normal velocity damping
|
||||||
|
|
||||||
damp = meff*gamman*vnnr*rsqinv;
|
damp = meff*gamman*vnnr*rsqinv;
|
||||||
ccel = kn*(radius-r)*rinv - damp;
|
ccel = kn*(radius-r)*rinv - damp;
|
||||||
|
|
||||||
// relative velocities
|
// relative velocities
|
||||||
|
|
||||||
vtr1 = vt1 - (dz*wr2-dy*wr3);
|
vtr1 = vt1 - (dz*wr2-dy*wr3);
|
||||||
vtr2 = vt2 - (dx*wr3-dz*wr1);
|
vtr2 = vt2 - (dx*wr3-dz*wr1);
|
||||||
vtr3 = vt3 - (dy*wr1-dx*wr2);
|
vtr3 = vt3 - (dy*wr1-dx*wr2);
|
||||||
vrel = vtr1*vtr1 + vtr2*vtr2 + vtr3*vtr3;
|
vrel = vtr1*vtr1 + vtr2*vtr2 + vtr3*vtr3;
|
||||||
vrel = sqrt(vrel);
|
vrel = sqrt(vrel);
|
||||||
|
|
||||||
|
// shear history effects
|
||||||
|
|
||||||
|
if (shearupdate) {
|
||||||
|
shear[0] += vtr1*dt;
|
||||||
|
shear[1] += vtr2*dt;
|
||||||
|
shear[2] += vtr3*dt;
|
||||||
|
}
|
||||||
|
shrmag = sqrt(shear[0]*shear[0] + shear[1]*shear[1] + shear[2]*shear[2]);
|
||||||
|
|
||||||
|
// rotate shear displacements
|
||||||
|
|
||||||
|
rsht = shear[0]*dx + shear[1]*dy + shear[2]*dz;
|
||||||
|
rsht = rsht*rsqinv;
|
||||||
|
if (shearupdate) {
|
||||||
|
shear[0] -= rsht*dx;
|
||||||
|
shear[1] -= rsht*dy;
|
||||||
|
shear[2] -= rsht*dz;
|
||||||
|
}
|
||||||
|
|
||||||
|
// tangential forces = shear + tangential velocity damping
|
||||||
|
|
||||||
|
fs1 = - (kt*shear[0] + meff*gammat*vtr1);
|
||||||
|
fs2 = - (kt*shear[1] + meff*gammat*vtr2);
|
||||||
|
fs3 = - (kt*shear[2] + meff*gammat*vtr3);
|
||||||
|
|
||||||
|
// rescale frictional displacements and forces if needed
|
||||||
|
|
||||||
|
fs = sqrt(fs1*fs1 + fs2*fs2 + fs3*fs3);
|
||||||
|
fn = xmu * fabs(ccel*r);
|
||||||
|
|
||||||
|
if (fs > fn) {
|
||||||
|
if (shrmag != 0.0) {
|
||||||
|
shear[0] = (fn/fs) * (shear[0] + meff*gammat*vtr1/kt) -
|
||||||
|
meff*gammat*vtr1/kt;
|
||||||
|
shear[1] = (fn/fs) * (shear[1] + meff*gammat*vtr2/kt) -
|
||||||
|
meff*gammat*vtr2/kt;
|
||||||
|
shear[2] = (fn/fs) * (shear[2] + meff*gammat*vtr3/kt) -
|
||||||
|
meff*gammat*vtr3/kt;
|
||||||
|
fs1 *= fn/fs ;
|
||||||
|
fs2 *= fn/fs;
|
||||||
|
fs3 *= fn/fs;
|
||||||
|
} else fs1 = fs2 = fs3 = 0.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// forces & torques
|
||||||
|
|
||||||
|
fx = dx*ccel + fs1;
|
||||||
|
fy = dy*ccel + fs2;
|
||||||
|
fz = dz*ccel + fs3;
|
||||||
|
|
||||||
|
f[0] += fx;
|
||||||
|
f[1] += fy;
|
||||||
|
f[2] += fz;
|
||||||
|
|
||||||
|
tor1 = rinv * (dy*fs3 - dz*fs2);
|
||||||
|
tor2 = rinv * (dz*fs1 - dx*fs3);
|
||||||
|
tor3 = rinv * (dx*fs2 - dy*fs1);
|
||||||
|
torque[0] -= radius*tor1;
|
||||||
|
torque[1] -= radius*tor2;
|
||||||
|
torque[2] -= radius*tor3;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void FixWallGran::hertz_history(double rsq, double dx, double dy, double dz,
|
||||||
|
double *vwall, double rwall, double *v,
|
||||||
|
double *f, double *omega, double *torque,
|
||||||
|
double radius, double meff, double *shear)
|
||||||
|
{
|
||||||
|
double r,vr1,vr2,vr3,vnnr,vn1,vn2,vn3,vt1,vt2,vt3;
|
||||||
|
double wr1,wr2,wr3,damp,ccel,vtr1,vtr2,vtr3,vrel;
|
||||||
|
double fn,fs,fs1,fs2,fs3,fx,fy,fz,tor1,tor2,tor3;
|
||||||
|
double shrmag,rsht,polyhertz,rinv,rsqinv;
|
||||||
|
|
||||||
|
r = sqrt(rsq);
|
||||||
|
rinv = 1.0/r;
|
||||||
|
rsqinv = 1.0/rsq;
|
||||||
|
|
||||||
|
// relative translational velocity
|
||||||
|
|
||||||
|
vr1 = v[0] - vwall[0];
|
||||||
|
vr2 = v[1] - vwall[1];
|
||||||
|
vr3 = v[2] - vwall[2];
|
||||||
|
|
||||||
|
// normal component
|
||||||
|
|
||||||
|
vnnr = vr1*dx + vr2*dy + vr3*dz;
|
||||||
|
vn1 = dx*vnnr / rsq;
|
||||||
|
vn2 = dy*vnnr / rsq;
|
||||||
|
vn3 = dz*vnnr / rsq;
|
||||||
|
|
||||||
|
// tangential component
|
||||||
|
|
||||||
|
vt1 = vr1 - vn1;
|
||||||
|
vt2 = vr2 - vn2;
|
||||||
|
vt3 = vr3 - vn3;
|
||||||
|
|
||||||
|
// relative rotational velocity
|
||||||
|
|
||||||
|
wr1 = radius*omega[0] * rinv;
|
||||||
|
wr2 = radius*omega[1] * rinv;
|
||||||
|
wr3 = radius*omega[2] * rinv;
|
||||||
|
|
||||||
|
// normal forces = Hertzian contact + normal velocity damping
|
||||||
|
// rwall = 0 is flat wall case
|
||||||
|
// rwall positive or negative is curved wall
|
||||||
|
// will break (as it should) if rwall is negative and
|
||||||
|
// its absolute value < radius of particle
|
||||||
|
|
||||||
|
damp = meff*gamman*vnnr*rsqinv;
|
||||||
|
ccel = kn*(radius-r)*rinv - damp;
|
||||||
|
if (rwall == 0.0) polyhertz = sqrt((radius-r)*radius);
|
||||||
|
else polyhertz = sqrt((radius-r)*radius*rwall/(rwall+radius));
|
||||||
|
ccel *= polyhertz;
|
||||||
|
|
||||||
|
// relative velocities
|
||||||
|
|
||||||
|
vtr1 = vt1 - (dz*wr2-dy*wr3);
|
||||||
|
vtr2 = vt2 - (dx*wr3-dz*wr1);
|
||||||
|
vtr3 = vt3 - (dy*wr1-dx*wr2);
|
||||||
|
vrel = vtr1*vtr1 + vtr2*vtr2 + vtr3*vtr3;
|
||||||
|
vrel = sqrt(vrel);
|
||||||
|
|
||||||
// shear history effects
|
// shear history effects
|
||||||
|
|
||||||
if (shearupdate) {
|
if (shearupdate) {
|
||||||
@ -542,9 +720,9 @@ void FixWallGran::hooke_history(double rsq, double dx, double dy, double dz,
|
|||||||
shear[2] += vtr3*dt;
|
shear[2] += vtr3*dt;
|
||||||
}
|
}
|
||||||
shrmag = sqrt(shear[0]*shear[0] + shear[1]*shear[1] + shear[2]*shear[2]);
|
shrmag = sqrt(shear[0]*shear[0] + shear[1]*shear[1] + shear[2]*shear[2]);
|
||||||
|
|
||||||
// rotate shear displacements
|
// rotate shear displacements
|
||||||
|
|
||||||
rsht = shear[0]*dx + shear[1]*dy + shear[2]*dz;
|
rsht = shear[0]*dx + shear[1]*dy + shear[2]*dz;
|
||||||
rsht = rsht*rsqinv;
|
rsht = rsht*rsqinv;
|
||||||
if (shearupdate) {
|
if (shearupdate) {
|
||||||
@ -552,18 +730,18 @@ void FixWallGran::hooke_history(double rsq, double dx, double dy, double dz,
|
|||||||
shear[1] -= rsht*dy;
|
shear[1] -= rsht*dy;
|
||||||
shear[2] -= rsht*dz;
|
shear[2] -= rsht*dz;
|
||||||
}
|
}
|
||||||
|
|
||||||
// tangential forces = shear + tangential velocity damping
|
// tangential forces = shear + tangential velocity damping
|
||||||
|
|
||||||
fs1 = - (kt*shear[0] + meff*gammat*vtr1);
|
fs1 = -polyhertz * (kt*shear[0] + meff*gammat*vtr1);
|
||||||
fs2 = - (kt*shear[1] + meff*gammat*vtr2);
|
fs2 = -polyhertz * (kt*shear[1] + meff*gammat*vtr2);
|
||||||
fs3 = - (kt*shear[2] + meff*gammat*vtr3);
|
fs3 = -polyhertz * (kt*shear[2] + meff*gammat*vtr3);
|
||||||
|
|
||||||
// rescale frictional displacements and forces if needed
|
// rescale frictional displacements and forces if needed
|
||||||
|
|
||||||
fs = sqrt(fs1*fs1 + fs2*fs2 + fs3*fs3);
|
fs = sqrt(fs1*fs1 + fs2*fs2 + fs3*fs3);
|
||||||
fn = xmu * fabs(ccel*r);
|
fn = xmu * fabs(ccel*r);
|
||||||
|
|
||||||
if (fs > fn) {
|
if (fs > fn) {
|
||||||
if (shrmag != 0.0) {
|
if (shrmag != 0.0) {
|
||||||
shear[0] = (fn/fs) * (shear[0] + meff*gammat*vtr1/kt) -
|
shear[0] = (fn/fs) * (shear[0] + meff*gammat*vtr1/kt) -
|
||||||
@ -579,7 +757,7 @@ void FixWallGran::hooke_history(double rsq, double dx, double dy, double dz,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// forces & torques
|
// forces & torques
|
||||||
|
|
||||||
fx = dx*ccel + fs1;
|
fx = dx*ccel + fs1;
|
||||||
fy = dy*ccel + fs2;
|
fy = dy*ccel + fs2;
|
||||||
fz = dz*ccel + fs3;
|
fz = dz*ccel + fs3;
|
||||||
@ -587,7 +765,7 @@ void FixWallGran::hooke_history(double rsq, double dx, double dy, double dz,
|
|||||||
f[0] += fx;
|
f[0] += fx;
|
||||||
f[1] += fy;
|
f[1] += fy;
|
||||||
f[2] += fz;
|
f[2] += fz;
|
||||||
|
|
||||||
tor1 = rinv * (dy*fs3 - dz*fs2);
|
tor1 = rinv * (dy*fs3 - dz*fs2);
|
||||||
tor2 = rinv * (dz*fs1 - dx*fs3);
|
tor2 = rinv * (dz*fs1 - dx*fs3);
|
||||||
tor3 = rinv * (dx*fs2 - dy*fs1);
|
tor3 = rinv * (dx*fs2 - dy*fs1);
|
||||||
@ -596,18 +774,30 @@ void FixWallGran::hooke_history(double rsq, double dx, double dy, double dz,
|
|||||||
torque[2] -= radius*tor3;
|
torque[2] -= radius*tor3;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
void FixWallGran::hertz_history(double rsq, double dx, double dy, double dz,
|
void FixWallGran::bonded_history(double rsq, double dx, double dy, double dz,
|
||||||
double *vwall, double *v,
|
double *vwall, double rwall, double *v,
|
||||||
double *f, double *omega, double *torque,
|
double *f, double *omega, double *torque,
|
||||||
double radius, double meff, double *shear)
|
double radius, double meff, double *shear)
|
||||||
{
|
{
|
||||||
double r,vr1,vr2,vr3,vnnr,vn1,vn2,vn3,vt1,vt2,vt3;
|
double r,vr1,vr2,vr3,vnnr,vn1,vn2,vn3,vt1,vt2,vt3;
|
||||||
double wr1,wr2,wr3,damp,ccel,vtr1,vtr2,vtr3,vrel;
|
double wr1,wr2,wr3,damp,ccel,vtr1,vtr2,vtr3,vrel;
|
||||||
double fn,fs,fs1,fs2,fs3,fx,fy,fz,tor1,tor2,tor3;
|
double fn,fs,fs1,fs2,fs3,fx,fy,fz,tor1,tor2,tor3;
|
||||||
double shrmag,rsht,polyhertz,rinv,rsqinv;
|
double shrmag,rsht,polyhertz,rinv,rsqinv;
|
||||||
|
|
||||||
|
double pois,E_eff,G_eff,rad_eff;
|
||||||
|
double a0,Fcrit,delcrit,delcritinv;
|
||||||
|
double overlap,olapsq,olapcubed,sqrtterm,tmp,keyterm,keyterm2,keyterm3;
|
||||||
|
double aovera0,foverFc;
|
||||||
|
double gammatsuji;
|
||||||
|
|
||||||
|
double ktwist,kroll,twistcrit,rollcrit;
|
||||||
|
double relrot1,relrot2,relrot3,vrl1,vrl2,vrl3,vrlmag,vrlmaginv;
|
||||||
|
double magtwist,magtortwist;
|
||||||
|
double magrollsq,magroll,magrollinv,magtorroll;
|
||||||
|
|
||||||
r = sqrt(rsq);
|
r = sqrt(rsq);
|
||||||
rinv = 1.0/r;
|
rinv = 1.0/r;
|
||||||
rsqinv = 1.0/rsq;
|
rsqinv = 1.0/rsq;
|
||||||
@ -638,11 +828,49 @@ void FixWallGran::hertz_history(double rsq, double dx, double dy, double dz,
|
|||||||
wr3 = radius*omega[2] * rinv;
|
wr3 = radius*omega[2] * rinv;
|
||||||
|
|
||||||
// normal forces = Hertzian contact + normal velocity damping
|
// normal forces = Hertzian contact + normal velocity damping
|
||||||
|
// material properties: currently assumes identical materials
|
||||||
|
|
||||||
damp = meff*gamman*vnnr*rsqinv;
|
pois = E/(2.0*G) - 1.0;
|
||||||
ccel = kn*(radius-r)*rinv - damp;
|
E_eff=0.5*E/(1.0-pois*pois);
|
||||||
polyhertz = sqrt((radius-r)*radius);
|
G_eff=G/(4.0-2.0*pois);
|
||||||
ccel *= polyhertz;
|
|
||||||
|
// rwall = 0 is infinite wall radius of curvature (flat wall)
|
||||||
|
|
||||||
|
if (rwall == 0) rad_eff = radius;
|
||||||
|
else rad_eff = radius*rwall/(radius+rwall);
|
||||||
|
|
||||||
|
Fcrit = rad_eff * (3.0 * M_PI * SurfEnergy);
|
||||||
|
a0=pow(9.0*M_PI*SurfEnergy*rad_eff*rad_eff/E_eff,1.0/3.0);
|
||||||
|
delcrit = 1.0/rad_eff*(0.5 * a0*a0/pow(6.0,1.0/3.0));
|
||||||
|
delcritinv = 1.0/delcrit;
|
||||||
|
|
||||||
|
overlap = (radius-r) * delcritinv;
|
||||||
|
olapsq = overlap*overlap;
|
||||||
|
olapcubed = olapsq*overlap;
|
||||||
|
sqrtterm = sqrt(1.0 + olapcubed);
|
||||||
|
tmp = 2.0 + olapcubed + 2.0*sqrtterm;
|
||||||
|
keyterm = pow(tmp,THIRD);
|
||||||
|
keyterm2 = olapsq/keyterm;
|
||||||
|
keyterm3 = sqrt(overlap + keyterm2 + keyterm);
|
||||||
|
aovera0 = pow(6.0,-TWOTHIRDS) * (keyterm3 +
|
||||||
|
sqrt(2.0*overlap - keyterm2 - keyterm + 4.0/keyterm3));
|
||||||
|
foverFc = 4.0*((aovera0*aovera0*aovera0) - pow(aovera0,1.5));
|
||||||
|
ccel = Fcrit*foverFc*rinv;
|
||||||
|
|
||||||
|
// damp = meff*gamman*vnnr*rsqinv;
|
||||||
|
// ccel = kn*(radius-r)*rinv - damp;
|
||||||
|
// polyhertz = sqrt((radius-r)*radius);
|
||||||
|
// ccel *= polyhertz;
|
||||||
|
|
||||||
|
// use Tsuji et al form
|
||||||
|
|
||||||
|
polyhertz = 1.2728- 4.2783*0.9 + 11.087*0.9*0.9 - 22.348*0.9*0.9*0.9 +
|
||||||
|
27.467*0.9*0.9*0.9*0.9 - 18.022*0.9*0.9*0.9*0.9*0.9 +
|
||||||
|
4.8218*0.9*0.9*0.9*0.9*0.9*0.9;
|
||||||
|
|
||||||
|
gammatsuji = 0.2*sqrt(meff*kn);
|
||||||
|
damp = gammatsuji*vnnr/rsq;
|
||||||
|
ccel = ccel - polyhertz * damp;
|
||||||
|
|
||||||
// relative velocities
|
// relative velocities
|
||||||
|
|
||||||
@ -677,25 +905,90 @@ void FixWallGran::hertz_history(double rsq, double dx, double dy, double dz,
|
|||||||
fs2 = -polyhertz * (kt*shear[1] + meff*gammat*vtr2);
|
fs2 = -polyhertz * (kt*shear[1] + meff*gammat*vtr2);
|
||||||
fs3 = -polyhertz * (kt*shear[2] + meff*gammat*vtr3);
|
fs3 = -polyhertz * (kt*shear[2] + meff*gammat*vtr3);
|
||||||
|
|
||||||
|
kt=8.0*G_eff*a0*aovera0;
|
||||||
|
|
||||||
|
// shear damping uses Tsuji et al form also
|
||||||
|
|
||||||
|
fs1 = -kt*shear[0] - polyhertz*gammatsuji*vtr1;
|
||||||
|
fs2 = -kt*shear[1] - polyhertz*gammatsuji*vtr2;
|
||||||
|
fs3 = -kt*shear[2] - polyhertz*gammatsuji*vtr3;
|
||||||
|
|
||||||
// rescale frictional displacements and forces if needed
|
// rescale frictional displacements and forces if needed
|
||||||
|
|
||||||
fs = sqrt(fs1*fs1 + fs2*fs2 + fs3*fs3);
|
fs = sqrt(fs1*fs1 + fs2*fs2 + fs3*fs3);
|
||||||
fn = xmu * fabs(ccel*r);
|
fn = xmu * fabs(ccel*r + 2.0*Fcrit);
|
||||||
|
|
||||||
if (fs > fn) {
|
if (fs > fn) {
|
||||||
if (shrmag != 0.0) {
|
if (shrmag != 0.0) {
|
||||||
shear[0] = (fn/fs) * (shear[0] + meff*gammat*vtr1/kt) -
|
shear[0] = (fn/fs) * (shear[0] + polyhertz*gammatsuji*vtr1/kt) -
|
||||||
meff*gammat*vtr1/kt;
|
polyhertz*gammatsuji*vtr1/kt;
|
||||||
shear[1] = (fn/fs) * (shear[1] + meff*gammat*vtr2/kt) -
|
shear[1] = (fn/fs) * (shear[1] + polyhertz*gammatsuji*vtr2/kt) -
|
||||||
meff*gammat*vtr2/kt;
|
polyhertz*gammatsuji*vtr2/kt;
|
||||||
shear[2] = (fn/fs) * (shear[2] + meff*gammat*vtr3/kt) -
|
shear[2] = (fn/fs) * (shear[2] + polyhertz*gammatsuji*vtr3/kt) -
|
||||||
meff*gammat*vtr3/kt;
|
polyhertz*gammatsuji*vtr3/kt;
|
||||||
fs1 *= fn/fs ;
|
fs1 *= fn/fs ;
|
||||||
fs2 *= fn/fs;
|
fs2 *= fn/fs;
|
||||||
fs3 *= fn/fs;
|
fs3 *= fn/fs;
|
||||||
} else fs1 = fs2 = fs3 = 0.0;
|
} else fs1 = fs2 = fs3 = 0.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// calculate twisting and rolling components of torque
|
||||||
|
// NOTE: this assumes spheres!
|
||||||
|
|
||||||
|
relrot1 = omega[0];
|
||||||
|
relrot2 = omega[1];
|
||||||
|
relrot3 = omega[2];
|
||||||
|
|
||||||
|
// rolling velocity
|
||||||
|
// NOTE: this assumes mondisperse spheres!
|
||||||
|
|
||||||
|
vrl1 = -rad_eff*rinv * (relrot2*dz - relrot3*dy);
|
||||||
|
vrl2 = -rad_eff*rinv * (relrot3*dx - relrot1*dz);
|
||||||
|
vrl3 = -rad_eff*rinv * (relrot1*dy - relrot2*dx);
|
||||||
|
vrlmag = sqrt(vrl1*vrl1+vrl2*vrl2+vrl3*vrl3);
|
||||||
|
if (vrlmag != 0.0) vrlmaginv = 1.0/vrlmag;
|
||||||
|
else vrlmaginv = 0.0;
|
||||||
|
|
||||||
|
// bond history effects
|
||||||
|
|
||||||
|
shear[3] += vrl1*dt;
|
||||||
|
shear[4] += vrl2*dt;
|
||||||
|
shear[5] += vrl3*dt;
|
||||||
|
|
||||||
|
// rotate bonded displacements correctly
|
||||||
|
|
||||||
|
double rlt = shear[3]*dx + shear[4]*dy + shear[5]*dz;
|
||||||
|
rlt /= rsq;
|
||||||
|
shear[3] -= rlt*dx;
|
||||||
|
shear[4] -= rlt*dy;
|
||||||
|
shear[5] -= rlt*dz;
|
||||||
|
|
||||||
|
// twisting torque
|
||||||
|
|
||||||
|
magtwist = rinv*(relrot1*dx + relrot2*dy + relrot3*dz);
|
||||||
|
shear[6] += magtwist*dt;
|
||||||
|
|
||||||
|
ktwist = 0.5*kt*(a0*aovera0)*(a0*aovera0);
|
||||||
|
magtortwist = -ktwist*shear[6] -
|
||||||
|
0.5*polyhertz*gammatsuji*(a0*aovera0)*(a0*aovera0)*magtwist;
|
||||||
|
|
||||||
|
twistcrit=TWOTHIRDS*a0*aovera0*Fcrit;
|
||||||
|
if (fabs(magtortwist) > twistcrit)
|
||||||
|
magtortwist = -twistcrit * magtwist/fabs(magtwist);
|
||||||
|
|
||||||
|
// rolling torque
|
||||||
|
|
||||||
|
magrollsq = shear[3]*shear[3] + shear[4]*shear[4] + shear[5]*shear[5];
|
||||||
|
magroll = sqrt(magrollsq);
|
||||||
|
if (magroll != 0.0) magrollinv = 1.0/magroll;
|
||||||
|
else magrollinv = 0.0;
|
||||||
|
|
||||||
|
kroll = 1.0*4.0*Fcrit*pow(aovera0,1.5);
|
||||||
|
magtorroll = -kroll*magroll - 0.1*gammat*vrlmag;
|
||||||
|
|
||||||
|
rollcrit = 0.01;
|
||||||
|
if (magroll > rollcrit) magtorroll = -kroll*rollcrit;
|
||||||
|
|
||||||
// forces & torques
|
// forces & torques
|
||||||
|
|
||||||
fx = dx*ccel + fs1;
|
fx = dx*ccel + fs1;
|
||||||
@ -712,6 +1005,14 @@ void FixWallGran::hertz_history(double rsq, double dx, double dy, double dz,
|
|||||||
torque[0] -= radius*tor1;
|
torque[0] -= radius*tor1;
|
||||||
torque[1] -= radius*tor2;
|
torque[1] -= radius*tor2;
|
||||||
torque[2] -= radius*tor3;
|
torque[2] -= radius*tor3;
|
||||||
|
|
||||||
|
torque[0] += magtortwist * dx*rinv;
|
||||||
|
torque[1] += magtortwist * dy*rinv;
|
||||||
|
torque[2] += magtortwist * dz*rinv;
|
||||||
|
|
||||||
|
torque[0] += magtorroll * (shear[4]*dz - shear[5]*dy)*rinv*magrollinv;
|
||||||
|
torque[1] += magtorroll * (shear[5]*dx - shear[3]*dz)*rinv*magrollinv;
|
||||||
|
torque[2] += magtorroll * (shear[3]*dy - shear[4]*dx)*rinv*magrollinv;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
/* ----------------------------------------------------------------------
|
||||||
@ -722,8 +1023,8 @@ double FixWallGran::memory_usage()
|
|||||||
{
|
{
|
||||||
int nmax = atom->nmax;
|
int nmax = atom->nmax;
|
||||||
double bytes = 0.0;
|
double bytes = 0.0;
|
||||||
if (history) bytes += 3*nmax * sizeof(double); // shear history
|
if (history) bytes += nmax*sheardim * sizeof(double); // shear history
|
||||||
if (fix_rigid) bytes += nmax * sizeof(int); // mass_rigid
|
if (fix_rigid) bytes += nmax * sizeof(int); // mass_rigid
|
||||||
return bytes;
|
return bytes;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -733,7 +1034,7 @@ double FixWallGran::memory_usage()
|
|||||||
|
|
||||||
void FixWallGran::grow_arrays(int nmax)
|
void FixWallGran::grow_arrays(int nmax)
|
||||||
{
|
{
|
||||||
if (history) memory->grow(shear,nmax,3,"fix_wall_gran:shear");
|
if (history) memory->grow(shearone,nmax,sheardim,"fix_wall_gran:shearone");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
/* ----------------------------------------------------------------------
|
||||||
@ -742,11 +1043,9 @@ void FixWallGran::grow_arrays(int nmax)
|
|||||||
|
|
||||||
void FixWallGran::copy_arrays(int i, int j, int delflag)
|
void FixWallGran::copy_arrays(int i, int j, int delflag)
|
||||||
{
|
{
|
||||||
if (history) {
|
if (history)
|
||||||
shear[j][0] = shear[i][0];
|
for (int m = 0; m < sheardim; m++)
|
||||||
shear[j][1] = shear[i][1];
|
shearone[j][m] = shearone[i][m];
|
||||||
shear[j][2] = shear[i][2];
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
/* ----------------------------------------------------------------------
|
||||||
@ -755,7 +1054,9 @@ void FixWallGran::copy_arrays(int i, int j, int delflag)
|
|||||||
|
|
||||||
void FixWallGran::set_arrays(int i)
|
void FixWallGran::set_arrays(int i)
|
||||||
{
|
{
|
||||||
if (history) shear[i][0] = shear[i][1] = shear[i][2] = 0.0;
|
if (history)
|
||||||
|
for (int m = 0; m < sheardim; m++)
|
||||||
|
shearone[i][m] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
/* ----------------------------------------------------------------------
|
||||||
@ -766,10 +1067,10 @@ int FixWallGran::pack_exchange(int i, double *buf)
|
|||||||
{
|
{
|
||||||
if (!history) return 0;
|
if (!history) return 0;
|
||||||
|
|
||||||
buf[0] = shear[i][0];
|
int n = 0;
|
||||||
buf[1] = shear[i][1];
|
for (int m = 0; m < sheardim; m++)
|
||||||
buf[2] = shear[i][2];
|
buf[n++] = shearone[i][m];
|
||||||
return 3;
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
/* ----------------------------------------------------------------------
|
||||||
@ -780,10 +1081,10 @@ int FixWallGran::unpack_exchange(int nlocal, double *buf)
|
|||||||
{
|
{
|
||||||
if (!history) return 0;
|
if (!history) return 0;
|
||||||
|
|
||||||
shear[nlocal][0] = buf[0];
|
int n = 0;
|
||||||
shear[nlocal][1] = buf[1];
|
for (int m = 0; m < sheardim; m++)
|
||||||
shear[nlocal][2] = buf[2];
|
shearone[nlocal][m] = buf[n++];
|
||||||
return 3;
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
/* ----------------------------------------------------------------------
|
||||||
@ -794,12 +1095,11 @@ int FixWallGran::pack_restart(int i, double *buf)
|
|||||||
{
|
{
|
||||||
if (!history) return 0;
|
if (!history) return 0;
|
||||||
|
|
||||||
int m = 0;
|
int n = 0;
|
||||||
buf[m++] = 4;
|
buf[n++] = sheardim + 1;
|
||||||
buf[m++] = shear[i][0];
|
for (int m = 0; m < sheardim; m++)
|
||||||
buf[m++] = shear[i][1];
|
buf[n++] = shearone[i][m];
|
||||||
buf[m++] = shear[i][2];
|
return n;
|
||||||
return m;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
/* ----------------------------------------------------------------------
|
||||||
@ -808,19 +1108,18 @@ int FixWallGran::pack_restart(int i, double *buf)
|
|||||||
|
|
||||||
void FixWallGran::unpack_restart(int nlocal, int nth)
|
void FixWallGran::unpack_restart(int nlocal, int nth)
|
||||||
{
|
{
|
||||||
double **extra = atom->extra;
|
|
||||||
|
|
||||||
if (!history) return;
|
if (!history) return;
|
||||||
|
|
||||||
// skip to Nth set of extra values
|
double **extra = atom->extra;
|
||||||
|
|
||||||
|
// skip to Nth set of extra values
|
||||||
|
|
||||||
int m = 0;
|
int m = 0;
|
||||||
for (int i = 0; i < nth; i++) m += static_cast<int> (extra[nlocal][m]);
|
for (int i = 0; i < nth; i++) m += static_cast<int> (extra[nlocal][m]);
|
||||||
m++;
|
m++;
|
||||||
|
|
||||||
shear[nlocal][0] = extra[nlocal][m++];
|
for (int i = 0; i < sheardim; i++)
|
||||||
shear[nlocal][1] = extra[nlocal][m++];
|
shearone[nlocal][i] = extra[nlocal][m++];
|
||||||
shear[nlocal][2] = extra[nlocal][m++];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
/* ----------------------------------------------------------------------
|
||||||
@ -830,7 +1129,7 @@ void FixWallGran::unpack_restart(int nlocal, int nth)
|
|||||||
int FixWallGran::maxsize_restart()
|
int FixWallGran::maxsize_restart()
|
||||||
{
|
{
|
||||||
if (!history) return 0;
|
if (!history) return 0;
|
||||||
return 4;
|
return 1 + sheardim;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
/* ----------------------------------------------------------------------
|
||||||
@ -840,7 +1139,7 @@ int FixWallGran::maxsize_restart()
|
|||||||
int FixWallGran::size_restart(int nlocal)
|
int FixWallGran::size_restart(int nlocal)
|
||||||
{
|
{
|
||||||
if (!history) return 0;
|
if (!history) return 0;
|
||||||
return 4;
|
return 1 + sheardim;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|||||||
@ -29,51 +29,59 @@ class FixWallGran : public Fix {
|
|||||||
FixWallGran(class LAMMPS *, int, char **);
|
FixWallGran(class LAMMPS *, int, char **);
|
||||||
virtual ~FixWallGran();
|
virtual ~FixWallGran();
|
||||||
int setmask();
|
int setmask();
|
||||||
void init();
|
virtual void init();
|
||||||
void setup(int);
|
void setup(int);
|
||||||
virtual void post_force(int);
|
virtual void post_force(int);
|
||||||
virtual void post_force_respa(int, int, int);
|
virtual void post_force_respa(int, int, int);
|
||||||
|
|
||||||
double memory_usage();
|
virtual double memory_usage();
|
||||||
void grow_arrays(int);
|
virtual void grow_arrays(int);
|
||||||
void copy_arrays(int, int, int);
|
virtual void copy_arrays(int, int, int);
|
||||||
void set_arrays(int);
|
virtual void set_arrays(int);
|
||||||
int pack_exchange(int, double *);
|
virtual int pack_exchange(int, double *);
|
||||||
int unpack_exchange(int, double *);
|
virtual int unpack_exchange(int, double *);
|
||||||
int pack_restart(int, double *);
|
virtual int pack_restart(int, double *);
|
||||||
void unpack_restart(int, int);
|
virtual void unpack_restart(int, int);
|
||||||
int size_restart(int);
|
virtual int size_restart(int);
|
||||||
int maxsize_restart();
|
virtual int maxsize_restart();
|
||||||
void reset_dt();
|
void reset_dt();
|
||||||
|
|
||||||
protected:
|
|
||||||
int wallstyle,pairstyle,history,wiggle,wshear,axis;
|
|
||||||
double kn,kt,gamman,gammat,xmu;
|
|
||||||
double lo,hi,cylradius;
|
|
||||||
double amplitude,period,omega,vshear;
|
|
||||||
double dt;
|
|
||||||
int nlevels_respa;
|
|
||||||
int time_origin;
|
|
||||||
|
|
||||||
// shear history values
|
|
||||||
|
|
||||||
double **shear;
|
|
||||||
int shearupdate;
|
|
||||||
|
|
||||||
// rigid body masses for use in granular interactions
|
|
||||||
|
|
||||||
class Fix *fix_rigid; // ptr to rigid body fix, NULL if none
|
|
||||||
double *mass_rigid; // rigid mass for owned+ghost atoms
|
|
||||||
int nmax; // allocated size of mass_rigid
|
|
||||||
|
|
||||||
void hooke(double, double, double, double, double *,
|
void hooke(double, double, double, double, double *,
|
||||||
double *, double *, double *, double *, double, double);
|
double *, double *, double *, double *, double, double);
|
||||||
void hooke_history(double, double, double, double, double *,
|
void hooke_history(double, double, double, double, double *,
|
||||||
double *, double *, double *, double *, double, double,
|
double *, double *, double *, double *, double, double,
|
||||||
double *);
|
double *);
|
||||||
void hertz_history(double, double, double, double, double *,
|
void hertz_history(double, double, double, double, double *, double,
|
||||||
double *, double *, double *, double *, double, double,
|
double *, double *, double *, double *, double, double,
|
||||||
double *);
|
double *);
|
||||||
|
void bonded_history(double, double, double, double, double *, double,
|
||||||
|
double *, double *, double *, double *, double, double,
|
||||||
|
double *);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
int wallstyle,wiggle,wshear,axis;
|
||||||
|
int pairstyle,nlevels_respa;
|
||||||
|
bigint time_origin;
|
||||||
|
double kn,kt,gamman,gammat,xmu;
|
||||||
|
double E,G,SurfEnergy;
|
||||||
|
double lo,hi,cylradius;
|
||||||
|
double amplitude,period,omega,vshear;
|
||||||
|
double dt;
|
||||||
|
char *idregion;
|
||||||
|
|
||||||
|
int history; // if particle/wall interaction stores history
|
||||||
|
int shearupdate; // flag for whether shear history is updated
|
||||||
|
int sheardim; // # of shear history values per contact
|
||||||
|
|
||||||
|
// shear history for single contact per particle
|
||||||
|
|
||||||
|
double **shearone;
|
||||||
|
|
||||||
|
// rigid body masses for use in granular interactions
|
||||||
|
|
||||||
|
class Fix *fix_rigid; // ptr to rigid body fix, NULL if none
|
||||||
|
double *mass_rigid; // rigid mass for owned+ghost atoms
|
||||||
|
int nmax; // allocated size of mass_rigid
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
548
src/GRANULAR/fix_wall_gran_region.cpp
Normal file
548
src/GRANULAR/fix_wall_gran_region.cpp
Normal file
@ -0,0 +1,548 @@
|
|||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
|
||||||
|
http://lammps.sandia.gov, Sandia National Laboratories
|
||||||
|
Steve Plimpton, sjplimp@sandia.gov
|
||||||
|
|
||||||
|
Copyright (2003) Sandia Corporation. Under the terms of Contract
|
||||||
|
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
|
||||||
|
certain rights in this software. This software is distributed under
|
||||||
|
the GNU General Public License.
|
||||||
|
|
||||||
|
See the README file in the top-level LAMMPS directory.
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
Contributing authors: Dan Bolintineanu (SNL)
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
#include "math.h"
|
||||||
|
#include "stdlib.h"
|
||||||
|
#include "string.h"
|
||||||
|
#include "fix_wall_gran_region.h"
|
||||||
|
#include "region.h"
|
||||||
|
#include "atom.h"
|
||||||
|
#include "domain.h"
|
||||||
|
#include "update.h"
|
||||||
|
#include "force.h"
|
||||||
|
#include "pair.h"
|
||||||
|
#include "modify.h"
|
||||||
|
#include "respa.h"
|
||||||
|
#include "math_const.h"
|
||||||
|
#include "memory.h"
|
||||||
|
#include "error.h"
|
||||||
|
|
||||||
|
using namespace LAMMPS_NS;
|
||||||
|
using namespace FixConst;
|
||||||
|
using namespace MathConst;
|
||||||
|
|
||||||
|
// same as FixWallGran
|
||||||
|
|
||||||
|
enum{HOOKE,HOOKE_HISTORY,HERTZ_HISTORY,BONDED_HISTORY};
|
||||||
|
|
||||||
|
#define BIG 1.0e20
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
FixWallGranRegion::FixWallGranRegion(LAMMPS *lmp, int narg, char **arg) :
|
||||||
|
FixWallGran(lmp, narg, arg)
|
||||||
|
{
|
||||||
|
restart_global = 1;
|
||||||
|
motion_resetflag = 0;
|
||||||
|
|
||||||
|
int iregion = domain->find_region(idregion);
|
||||||
|
if (iregion == -1)
|
||||||
|
error->all(FLERR,"Region ID for fix wall/gran/region does not exist");
|
||||||
|
region = domain->regions[iregion];
|
||||||
|
region_style = new char[strlen(region->style)+1];
|
||||||
|
strcpy(region_style,region->style);
|
||||||
|
nregion = region->nregion;
|
||||||
|
|
||||||
|
tmax = domain->regions[iregion]->tmax;
|
||||||
|
c2r = new int[tmax];
|
||||||
|
|
||||||
|
// re-allocate atom-based arrays with nshear
|
||||||
|
// do not register with Atom class, since parent class did that
|
||||||
|
|
||||||
|
memory->destroy(shearone);
|
||||||
|
shearone = NULL;
|
||||||
|
|
||||||
|
ncontact = NULL;
|
||||||
|
walls = NULL;
|
||||||
|
shearmany = NULL;
|
||||||
|
grow_arrays(atom->nmax);
|
||||||
|
|
||||||
|
// initialize shear history as if particle is not touching region
|
||||||
|
|
||||||
|
if (history) {
|
||||||
|
int nlocal = atom->nlocal;
|
||||||
|
for (int i = 0; i < nlocal; i++)
|
||||||
|
ncontact[i] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
FixWallGranRegion::~FixWallGranRegion()
|
||||||
|
{
|
||||||
|
delete [] c2r;
|
||||||
|
memory->destroy(ncontact);
|
||||||
|
memory->destroy(walls);
|
||||||
|
memory->destroy(shearmany);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void FixWallGranRegion::init()
|
||||||
|
{
|
||||||
|
FixWallGran::init();
|
||||||
|
|
||||||
|
int iregion = domain->find_region(idregion);
|
||||||
|
if (iregion == -1)
|
||||||
|
error->all(FLERR,"Region ID for fix wall/gran/region does not exist");
|
||||||
|
region = domain->regions[iregion];
|
||||||
|
|
||||||
|
// region displacement and orientation theta at previous step
|
||||||
|
// check if region properties changed between runs
|
||||||
|
|
||||||
|
if (motion_resetflag) {
|
||||||
|
if (comm->me == 0) {
|
||||||
|
char str[128];
|
||||||
|
sprintf(str,"Properties for region %s do not match restart file, "
|
||||||
|
"resetting its motion",idregion);
|
||||||
|
error->warning(FLERR,str);
|
||||||
|
}
|
||||||
|
region->reset_vel();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void FixWallGranRegion::post_force(int vflag)
|
||||||
|
{
|
||||||
|
int i,m,nc,iwall;
|
||||||
|
double rinv,fx,fy,fz,tooclose;
|
||||||
|
double dx,dy,dz,rsq,meff;
|
||||||
|
double xc[3],vwall[3];
|
||||||
|
|
||||||
|
// do not update shear history during setup
|
||||||
|
|
||||||
|
shearupdate = 1;
|
||||||
|
if (update->setupflag) shearupdate = 0;
|
||||||
|
|
||||||
|
// if just reneighbored:
|
||||||
|
// update rigid body masses for owned atoms if using FixRigid
|
||||||
|
// body[i] = which body atom I is in, -1 if none
|
||||||
|
// mass_body = mass of each rigid body
|
||||||
|
|
||||||
|
if (neighbor->ago == 0 && fix_rigid) {
|
||||||
|
int tmp;
|
||||||
|
int *body = (int *) fix_rigid->extract("body",tmp);
|
||||||
|
double *mass_body = (double *) fix_rigid->extract("masstotal",tmp);
|
||||||
|
if (atom->nmax > nmax) {
|
||||||
|
memory->destroy(mass_rigid);
|
||||||
|
nmax = atom->nmax;
|
||||||
|
memory->create(mass_rigid,nmax,"wall/gran:mass_rigid");
|
||||||
|
}
|
||||||
|
int nlocal = atom->nlocal;
|
||||||
|
for (i = 0; i < nlocal; i++) {
|
||||||
|
if (body[i] >= 0) mass_rigid[i] = mass_body[body[i]];
|
||||||
|
else mass_rigid[i] = 0.0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int regiondynamic = region->dynamic_check();
|
||||||
|
if (!regiondynamic) vwall[0] = vwall[1] = vwall[2] = 0.0;
|
||||||
|
|
||||||
|
double **x = atom->x;
|
||||||
|
double **v = atom->v;
|
||||||
|
double **f = atom->f;
|
||||||
|
double **omega = atom->omega;
|
||||||
|
double **torque = atom->torque;
|
||||||
|
double *radius = atom->radius;
|
||||||
|
double *rmass = atom->rmass;
|
||||||
|
|
||||||
|
int *mask = atom->mask;
|
||||||
|
int nlocal = atom->nlocal;
|
||||||
|
|
||||||
|
// set current motion attributes of region
|
||||||
|
// set_velocity() also updates prev to current step
|
||||||
|
|
||||||
|
if (regiondynamic) {
|
||||||
|
region->prematch();
|
||||||
|
region->set_velocity();
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < nlocal; i++) {
|
||||||
|
if (mask[i] & groupbit) {
|
||||||
|
if (!region->match(x[i][0],x[i][1],x[i][2])) continue;
|
||||||
|
|
||||||
|
nc = region->surface(x[i][0],x[i][1],x[i][2],radius[i]);
|
||||||
|
if (nc > tmax)
|
||||||
|
error->one(FLERR,"Too many wall/gran/region contacts for one particle");
|
||||||
|
|
||||||
|
// shear history maintenance
|
||||||
|
// update ncontact,walls,shear2many for particle I
|
||||||
|
// to reflect new and persistent shear history values
|
||||||
|
// also set c2r[] = indices into region->contact[] for each of N contacts
|
||||||
|
// process zero or one contact here, otherwise invoke update_contacts()
|
||||||
|
|
||||||
|
if (history) {
|
||||||
|
if (nc == 0) {
|
||||||
|
ncontact[i] = 0;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (nc == 1) {
|
||||||
|
c2r[0] = 0;
|
||||||
|
iwall = region->contact[0].iwall;
|
||||||
|
if (ncontact[i] == 0) {
|
||||||
|
ncontact[i] = 1;
|
||||||
|
walls[i][0] = iwall;
|
||||||
|
for (m = 0; m < sheardim; m++)
|
||||||
|
shearmany[i][0][m] = 0.0;
|
||||||
|
} else if (ncontact[i] > 1 || iwall != walls[i][0])
|
||||||
|
update_contacts(i,nc);
|
||||||
|
} else update_contacts(i,nc);
|
||||||
|
}
|
||||||
|
|
||||||
|
// process current contacts
|
||||||
|
|
||||||
|
for (int ic = 0; ic < nc; ic++) {
|
||||||
|
|
||||||
|
// rsq = squared contact distance
|
||||||
|
// xc = contact point
|
||||||
|
|
||||||
|
rsq = region->contact[ic].r*region->contact[ic].r;
|
||||||
|
|
||||||
|
dx = region->contact[ic].delx;
|
||||||
|
dy = region->contact[ic].dely;
|
||||||
|
dz = region->contact[ic].delz;
|
||||||
|
|
||||||
|
if (regiondynamic) region->velocity_contact(vwall, x[i], ic);
|
||||||
|
|
||||||
|
|
||||||
|
// meff = effective mass of sphere
|
||||||
|
// if I is part of rigid body, use body mass
|
||||||
|
|
||||||
|
meff = rmass[i];
|
||||||
|
if (fix_rigid && mass_rigid[i] > 0.0) meff = mass_rigid[i];
|
||||||
|
|
||||||
|
// invoke sphere/wall interaction
|
||||||
|
|
||||||
|
if (pairstyle == HOOKE)
|
||||||
|
hooke(rsq,dx,dy,dz,vwall,v[i],f[i],
|
||||||
|
omega[i],torque[i],radius[i],meff);
|
||||||
|
else if (pairstyle == HOOKE_HISTORY)
|
||||||
|
hooke_history(rsq,dx,dy,dz,vwall,v[i],f[i],
|
||||||
|
omega[i],torque[i],radius[i],meff,
|
||||||
|
shearmany[i][c2r[ic]]);
|
||||||
|
else if (pairstyle == HERTZ_HISTORY)
|
||||||
|
hertz_history(rsq,dx,dy,dz,vwall,region->contact[ic].radius,
|
||||||
|
v[i],f[i],omega[i],torque[i],
|
||||||
|
radius[i],meff,shearmany[i][c2r[ic]]);
|
||||||
|
else if (pairstyle == BONDED_HISTORY)
|
||||||
|
bonded_history(rsq,dx,dy,dz,vwall,region->contact[ic].radius,
|
||||||
|
v[i],f[i],omega[i],torque[i],
|
||||||
|
radius[i],meff,shearmany[i][c2r[ic]]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
update contact info in ncontact, walls, shear2many for particle I
|
||||||
|
based on ncontacts[i] old contacts and N new contacts
|
||||||
|
matched via their associated walls
|
||||||
|
delete/zero shear history for broken/new contacts
|
||||||
|
also set c2r[i] = index of Ith contact in region list of contacts
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void FixWallGranRegion::update_contacts(int i, int nc)
|
||||||
|
{
|
||||||
|
int j,m,iold,nold,ilast,inew,iadd,iwall;
|
||||||
|
|
||||||
|
// loop over old contacts
|
||||||
|
// if not in new contact list:
|
||||||
|
// delete old contact by copying last contact over it
|
||||||
|
|
||||||
|
iold = 0;
|
||||||
|
while (iold < ncontact[i]) {
|
||||||
|
for (m = 0; m < nc; m++)
|
||||||
|
if (region->contact[m].iwall = walls[i][iold]) break;
|
||||||
|
if (m < nc) {
|
||||||
|
ilast = ncontact[i]-1;
|
||||||
|
for (j = 0; j < sheardim; j++)
|
||||||
|
shearmany[i][iold][j] = shearmany[i][ilast][j];
|
||||||
|
walls[i][iold] = walls[i][ilast];
|
||||||
|
ncontact[i]--;
|
||||||
|
} else iold++;
|
||||||
|
}
|
||||||
|
|
||||||
|
// loop over new contacts
|
||||||
|
// if not in newly compressed contact list of length nold:
|
||||||
|
// add it with zeroed shear history
|
||||||
|
// set all values in c2r
|
||||||
|
|
||||||
|
nold = ncontact[i];
|
||||||
|
|
||||||
|
for (inew = 0; inew < nc; inew++) {
|
||||||
|
iwall = region->contact[inew].iwall;
|
||||||
|
for (m = 0; m < nold; m++)
|
||||||
|
if (walls[i][m] == iwall) break;
|
||||||
|
if (m < nold) c2r[m] = inew;
|
||||||
|
else {
|
||||||
|
iadd = ncontact[i];
|
||||||
|
|
||||||
|
c2r[iadd] = inew;
|
||||||
|
for (j = 0; j < sheardim; j++)
|
||||||
|
shearmany[i][iadd][j] = 0.0;
|
||||||
|
walls[i][iadd] = iwall;
|
||||||
|
ncontact[i]++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
memory usage of local atom-based arrays
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
double FixWallGranRegion::memory_usage()
|
||||||
|
{
|
||||||
|
int nmax = atom->nmax;
|
||||||
|
double bytes = 0.0;
|
||||||
|
if (history) { // shear history
|
||||||
|
bytes += nmax * sizeof(int); // ncontact
|
||||||
|
bytes += nmax*tmax * sizeof(int); // walls
|
||||||
|
bytes += nmax*tmax*sheardim * sizeof(double); // shearmany
|
||||||
|
}
|
||||||
|
if (fix_rigid) bytes += nmax * sizeof(int); // mass_rigid
|
||||||
|
return bytes;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
allocate local atom-based arrays
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void FixWallGranRegion::grow_arrays(int nmax)
|
||||||
|
{
|
||||||
|
if (history) {
|
||||||
|
memory->grow(ncontact,nmax,"fix_wall_gran:ncontact");
|
||||||
|
memory->grow(walls,nmax,tmax,"fix_wall_gran:walls");
|
||||||
|
memory->grow(shearmany,nmax,tmax,sheardim,"fix_wall_gran:shearmany");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
copy values within local atom-based arrays
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void FixWallGranRegion::copy_arrays(int i, int j, int delflag)
|
||||||
|
{
|
||||||
|
int m,n,iwall;
|
||||||
|
|
||||||
|
if (!history) return;
|
||||||
|
|
||||||
|
n = ncontact[i];
|
||||||
|
|
||||||
|
for (iwall = 0; iwall < n; iwall++) {
|
||||||
|
walls[j][iwall] = walls[i][iwall];
|
||||||
|
for (m = 0; m < sheardim; m++)
|
||||||
|
shearmany[j][iwall][m] = shearmany[i][iwall][m];
|
||||||
|
}
|
||||||
|
ncontact[j] = ncontact[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
initialize one atom's array values, called when atom is created
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void FixWallGranRegion::set_arrays(int i)
|
||||||
|
{
|
||||||
|
if (!history) return;
|
||||||
|
ncontact[i] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
pack values in local atom-based arrays for exchange with another proc
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
int FixWallGranRegion::pack_exchange(int i, double *buf)
|
||||||
|
{
|
||||||
|
int m;
|
||||||
|
|
||||||
|
if (!history) return 0;
|
||||||
|
|
||||||
|
int n = 0;
|
||||||
|
int count = ncontact[i];
|
||||||
|
|
||||||
|
buf[n++] = ubuf(count).d;
|
||||||
|
for (int iwall = 0; iwall < count; iwall++) {
|
||||||
|
buf[n++] = ubuf(walls[i][iwall]).d;
|
||||||
|
for (m = 0; m < sheardim; m++)
|
||||||
|
buf[n++] = shearmany[i][iwall][m];
|
||||||
|
}
|
||||||
|
|
||||||
|
return n;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
unpack values into local atom-based arrays after exchange
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
int FixWallGranRegion::unpack_exchange(int nlocal, double *buf)
|
||||||
|
{
|
||||||
|
int m;
|
||||||
|
|
||||||
|
if (!history) return 0;
|
||||||
|
|
||||||
|
int n = 0;
|
||||||
|
int count = ncontact[nlocal] = (int) ubuf(buf[n++]).i;
|
||||||
|
|
||||||
|
for (int iwall = 0; iwall < count; iwall++) {
|
||||||
|
walls[nlocal][iwall] = (int) ubuf(buf[n++]).i;
|
||||||
|
for (m = 0; m < sheardim; m++)
|
||||||
|
shearmany[nlocal][iwall][m] = buf[n++];
|
||||||
|
}
|
||||||
|
|
||||||
|
return n;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
pack values in local atom-based arrays for restart file
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
int FixWallGranRegion::pack_restart(int i, double *buf)
|
||||||
|
{
|
||||||
|
int m;
|
||||||
|
|
||||||
|
if (!history) return 0;
|
||||||
|
|
||||||
|
int n = 1;
|
||||||
|
int count = ncontact[i];
|
||||||
|
|
||||||
|
buf[n++] = ubuf(count).d;
|
||||||
|
for (int iwall = 0; iwall < count; iwall++) {
|
||||||
|
buf[n++] = ubuf(walls[i][iwall]).d;
|
||||||
|
for (m = 0; m < sheardim; m++)
|
||||||
|
buf[n++] = shearmany[i][iwall][m];
|
||||||
|
}
|
||||||
|
buf[0] = n;
|
||||||
|
return n;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
unpack values from atom->extra array to restart the fix
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void FixWallGranRegion::unpack_restart(int nlocal, int nth)
|
||||||
|
{
|
||||||
|
int k;
|
||||||
|
|
||||||
|
if (!history) return;
|
||||||
|
|
||||||
|
double **extra = atom->extra;
|
||||||
|
|
||||||
|
// skip to Nth set of extra values
|
||||||
|
|
||||||
|
int m = 0;
|
||||||
|
for (int i = 0; i < nth; i++) m += static_cast<int> (extra[nlocal][m]);
|
||||||
|
m++;
|
||||||
|
|
||||||
|
int count = ncontact[nlocal] = (int) ubuf(extra[nlocal][m++]).i;
|
||||||
|
for (int iwall = 0; iwall < count; iwall++) {
|
||||||
|
walls[nlocal][iwall] = (int) ubuf(extra[nlocal][m++]).i;
|
||||||
|
for (k = 0; k < sheardim; k++)
|
||||||
|
shearmany[nlocal][iwall][k] = extra[nlocal][m++];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
maxsize of any atom's restart data
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
int FixWallGranRegion::maxsize_restart()
|
||||||
|
{
|
||||||
|
if (!history) return 0;
|
||||||
|
return 2 + tmax*(sheardim+1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
size of atom nlocal's restart data
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
int FixWallGranRegion::size_restart(int nlocal)
|
||||||
|
{
|
||||||
|
if (!history) return 0;
|
||||||
|
return 2 + ncontact[nlocal]*(sheardim+1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
pack entire state of Fix into one write
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void FixWallGranRegion::write_restart(FILE *fp)
|
||||||
|
{
|
||||||
|
if (comm->me) return;
|
||||||
|
int size_id_str = (strlen(region->id) + 1) * sizeof(char);
|
||||||
|
int size_style_str = (strlen(region->style) + 1) * sizeof(char);
|
||||||
|
int size_tot = sizeof(int) + size_id_str +
|
||||||
|
sizeof(int) + size_style_str + sizeof(int) +
|
||||||
|
region->size_restart*sizeof(double);
|
||||||
|
|
||||||
|
fwrite(&size_tot,sizeof(int),1,fp);
|
||||||
|
fwrite(&size_id_str,sizeof(int),1,fp);
|
||||||
|
fwrite(region->id,sizeof(char),size_id_str,fp);
|
||||||
|
fwrite(&size_style_str,sizeof(int),1,fp);
|
||||||
|
fwrite(region->style,sizeof(char),size_style_str,fp);
|
||||||
|
fwrite(®ion->nregion,sizeof(int),1,fp);
|
||||||
|
|
||||||
|
region->write_restart(fp);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
use state info from restart file to restart the Fix
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void FixWallGranRegion::restart(char *buf)
|
||||||
|
{
|
||||||
|
int n = 0;
|
||||||
|
int size_id_str = buf[n];
|
||||||
|
n += sizeof(int);
|
||||||
|
char *region_id_restart = new char[size_id_str];
|
||||||
|
for (int i = 0; i < size_id_str; i++){
|
||||||
|
region_id_restart[i] = buf[n++];
|
||||||
|
}
|
||||||
|
|
||||||
|
int size_style_str = buf[n];
|
||||||
|
n += sizeof(int);
|
||||||
|
char *region_style_restart = new char[size_style_str];
|
||||||
|
for (int i = 0; i < size_style_str; i++)
|
||||||
|
region_style_restart[i] = buf[n++];
|
||||||
|
|
||||||
|
int nregion_restart = buf[n];
|
||||||
|
n += sizeof(int);
|
||||||
|
|
||||||
|
if (check_consistent_region(region,region_id_restart,
|
||||||
|
region_style_restart,nregion_restart))
|
||||||
|
region->restart(buf,n);
|
||||||
|
else motion_resetflag = 1;
|
||||||
|
|
||||||
|
delete [] region_id_restart;
|
||||||
|
delete [] region_style_restart;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
check that region id/style/number of sub-regions are consistent
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
int FixWallGranRegion::check_consistent_region(Region *region,
|
||||||
|
char* region_id,
|
||||||
|
char* region_style, int nregion)
|
||||||
|
{
|
||||||
|
if (strcmp(region_id, region->id) != 0 ||
|
||||||
|
strcmp(region_style, region->style) != 0 ||
|
||||||
|
nregion != region->nregion)
|
||||||
|
return 0;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
106
src/GRANULAR/fix_wall_gran_region.h
Normal file
106
src/GRANULAR/fix_wall_gran_region.h
Normal file
@ -0,0 +1,106 @@
|
|||||||
|
/* -*- c++ -*- ----------------------------------------------------------
|
||||||
|
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
|
||||||
|
http://lammps.sandia.gov, Sandia National Laboratories
|
||||||
|
Steve Plimpton, sjplimp@sandia.gov
|
||||||
|
|
||||||
|
Copyright (2003) Sandia Corporation. Under the terms of Contract
|
||||||
|
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
|
||||||
|
certain rights in this software. This software is distributed under
|
||||||
|
the GNU General Public License.
|
||||||
|
|
||||||
|
See the README file in the top-level LAMMPS directory.
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
#ifdef FIX_CLASS
|
||||||
|
|
||||||
|
FixStyle(wall/gran/region,FixWallGranRegion)
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
#ifndef LMP_FIX_WALL_GRAN_REGION_H
|
||||||
|
#define LMP_FIX_WALL_GRAN_REGION_H
|
||||||
|
|
||||||
|
#include "fix_wall_gran.h"
|
||||||
|
|
||||||
|
namespace LAMMPS_NS {
|
||||||
|
|
||||||
|
class FixWallGranRegion : public FixWallGran {
|
||||||
|
public:
|
||||||
|
FixWallGranRegion(class LAMMPS *, int, char **);
|
||||||
|
~FixWallGranRegion();
|
||||||
|
void post_force(int);
|
||||||
|
void write_restart(FILE *);
|
||||||
|
void restart(char* );
|
||||||
|
void init();
|
||||||
|
|
||||||
|
double memory_usage();
|
||||||
|
void grow_arrays(int);
|
||||||
|
void copy_arrays(int, int, int);
|
||||||
|
void set_arrays(int);
|
||||||
|
int pack_exchange(int, double *);
|
||||||
|
int unpack_exchange(int, double *);
|
||||||
|
int pack_restart(int, double *);
|
||||||
|
void unpack_restart(int, int);
|
||||||
|
int size_restart(int);
|
||||||
|
int maxsize_restart();
|
||||||
|
|
||||||
|
private:
|
||||||
|
class Region *region;
|
||||||
|
char *region_style;
|
||||||
|
int nregion;
|
||||||
|
|
||||||
|
// shear history for multiple contacts per particle
|
||||||
|
|
||||||
|
int tmax; // max # of region walls one particle can touch
|
||||||
|
int *ncontact; // # of shear contacts per particle
|
||||||
|
int **walls; // which wall each contact is with
|
||||||
|
double ***shearmany; // shear history per particle per contact
|
||||||
|
int *c2r; // contact to region mapping
|
||||||
|
// c2r[i] = index of Ith contact in
|
||||||
|
// region-contact[] list of contacts
|
||||||
|
int motion_resetflag; // used by restart to indicate that region
|
||||||
|
// vel info is to be reset
|
||||||
|
|
||||||
|
void update_contacts(int, int);
|
||||||
|
int check_consistent_region(Region *, char*, char*, int);
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* ERROR/WARNING messages:
|
||||||
|
|
||||||
|
E: Illegal ... command
|
||||||
|
|
||||||
|
Self-explanatory. Check the input script syntax and compare to the
|
||||||
|
documentation for the command. You can use -echo screen as a
|
||||||
|
command-line option when running LAMMPS to see the offending line.
|
||||||
|
|
||||||
|
E: Fix wall/gran requires atom style sphere
|
||||||
|
|
||||||
|
Self-explanatory.
|
||||||
|
|
||||||
|
E: Cannot use wall in periodic dimension
|
||||||
|
|
||||||
|
Self-explanatory.
|
||||||
|
|
||||||
|
E: Cannot wiggle and shear fix wall/gran
|
||||||
|
|
||||||
|
Cannot specify both options at the same time.
|
||||||
|
|
||||||
|
E: Invalid wiggle direction for fix wall/gran
|
||||||
|
|
||||||
|
Self-explanatory.
|
||||||
|
|
||||||
|
E: Invalid shear direction for fix wall/gran
|
||||||
|
|
||||||
|
Self-explanatory.
|
||||||
|
|
||||||
|
E: Fix wall/gran is incompatible with Pair style
|
||||||
|
|
||||||
|
Must use a granular pair style to define the parameters needed for
|
||||||
|
this fix.
|
||||||
|
|
||||||
|
*/
|
||||||
@ -21,6 +21,7 @@
|
|||||||
#include "atom_masks.h"
|
#include "atom_masks.h"
|
||||||
#include "memory.h"
|
#include "memory.h"
|
||||||
#include "error.h"
|
#include "error.h"
|
||||||
|
#include "kokkos.h"
|
||||||
|
|
||||||
using namespace LAMMPS_NS;
|
using namespace LAMMPS_NS;
|
||||||
|
|
||||||
@ -78,6 +79,9 @@ AtomKokkos::~AtomKokkos()
|
|||||||
|
|
||||||
void AtomKokkos::sync(const ExecutionSpace space, unsigned int mask)
|
void AtomKokkos::sync(const ExecutionSpace space, unsigned int mask)
|
||||||
{
|
{
|
||||||
|
if (space == Device && lmp->kokkos->auto_sync)
|
||||||
|
((AtomVecKokkos *) avec)->modified(Host,mask);
|
||||||
|
|
||||||
((AtomVecKokkos *) avec)->sync(space,mask);
|
((AtomVecKokkos *) avec)->sync(space,mask);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -86,6 +90,9 @@ void AtomKokkos::sync(const ExecutionSpace space, unsigned int mask)
|
|||||||
void AtomKokkos::modified(const ExecutionSpace space, unsigned int mask)
|
void AtomKokkos::modified(const ExecutionSpace space, unsigned int mask)
|
||||||
{
|
{
|
||||||
((AtomVecKokkos *) avec)->modified(space,mask);
|
((AtomVecKokkos *) avec)->modified(space,mask);
|
||||||
|
|
||||||
|
if (space == Device && lmp->kokkos->auto_sync)
|
||||||
|
((AtomVecKokkos *) avec)->sync(Host,mask);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AtomKokkos::sync_overlapping_device(const ExecutionSpace space, unsigned int mask)
|
void AtomKokkos::sync_overlapping_device(const ExecutionSpace space, unsigned int mask)
|
||||||
|
|||||||
@ -49,6 +49,7 @@ enum{NO_REMAP,X_REMAP,V_REMAP};
|
|||||||
|
|
||||||
FixDeformKokkos::FixDeformKokkos(LAMMPS *lmp, int narg, char **arg) : FixDeform(lmp, narg, arg)
|
FixDeformKokkos::FixDeformKokkos(LAMMPS *lmp, int narg, char **arg) : FixDeform(lmp, narg, arg)
|
||||||
{
|
{
|
||||||
|
kokkosable = 1;
|
||||||
domainKK = (DomainKokkos *) domain;
|
domainKK = (DomainKokkos *) domain;
|
||||||
|
|
||||||
datamask_read = EMPTY_MASK;
|
datamask_read = EMPTY_MASK;
|
||||||
|
|||||||
@ -44,6 +44,7 @@ template<class DeviceType>
|
|||||||
FixLangevinKokkos<DeviceType>::FixLangevinKokkos(LAMMPS *lmp, int narg, char **arg) :
|
FixLangevinKokkos<DeviceType>::FixLangevinKokkos(LAMMPS *lmp, int narg, char **arg) :
|
||||||
FixLangevin(lmp, narg, arg),rand_pool(seed + comm->me)
|
FixLangevin(lmp, narg, arg),rand_pool(seed + comm->me)
|
||||||
{
|
{
|
||||||
|
kokkosable = 1;
|
||||||
atomKK = (AtomKokkos *) atom;
|
atomKK = (AtomKokkos *) atom;
|
||||||
int ntypes = atomKK->ntypes;
|
int ntypes = atomKK->ntypes;
|
||||||
|
|
||||||
|
|||||||
@ -55,6 +55,7 @@ enum{ISO,ANISO,TRICLINIC};
|
|||||||
template<class DeviceType>
|
template<class DeviceType>
|
||||||
FixNHKokkos<DeviceType>::FixNHKokkos(LAMMPS *lmp, int narg, char **arg) : FixNH(lmp, narg, arg)
|
FixNHKokkos<DeviceType>::FixNHKokkos(LAMMPS *lmp, int narg, char **arg) : FixNH(lmp, narg, arg)
|
||||||
{
|
{
|
||||||
|
kokkosable = 1;
|
||||||
domainKK = (DomainKokkos *) domain;
|
domainKK = (DomainKokkos *) domain;
|
||||||
execution_space = ExecutionSpaceFromDevice<DeviceType>::space;
|
execution_space = ExecutionSpaceFromDevice<DeviceType>::space;
|
||||||
|
|
||||||
|
|||||||
@ -25,6 +25,7 @@ template<class DeviceType>
|
|||||||
FixNPHKokkos<DeviceType>::FixNPHKokkos(LAMMPS *lmp, int narg, char **arg) :
|
FixNPHKokkos<DeviceType>::FixNPHKokkos(LAMMPS *lmp, int narg, char **arg) :
|
||||||
FixNHKokkos<DeviceType>(lmp, narg, arg)
|
FixNHKokkos<DeviceType>(lmp, narg, arg)
|
||||||
{
|
{
|
||||||
|
this->kokkosable = 1;
|
||||||
if (this->tstat_flag)
|
if (this->tstat_flag)
|
||||||
this->error->all(FLERR,"Temperature control can not be used with fix nph");
|
this->error->all(FLERR,"Temperature control can not be used with fix nph");
|
||||||
if (!this->pstat_flag)
|
if (!this->pstat_flag)
|
||||||
|
|||||||
@ -25,6 +25,7 @@ template<class DeviceType>
|
|||||||
FixNPTKokkos<DeviceType>::FixNPTKokkos(LAMMPS *lmp, int narg, char **arg) :
|
FixNPTKokkos<DeviceType>::FixNPTKokkos(LAMMPS *lmp, int narg, char **arg) :
|
||||||
FixNHKokkos<DeviceType>(lmp, narg, arg)
|
FixNHKokkos<DeviceType>(lmp, narg, arg)
|
||||||
{
|
{
|
||||||
|
this->kokkosable = 1;
|
||||||
if (!this->tstat_flag)
|
if (!this->tstat_flag)
|
||||||
this->error->all(FLERR,"Temperature control must be used with fix npt");
|
this->error->all(FLERR,"Temperature control must be used with fix npt");
|
||||||
if (!this->pstat_flag)
|
if (!this->pstat_flag)
|
||||||
|
|||||||
@ -30,6 +30,7 @@ template<class DeviceType>
|
|||||||
FixNVEKokkos<DeviceType>::FixNVEKokkos(LAMMPS *lmp, int narg, char **arg) :
|
FixNVEKokkos<DeviceType>::FixNVEKokkos(LAMMPS *lmp, int narg, char **arg) :
|
||||||
FixNVE(lmp, narg, arg)
|
FixNVE(lmp, narg, arg)
|
||||||
{
|
{
|
||||||
|
kokkosable = 1;
|
||||||
atomKK = (AtomKokkos *) atom;
|
atomKK = (AtomKokkos *) atom;
|
||||||
execution_space = ExecutionSpaceFromDevice<DeviceType>::space;
|
execution_space = ExecutionSpaceFromDevice<DeviceType>::space;
|
||||||
|
|
||||||
|
|||||||
@ -26,6 +26,7 @@ template<class DeviceType>
|
|||||||
FixNVTKokkos<DeviceType>::FixNVTKokkos(LAMMPS *lmp, int narg, char **arg) :
|
FixNVTKokkos<DeviceType>::FixNVTKokkos(LAMMPS *lmp, int narg, char **arg) :
|
||||||
FixNHKokkos<DeviceType>(lmp, narg, arg)
|
FixNHKokkos<DeviceType>(lmp, narg, arg)
|
||||||
{
|
{
|
||||||
|
this->kokkosable = 1;
|
||||||
if (!this->tstat_flag)
|
if (!this->tstat_flag)
|
||||||
this->error->all(FLERR,"Temperature control must be used with fix nvt");
|
this->error->all(FLERR,"Temperature control must be used with fix nvt");
|
||||||
if (this->pstat_flag)
|
if (this->pstat_flag)
|
||||||
|
|||||||
@ -53,6 +53,7 @@ template<class DeviceType>
|
|||||||
FixQEqReaxKokkos<DeviceType>::FixQEqReaxKokkos(LAMMPS *lmp, int narg, char **arg) :
|
FixQEqReaxKokkos<DeviceType>::FixQEqReaxKokkos(LAMMPS *lmp, int narg, char **arg) :
|
||||||
FixQEqReax(lmp, narg, arg)
|
FixQEqReax(lmp, narg, arg)
|
||||||
{
|
{
|
||||||
|
kokkosable = 1;
|
||||||
atomKK = (AtomKokkos *) atom;
|
atomKK = (AtomKokkos *) atom;
|
||||||
execution_space = ExecutionSpaceFromDevice<DeviceType>::space;
|
execution_space = ExecutionSpaceFromDevice<DeviceType>::space;
|
||||||
|
|
||||||
|
|||||||
@ -38,6 +38,7 @@ template<class DeviceType>
|
|||||||
FixSetForceKokkos<DeviceType>::FixSetForceKokkos(LAMMPS *lmp, int narg, char **arg) :
|
FixSetForceKokkos<DeviceType>::FixSetForceKokkos(LAMMPS *lmp, int narg, char **arg) :
|
||||||
FixSetForce(lmp, narg, arg)
|
FixSetForce(lmp, narg, arg)
|
||||||
{
|
{
|
||||||
|
kokkosable = 1;
|
||||||
atomKK = (AtomKokkos *) atom;
|
atomKK = (AtomKokkos *) atom;
|
||||||
execution_space = ExecutionSpaceFromDevice<DeviceType>::space;
|
execution_space = ExecutionSpaceFromDevice<DeviceType>::space;
|
||||||
datamask_read = EMPTY_MASK;
|
datamask_read = EMPTY_MASK;
|
||||||
|
|||||||
@ -40,6 +40,7 @@ template<class DeviceType>
|
|||||||
FixWallReflectKokkos<DeviceType>::FixWallReflectKokkos(LAMMPS *lmp, int narg, char **arg) :
|
FixWallReflectKokkos<DeviceType>::FixWallReflectKokkos(LAMMPS *lmp, int narg, char **arg) :
|
||||||
FixWallReflect(lmp, narg, arg)
|
FixWallReflect(lmp, narg, arg)
|
||||||
{
|
{
|
||||||
|
kokkosable = 1;
|
||||||
atomKK = (AtomKokkos *) atom;
|
atomKK = (AtomKokkos *) atom;
|
||||||
execution_space = ExecutionSpaceFromDevice<DeviceType>::space;
|
execution_space = ExecutionSpaceFromDevice<DeviceType>::space;
|
||||||
datamask_read = X_MASK | V_MASK | MASK_MASK;
|
datamask_read = X_MASK | V_MASK | MASK_MASK;
|
||||||
|
|||||||
@ -33,6 +33,8 @@ KokkosLMP::KokkosLMP(LAMMPS *lmp, int narg, char **arg) : Pointers(lmp)
|
|||||||
kokkos_exists = 1;
|
kokkos_exists = 1;
|
||||||
lmp->kokkos = this;
|
lmp->kokkos = this;
|
||||||
|
|
||||||
|
auto_sync = 1;
|
||||||
|
|
||||||
int me = 0;
|
int me = 0;
|
||||||
MPI_Comm_rank(world,&me);
|
MPI_Comm_rank(world,&me);
|
||||||
if (me == 0) error->message(FLERR,"KOKKOS mode is enabled");
|
if (me == 0) error->message(FLERR,"KOKKOS mode is enabled");
|
||||||
|
|||||||
@ -29,6 +29,7 @@ class KokkosLMP : protected Pointers {
|
|||||||
int forward_comm_on_host;
|
int forward_comm_on_host;
|
||||||
int num_threads,ngpu;
|
int num_threads,ngpu;
|
||||||
int numa;
|
int numa;
|
||||||
|
int auto_sync;
|
||||||
|
|
||||||
KokkosLMP(class LAMMPS *, int, char **);
|
KokkosLMP(class LAMMPS *, int, char **);
|
||||||
~KokkosLMP();
|
~KokkosLMP();
|
||||||
|
|||||||
@ -16,6 +16,7 @@
|
|||||||
#include "update.h"
|
#include "update.h"
|
||||||
#include "fix.h"
|
#include "fix.h"
|
||||||
#include "compute.h"
|
#include "compute.h"
|
||||||
|
#include "kokkos.h"
|
||||||
|
|
||||||
using namespace LAMMPS_NS;
|
using namespace LAMMPS_NS;
|
||||||
|
|
||||||
@ -43,13 +44,17 @@ void ModifyKokkos::setup(int vflag)
|
|||||||
if (update->whichflag == 1)
|
if (update->whichflag == 1)
|
||||||
for (int i = 0; i < nfix; i++) {
|
for (int i = 0; i < nfix; i++) {
|
||||||
atomKK->sync(fix[i]->execution_space,fix[i]->datamask_read);
|
atomKK->sync(fix[i]->execution_space,fix[i]->datamask_read);
|
||||||
|
if (!fix[i]->kokkosable) lmp->kokkos->auto_sync = 1;
|
||||||
fix[i]->setup(vflag);
|
fix[i]->setup(vflag);
|
||||||
|
lmp->kokkos->auto_sync = 0;
|
||||||
atomKK->modified(fix[i]->execution_space,fix[i]->datamask_modify);
|
atomKK->modified(fix[i]->execution_space,fix[i]->datamask_modify);
|
||||||
}
|
}
|
||||||
else if (update->whichflag == 2)
|
else if (update->whichflag == 2)
|
||||||
for (int i = 0; i < nfix; i++) {
|
for (int i = 0; i < nfix; i++) {
|
||||||
atomKK->sync(fix[i]->execution_space,fix[i]->datamask_read);
|
atomKK->sync(fix[i]->execution_space,fix[i]->datamask_read);
|
||||||
|
if (!fix[i]->kokkosable) lmp->kokkos->auto_sync = 1;
|
||||||
fix[i]->min_setup(vflag);
|
fix[i]->min_setup(vflag);
|
||||||
|
lmp->kokkos->auto_sync = 0;
|
||||||
atomKK->modified(fix[i]->execution_space,fix[i]->datamask_modify);
|
atomKK->modified(fix[i]->execution_space,fix[i]->datamask_modify);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -65,7 +70,9 @@ void ModifyKokkos::setup_pre_exchange()
|
|||||||
for (int i = 0; i < n_pre_exchange; i++) {
|
for (int i = 0; i < n_pre_exchange; i++) {
|
||||||
atomKK->sync(fix[list_pre_exchange[i]]->execution_space,
|
atomKK->sync(fix[list_pre_exchange[i]]->execution_space,
|
||||||
fix[list_pre_exchange[i]]->datamask_read);
|
fix[list_pre_exchange[i]]->datamask_read);
|
||||||
|
if (!fix[list_pre_exchange[i]]->kokkosable) lmp->kokkos->auto_sync = 1;
|
||||||
fix[list_pre_exchange[i]]->setup_pre_exchange();
|
fix[list_pre_exchange[i]]->setup_pre_exchange();
|
||||||
|
lmp->kokkos->auto_sync = 0;
|
||||||
atomKK->modified(fix[list_pre_exchange[i]]->execution_space,
|
atomKK->modified(fix[list_pre_exchange[i]]->execution_space,
|
||||||
fix[list_pre_exchange[i]]->datamask_modify);
|
fix[list_pre_exchange[i]]->datamask_modify);
|
||||||
}
|
}
|
||||||
@ -73,7 +80,9 @@ void ModifyKokkos::setup_pre_exchange()
|
|||||||
for (int i = 0; i < n_min_pre_exchange; i++) {
|
for (int i = 0; i < n_min_pre_exchange; i++) {
|
||||||
atomKK->sync(fix[list_min_pre_exchange[i]]->execution_space,
|
atomKK->sync(fix[list_min_pre_exchange[i]]->execution_space,
|
||||||
fix[list_min_pre_exchange[i]]->datamask_read);
|
fix[list_min_pre_exchange[i]]->datamask_read);
|
||||||
|
if (!fix[list_min_pre_exchange[i]]->kokkosable) lmp->kokkos->auto_sync = 1;
|
||||||
fix[list_min_pre_exchange[i]]->min_setup_pre_exchange();
|
fix[list_min_pre_exchange[i]]->min_setup_pre_exchange();
|
||||||
|
lmp->kokkos->auto_sync = 0;
|
||||||
atomKK->modified(fix[list_min_pre_exchange[i]]->execution_space,
|
atomKK->modified(fix[list_min_pre_exchange[i]]->execution_space,
|
||||||
fix[list_min_pre_exchange[i]]->datamask_modify);
|
fix[list_min_pre_exchange[i]]->datamask_modify);
|
||||||
}
|
}
|
||||||
@ -90,7 +99,9 @@ void ModifyKokkos::setup_pre_neighbor()
|
|||||||
for (int i = 0; i < n_pre_neighbor; i++) {
|
for (int i = 0; i < n_pre_neighbor; i++) {
|
||||||
atomKK->sync(fix[list_pre_neighbor[i]]->execution_space,
|
atomKK->sync(fix[list_pre_neighbor[i]]->execution_space,
|
||||||
fix[list_pre_neighbor[i]]->datamask_read);
|
fix[list_pre_neighbor[i]]->datamask_read);
|
||||||
|
if (!fix[list_pre_neighbor[i]]->kokkosable) lmp->kokkos->auto_sync = 1;
|
||||||
fix[list_pre_neighbor[i]]->setup_pre_neighbor();
|
fix[list_pre_neighbor[i]]->setup_pre_neighbor();
|
||||||
|
lmp->kokkos->auto_sync = 0;
|
||||||
atomKK->modified(fix[list_pre_neighbor[i]]->execution_space,
|
atomKK->modified(fix[list_pre_neighbor[i]]->execution_space,
|
||||||
fix[list_pre_neighbor[i]]->datamask_modify);
|
fix[list_pre_neighbor[i]]->datamask_modify);
|
||||||
}
|
}
|
||||||
@ -98,7 +109,9 @@ void ModifyKokkos::setup_pre_neighbor()
|
|||||||
for (int i = 0; i < n_min_pre_neighbor; i++) {
|
for (int i = 0; i < n_min_pre_neighbor; i++) {
|
||||||
atomKK->sync(fix[list_min_pre_neighbor[i]]->execution_space,
|
atomKK->sync(fix[list_min_pre_neighbor[i]]->execution_space,
|
||||||
fix[list_min_pre_neighbor[i]]->datamask_read);
|
fix[list_min_pre_neighbor[i]]->datamask_read);
|
||||||
|
if (!fix[list_min_pre_neighbor[i]]->kokkosable) lmp->kokkos->auto_sync = 1;
|
||||||
fix[list_min_pre_neighbor[i]]->min_setup_pre_neighbor();
|
fix[list_min_pre_neighbor[i]]->min_setup_pre_neighbor();
|
||||||
|
lmp->kokkos->auto_sync = 0;
|
||||||
atomKK->modified(fix[list_min_pre_neighbor[i]]->execution_space,
|
atomKK->modified(fix[list_min_pre_neighbor[i]]->execution_space,
|
||||||
fix[list_min_pre_neighbor[i]]->datamask_modify);
|
fix[list_min_pre_neighbor[i]]->datamask_modify);
|
||||||
}
|
}
|
||||||
@ -115,7 +128,9 @@ void ModifyKokkos::setup_pre_force(int vflag)
|
|||||||
for (int i = 0; i < n_pre_force; i++) {
|
for (int i = 0; i < n_pre_force; i++) {
|
||||||
atomKK->sync(fix[list_pre_force[i]]->execution_space,
|
atomKK->sync(fix[list_pre_force[i]]->execution_space,
|
||||||
fix[list_pre_force[i]]->datamask_read);
|
fix[list_pre_force[i]]->datamask_read);
|
||||||
|
if (!fix[list_pre_force[i]]->kokkosable) lmp->kokkos->auto_sync = 1;
|
||||||
fix[list_pre_force[i]]->setup_pre_force(vflag);
|
fix[list_pre_force[i]]->setup_pre_force(vflag);
|
||||||
|
lmp->kokkos->auto_sync = 0;
|
||||||
atomKK->modified(fix[list_pre_force[i]]->execution_space,
|
atomKK->modified(fix[list_pre_force[i]]->execution_space,
|
||||||
fix[list_pre_force[i]]->datamask_modify);
|
fix[list_pre_force[i]]->datamask_modify);
|
||||||
}
|
}
|
||||||
@ -123,7 +138,9 @@ void ModifyKokkos::setup_pre_force(int vflag)
|
|||||||
for (int i = 0; i < n_min_pre_force; i++) {
|
for (int i = 0; i < n_min_pre_force; i++) {
|
||||||
atomKK->sync(fix[list_min_pre_force[i]]->execution_space,
|
atomKK->sync(fix[list_min_pre_force[i]]->execution_space,
|
||||||
fix[list_min_pre_force[i]]->datamask_read);
|
fix[list_min_pre_force[i]]->datamask_read);
|
||||||
|
if (!fix[list_min_pre_force[i]]->kokkosable) lmp->kokkos->auto_sync = 1;
|
||||||
fix[list_min_pre_force[i]]->min_setup_pre_force(vflag);
|
fix[list_min_pre_force[i]]->min_setup_pre_force(vflag);
|
||||||
|
lmp->kokkos->auto_sync = 0;
|
||||||
atomKK->modified(fix[list_min_pre_force[i]]->execution_space,
|
atomKK->modified(fix[list_min_pre_force[i]]->execution_space,
|
||||||
fix[list_min_pre_force[i]]->datamask_modify);
|
fix[list_min_pre_force[i]]->datamask_modify);
|
||||||
}
|
}
|
||||||
@ -138,7 +155,9 @@ void ModifyKokkos::initial_integrate(int vflag)
|
|||||||
for (int i = 0; i < n_initial_integrate; i++) {
|
for (int i = 0; i < n_initial_integrate; i++) {
|
||||||
atomKK->sync(fix[list_initial_integrate[i]]->execution_space,
|
atomKK->sync(fix[list_initial_integrate[i]]->execution_space,
|
||||||
fix[list_initial_integrate[i]]->datamask_read);
|
fix[list_initial_integrate[i]]->datamask_read);
|
||||||
|
if (!fix[list_initial_integrate[i]]->kokkosable) lmp->kokkos->auto_sync = 1;
|
||||||
fix[list_initial_integrate[i]]->initial_integrate(vflag);
|
fix[list_initial_integrate[i]]->initial_integrate(vflag);
|
||||||
|
lmp->kokkos->auto_sync = 0;
|
||||||
atomKK->modified(fix[list_initial_integrate[i]]->execution_space,
|
atomKK->modified(fix[list_initial_integrate[i]]->execution_space,
|
||||||
fix[list_initial_integrate[i]]->datamask_modify);
|
fix[list_initial_integrate[i]]->datamask_modify);
|
||||||
}
|
}
|
||||||
@ -153,7 +172,9 @@ void ModifyKokkos::post_integrate()
|
|||||||
for (int i = 0; i < n_post_integrate; i++) {
|
for (int i = 0; i < n_post_integrate; i++) {
|
||||||
atomKK->sync(fix[list_post_integrate[i]]->execution_space,
|
atomKK->sync(fix[list_post_integrate[i]]->execution_space,
|
||||||
fix[list_post_integrate[i]]->datamask_read);
|
fix[list_post_integrate[i]]->datamask_read);
|
||||||
|
if (!fix[list_post_integrate[i]]->kokkosable) lmp->kokkos->auto_sync = 1;
|
||||||
fix[list_post_integrate[i]]->post_integrate();
|
fix[list_post_integrate[i]]->post_integrate();
|
||||||
|
lmp->kokkos->auto_sync = 0;
|
||||||
atomKK->modified(fix[list_post_integrate[i]]->execution_space,
|
atomKK->modified(fix[list_post_integrate[i]]->execution_space,
|
||||||
fix[list_post_integrate[i]]->datamask_modify);
|
fix[list_post_integrate[i]]->datamask_modify);
|
||||||
}
|
}
|
||||||
@ -168,7 +189,9 @@ void ModifyKokkos::pre_exchange()
|
|||||||
for (int i = 0; i < n_pre_exchange; i++) {
|
for (int i = 0; i < n_pre_exchange; i++) {
|
||||||
atomKK->sync(fix[list_pre_exchange[i]]->execution_space,
|
atomKK->sync(fix[list_pre_exchange[i]]->execution_space,
|
||||||
fix[list_pre_exchange[i]]->datamask_read);
|
fix[list_pre_exchange[i]]->datamask_read);
|
||||||
|
if (!fix[list_pre_exchange[i]]->kokkosable) lmp->kokkos->auto_sync = 1;
|
||||||
fix[list_pre_exchange[i]]->pre_exchange();
|
fix[list_pre_exchange[i]]->pre_exchange();
|
||||||
|
lmp->kokkos->auto_sync = 0;
|
||||||
atomKK->modified(fix[list_pre_exchange[i]]->execution_space,
|
atomKK->modified(fix[list_pre_exchange[i]]->execution_space,
|
||||||
fix[list_pre_exchange[i]]->datamask_modify);
|
fix[list_pre_exchange[i]]->datamask_modify);
|
||||||
}
|
}
|
||||||
@ -183,7 +206,9 @@ void ModifyKokkos::pre_neighbor()
|
|||||||
for (int i = 0; i < n_pre_neighbor; i++) {
|
for (int i = 0; i < n_pre_neighbor; i++) {
|
||||||
atomKK->sync(fix[list_pre_neighbor[i]]->execution_space,
|
atomKK->sync(fix[list_pre_neighbor[i]]->execution_space,
|
||||||
fix[list_pre_neighbor[i]]->datamask_read);
|
fix[list_pre_neighbor[i]]->datamask_read);
|
||||||
|
if (!fix[list_pre_neighbor[i]]->kokkosable) lmp->kokkos->auto_sync = 1;
|
||||||
fix[list_pre_neighbor[i]]->pre_neighbor();
|
fix[list_pre_neighbor[i]]->pre_neighbor();
|
||||||
|
lmp->kokkos->auto_sync = 0;
|
||||||
atomKK->modified(fix[list_pre_neighbor[i]]->execution_space,
|
atomKK->modified(fix[list_pre_neighbor[i]]->execution_space,
|
||||||
fix[list_pre_neighbor[i]]->datamask_modify);
|
fix[list_pre_neighbor[i]]->datamask_modify);
|
||||||
}
|
}
|
||||||
@ -198,7 +223,9 @@ void ModifyKokkos::pre_force(int vflag)
|
|||||||
for (int i = 0; i < n_pre_force; i++) {
|
for (int i = 0; i < n_pre_force; i++) {
|
||||||
atomKK->sync(fix[list_pre_force[i]]->execution_space,
|
atomKK->sync(fix[list_pre_force[i]]->execution_space,
|
||||||
fix[list_pre_force[i]]->datamask_read);
|
fix[list_pre_force[i]]->datamask_read);
|
||||||
|
if (!fix[list_pre_force[i]]->kokkosable) lmp->kokkos->auto_sync = 1;
|
||||||
fix[list_pre_force[i]]->pre_force(vflag);
|
fix[list_pre_force[i]]->pre_force(vflag);
|
||||||
|
lmp->kokkos->auto_sync = 0;
|
||||||
atomKK->modified(fix[list_pre_force[i]]->execution_space,
|
atomKK->modified(fix[list_pre_force[i]]->execution_space,
|
||||||
fix[list_pre_force[i]]->datamask_modify);
|
fix[list_pre_force[i]]->datamask_modify);
|
||||||
}
|
}
|
||||||
@ -213,7 +240,9 @@ void ModifyKokkos::post_force(int vflag)
|
|||||||
for (int i = 0; i < n_post_force; i++) {
|
for (int i = 0; i < n_post_force; i++) {
|
||||||
atomKK->sync(fix[list_post_force[i]]->execution_space,
|
atomKK->sync(fix[list_post_force[i]]->execution_space,
|
||||||
fix[list_post_force[i]]->datamask_read);
|
fix[list_post_force[i]]->datamask_read);
|
||||||
|
if (!fix[list_post_force[i]]->kokkosable) lmp->kokkos->auto_sync = 1;
|
||||||
fix[list_post_force[i]]->post_force(vflag);
|
fix[list_post_force[i]]->post_force(vflag);
|
||||||
|
lmp->kokkos->auto_sync = 0;
|
||||||
atomKK->modified(fix[list_post_force[i]]->execution_space,
|
atomKK->modified(fix[list_post_force[i]]->execution_space,
|
||||||
fix[list_post_force[i]]->datamask_modify);
|
fix[list_post_force[i]]->datamask_modify);
|
||||||
}
|
}
|
||||||
@ -228,7 +257,9 @@ void ModifyKokkos::final_integrate()
|
|||||||
for (int i = 0; i < n_final_integrate; i++) {
|
for (int i = 0; i < n_final_integrate; i++) {
|
||||||
atomKK->sync(fix[list_final_integrate[i]]->execution_space,
|
atomKK->sync(fix[list_final_integrate[i]]->execution_space,
|
||||||
fix[list_final_integrate[i]]->datamask_read);
|
fix[list_final_integrate[i]]->datamask_read);
|
||||||
|
if (!fix[list_final_integrate[i]]->kokkosable) lmp->kokkos->auto_sync = 1;
|
||||||
fix[list_final_integrate[i]]->final_integrate();
|
fix[list_final_integrate[i]]->final_integrate();
|
||||||
|
lmp->kokkos->auto_sync = 0;
|
||||||
atomKK->modified(fix[list_final_integrate[i]]->execution_space,
|
atomKK->modified(fix[list_final_integrate[i]]->execution_space,
|
||||||
fix[list_final_integrate[i]]->datamask_modify);
|
fix[list_final_integrate[i]]->datamask_modify);
|
||||||
}
|
}
|
||||||
@ -245,7 +276,9 @@ void ModifyKokkos::end_of_step()
|
|||||||
if (update->ntimestep % end_of_step_every[i] == 0) {
|
if (update->ntimestep % end_of_step_every[i] == 0) {
|
||||||
atomKK->sync(fix[list_end_of_step[i]]->execution_space,
|
atomKK->sync(fix[list_end_of_step[i]]->execution_space,
|
||||||
fix[list_end_of_step[i]]->datamask_read);
|
fix[list_end_of_step[i]]->datamask_read);
|
||||||
|
if (!fix[list_end_of_step[i]]->kokkosable) lmp->kokkos->auto_sync = 1;
|
||||||
fix[list_end_of_step[i]]->end_of_step();
|
fix[list_end_of_step[i]]->end_of_step();
|
||||||
|
lmp->kokkos->auto_sync = 0;
|
||||||
atomKK->modified(fix[list_end_of_step[i]]->execution_space,
|
atomKK->modified(fix[list_end_of_step[i]]->execution_space,
|
||||||
fix[list_end_of_step[i]]->datamask_modify);
|
fix[list_end_of_step[i]]->datamask_modify);
|
||||||
}
|
}
|
||||||
@ -263,7 +296,9 @@ double ModifyKokkos::thermo_energy()
|
|||||||
for (int i = 0; i < n_thermo_energy; i++) {
|
for (int i = 0; i < n_thermo_energy; i++) {
|
||||||
atomKK->sync(fix[list_thermo_energy[i]]->execution_space,
|
atomKK->sync(fix[list_thermo_energy[i]]->execution_space,
|
||||||
fix[list_thermo_energy[i]]->datamask_read);
|
fix[list_thermo_energy[i]]->datamask_read);
|
||||||
|
if (!fix[list_thermo_energy[i]]->kokkosable) lmp->kokkos->auto_sync = 1;
|
||||||
energy += fix[list_thermo_energy[i]]->compute_scalar();
|
energy += fix[list_thermo_energy[i]]->compute_scalar();
|
||||||
|
lmp->kokkos->auto_sync = 0;
|
||||||
atomKK->modified(fix[list_thermo_energy[i]]->execution_space,
|
atomKK->modified(fix[list_thermo_energy[i]]->execution_space,
|
||||||
fix[list_thermo_energy[i]]->datamask_modify);
|
fix[list_thermo_energy[i]]->datamask_modify);
|
||||||
}
|
}
|
||||||
@ -279,7 +314,9 @@ void ModifyKokkos::post_run()
|
|||||||
for (int i = 0; i < nfix; i++) {
|
for (int i = 0; i < nfix; i++) {
|
||||||
atomKK->sync(fix[i]->execution_space,
|
atomKK->sync(fix[i]->execution_space,
|
||||||
fix[i]->datamask_read);
|
fix[i]->datamask_read);
|
||||||
|
if (!fix[i]->kokkosable) lmp->kokkos->auto_sync = 1;
|
||||||
fix[i]->post_run();
|
fix[i]->post_run();
|
||||||
|
lmp->kokkos->auto_sync = 0;
|
||||||
atomKK->modified(fix[i]->execution_space,
|
atomKK->modified(fix[i]->execution_space,
|
||||||
fix[i]->datamask_modify);
|
fix[i]->datamask_modify);
|
||||||
}
|
}
|
||||||
@ -294,7 +331,9 @@ void ModifyKokkos::setup_pre_force_respa(int vflag, int ilevel)
|
|||||||
for (int i = 0; i < n_pre_force; i++) {
|
for (int i = 0; i < n_pre_force; i++) {
|
||||||
atomKK->sync(fix[list_pre_force[i]]->execution_space,
|
atomKK->sync(fix[list_pre_force[i]]->execution_space,
|
||||||
fix[list_pre_force[i]]->datamask_read);
|
fix[list_pre_force[i]]->datamask_read);
|
||||||
|
if (!fix[list_pre_force[i]]->kokkosable) lmp->kokkos->auto_sync = 1;
|
||||||
fix[list_pre_force[i]]->setup_pre_force_respa(vflag,ilevel);
|
fix[list_pre_force[i]]->setup_pre_force_respa(vflag,ilevel);
|
||||||
|
lmp->kokkos->auto_sync = 0;
|
||||||
atomKK->modified(fix[list_pre_force[i]]->execution_space,
|
atomKK->modified(fix[list_pre_force[i]]->execution_space,
|
||||||
fix[list_pre_force[i]]->datamask_modify);
|
fix[list_pre_force[i]]->datamask_modify);
|
||||||
}
|
}
|
||||||
@ -309,8 +348,10 @@ void ModifyKokkos::initial_integrate_respa(int vflag, int ilevel, int iloop)
|
|||||||
for (int i = 0; i < n_initial_integrate_respa; i++) {
|
for (int i = 0; i < n_initial_integrate_respa; i++) {
|
||||||
atomKK->sync(fix[list_initial_integrate_respa[i]]->execution_space,
|
atomKK->sync(fix[list_initial_integrate_respa[i]]->execution_space,
|
||||||
fix[list_initial_integrate_respa[i]]->datamask_read);
|
fix[list_initial_integrate_respa[i]]->datamask_read);
|
||||||
|
if (!fix[list_initial_integrate_respa[i]]->kokkosable) lmp->kokkos->auto_sync = 1;
|
||||||
fix[list_initial_integrate_respa[i]]->
|
fix[list_initial_integrate_respa[i]]->
|
||||||
initial_integrate_respa(vflag,ilevel,iloop);
|
initial_integrate_respa(vflag,ilevel,iloop);
|
||||||
|
lmp->kokkos->auto_sync = 0;
|
||||||
atomKK->modified(fix[list_initial_integrate_respa[i]]->execution_space,
|
atomKK->modified(fix[list_initial_integrate_respa[i]]->execution_space,
|
||||||
fix[list_initial_integrate_respa[i]]->datamask_modify);
|
fix[list_initial_integrate_respa[i]]->datamask_modify);
|
||||||
}
|
}
|
||||||
@ -325,7 +366,9 @@ void ModifyKokkos::post_integrate_respa(int ilevel, int iloop)
|
|||||||
for (int i = 0; i < n_post_integrate_respa; i++) {
|
for (int i = 0; i < n_post_integrate_respa; i++) {
|
||||||
atomKK->sync(fix[list_post_integrate_respa[i]]->execution_space,
|
atomKK->sync(fix[list_post_integrate_respa[i]]->execution_space,
|
||||||
fix[list_post_integrate_respa[i]]->datamask_read);
|
fix[list_post_integrate_respa[i]]->datamask_read);
|
||||||
|
if (!fix[list_post_integrate_respa[i]]->kokkosable) lmp->kokkos->auto_sync = 1;
|
||||||
fix[list_post_integrate_respa[i]]->post_integrate_respa(ilevel,iloop);
|
fix[list_post_integrate_respa[i]]->post_integrate_respa(ilevel,iloop);
|
||||||
|
lmp->kokkos->auto_sync = 0;
|
||||||
atomKK->modified(fix[list_post_integrate_respa[i]]->execution_space,
|
atomKK->modified(fix[list_post_integrate_respa[i]]->execution_space,
|
||||||
fix[list_post_integrate_respa[i]]->datamask_modify);
|
fix[list_post_integrate_respa[i]]->datamask_modify);
|
||||||
}
|
}
|
||||||
@ -340,7 +383,9 @@ void ModifyKokkos::pre_force_respa(int vflag, int ilevel, int iloop)
|
|||||||
for (int i = 0; i < n_pre_force_respa; i++) {
|
for (int i = 0; i < n_pre_force_respa; i++) {
|
||||||
atomKK->sync(fix[list_pre_force_respa[i]]->execution_space,
|
atomKK->sync(fix[list_pre_force_respa[i]]->execution_space,
|
||||||
fix[list_pre_force_respa[i]]->datamask_read);
|
fix[list_pre_force_respa[i]]->datamask_read);
|
||||||
|
if (!fix[list_pre_force_respa[i]]->kokkosable) lmp->kokkos->auto_sync = 1;
|
||||||
fix[list_pre_force_respa[i]]->pre_force_respa(vflag,ilevel,iloop);
|
fix[list_pre_force_respa[i]]->pre_force_respa(vflag,ilevel,iloop);
|
||||||
|
lmp->kokkos->auto_sync = 0;
|
||||||
atomKK->modified(fix[list_pre_force_respa[i]]->execution_space,
|
atomKK->modified(fix[list_pre_force_respa[i]]->execution_space,
|
||||||
fix[list_pre_force_respa[i]]->datamask_modify);
|
fix[list_pre_force_respa[i]]->datamask_modify);
|
||||||
}
|
}
|
||||||
@ -355,7 +400,9 @@ void ModifyKokkos::post_force_respa(int vflag, int ilevel, int iloop)
|
|||||||
for (int i = 0; i < n_post_force_respa; i++) {
|
for (int i = 0; i < n_post_force_respa; i++) {
|
||||||
atomKK->sync(fix[list_post_force_respa[i]]->execution_space,
|
atomKK->sync(fix[list_post_force_respa[i]]->execution_space,
|
||||||
fix[list_post_force_respa[i]]->datamask_read);
|
fix[list_post_force_respa[i]]->datamask_read);
|
||||||
|
if (!fix[list_post_force_respa[i]]->kokkosable) lmp->kokkos->auto_sync = 1;
|
||||||
fix[list_post_force_respa[i]]->post_force_respa(vflag,ilevel,iloop);
|
fix[list_post_force_respa[i]]->post_force_respa(vflag,ilevel,iloop);
|
||||||
|
lmp->kokkos->auto_sync = 0;
|
||||||
atomKK->modified(fix[list_post_force_respa[i]]->execution_space,
|
atomKK->modified(fix[list_post_force_respa[i]]->execution_space,
|
||||||
fix[list_post_force_respa[i]]->datamask_modify);
|
fix[list_post_force_respa[i]]->datamask_modify);
|
||||||
}
|
}
|
||||||
@ -370,7 +417,9 @@ void ModifyKokkos::final_integrate_respa(int ilevel, int iloop)
|
|||||||
for (int i = 0; i < n_final_integrate_respa; i++) {
|
for (int i = 0; i < n_final_integrate_respa; i++) {
|
||||||
atomKK->sync(fix[list_final_integrate_respa[i]]->execution_space,
|
atomKK->sync(fix[list_final_integrate_respa[i]]->execution_space,
|
||||||
fix[list_final_integrate_respa[i]]->datamask_read);
|
fix[list_final_integrate_respa[i]]->datamask_read);
|
||||||
|
if (!fix[list_final_integrate_respa[i]]->kokkosable) lmp->kokkos->auto_sync = 1;
|
||||||
fix[list_final_integrate_respa[i]]->final_integrate_respa(ilevel,iloop);
|
fix[list_final_integrate_respa[i]]->final_integrate_respa(ilevel,iloop);
|
||||||
|
lmp->kokkos->auto_sync = 0;
|
||||||
atomKK->modified(fix[list_final_integrate_respa[i]]->execution_space,
|
atomKK->modified(fix[list_final_integrate_respa[i]]->execution_space,
|
||||||
fix[list_final_integrate_respa[i]]->datamask_modify);
|
fix[list_final_integrate_respa[i]]->datamask_modify);
|
||||||
}
|
}
|
||||||
@ -385,7 +434,9 @@ void ModifyKokkos::min_pre_exchange()
|
|||||||
for (int i = 0; i < n_min_pre_exchange; i++) {
|
for (int i = 0; i < n_min_pre_exchange; i++) {
|
||||||
atomKK->sync(fix[list_min_pre_exchange[i]]->execution_space,
|
atomKK->sync(fix[list_min_pre_exchange[i]]->execution_space,
|
||||||
fix[list_min_pre_exchange[i]]->datamask_read);
|
fix[list_min_pre_exchange[i]]->datamask_read);
|
||||||
|
if (!fix[list_min_pre_exchange[i]]->kokkosable) lmp->kokkos->auto_sync = 1;
|
||||||
fix[list_min_pre_exchange[i]]->min_pre_exchange();
|
fix[list_min_pre_exchange[i]]->min_pre_exchange();
|
||||||
|
lmp->kokkos->auto_sync = 0;
|
||||||
atomKK->modified(fix[list_min_pre_exchange[i]]->execution_space,
|
atomKK->modified(fix[list_min_pre_exchange[i]]->execution_space,
|
||||||
fix[list_min_pre_exchange[i]]->datamask_modify);
|
fix[list_min_pre_exchange[i]]->datamask_modify);
|
||||||
}
|
}
|
||||||
@ -400,7 +451,9 @@ void ModifyKokkos::min_pre_neighbor()
|
|||||||
for (int i = 0; i < n_min_pre_neighbor; i++) {
|
for (int i = 0; i < n_min_pre_neighbor; i++) {
|
||||||
atomKK->sync(fix[list_min_pre_neighbor[i]]->execution_space,
|
atomKK->sync(fix[list_min_pre_neighbor[i]]->execution_space,
|
||||||
fix[list_min_pre_neighbor[i]]->datamask_read);
|
fix[list_min_pre_neighbor[i]]->datamask_read);
|
||||||
|
if (!fix[list_min_pre_neighbor[i]]->kokkosable) lmp->kokkos->auto_sync = 1;
|
||||||
fix[list_min_pre_neighbor[i]]->min_pre_neighbor();
|
fix[list_min_pre_neighbor[i]]->min_pre_neighbor();
|
||||||
|
lmp->kokkos->auto_sync = 0;
|
||||||
atomKK->modified(fix[list_min_pre_neighbor[i]]->execution_space,
|
atomKK->modified(fix[list_min_pre_neighbor[i]]->execution_space,
|
||||||
fix[list_min_pre_neighbor[i]]->datamask_modify);
|
fix[list_min_pre_neighbor[i]]->datamask_modify);
|
||||||
}
|
}
|
||||||
@ -415,7 +468,9 @@ void ModifyKokkos::min_pre_force(int vflag)
|
|||||||
for (int i = 0; i < n_min_pre_force; i++) {
|
for (int i = 0; i < n_min_pre_force; i++) {
|
||||||
atomKK->sync(fix[list_min_pre_force[i]]->execution_space,
|
atomKK->sync(fix[list_min_pre_force[i]]->execution_space,
|
||||||
fix[list_min_pre_force[i]]->datamask_read);
|
fix[list_min_pre_force[i]]->datamask_read);
|
||||||
|
if (!fix[list_min_pre_force[i]]->kokkosable) lmp->kokkos->auto_sync = 1;
|
||||||
fix[list_min_pre_force[i]]->min_pre_force(vflag);
|
fix[list_min_pre_force[i]]->min_pre_force(vflag);
|
||||||
|
lmp->kokkos->auto_sync = 0;
|
||||||
atomKK->modified(fix[list_min_pre_force[i]]->execution_space,
|
atomKK->modified(fix[list_min_pre_force[i]]->execution_space,
|
||||||
fix[list_min_pre_force[i]]->datamask_modify);
|
fix[list_min_pre_force[i]]->datamask_modify);
|
||||||
}
|
}
|
||||||
@ -430,7 +485,9 @@ void ModifyKokkos::min_post_force(int vflag)
|
|||||||
for (int i = 0; i < n_min_post_force; i++) {
|
for (int i = 0; i < n_min_post_force; i++) {
|
||||||
atomKK->sync(fix[list_min_post_force[i]]->execution_space,
|
atomKK->sync(fix[list_min_post_force[i]]->execution_space,
|
||||||
fix[list_min_post_force[i]]->datamask_read);
|
fix[list_min_post_force[i]]->datamask_read);
|
||||||
|
if (!fix[list_min_post_force[i]]->kokkosable) lmp->kokkos->auto_sync = 1;
|
||||||
fix[list_min_post_force[i]]->min_post_force(vflag);
|
fix[list_min_post_force[i]]->min_post_force(vflag);
|
||||||
|
lmp->kokkos->auto_sync = 0;
|
||||||
atomKK->modified(fix[list_min_post_force[i]]->execution_space,
|
atomKK->modified(fix[list_min_post_force[i]]->execution_space,
|
||||||
fix[list_min_post_force[i]]->datamask_modify);
|
fix[list_min_post_force[i]]->datamask_modify);
|
||||||
}
|
}
|
||||||
@ -450,8 +507,10 @@ double ModifyKokkos::min_energy(double *fextra)
|
|||||||
for (int i = 0; i < n_min_energy; i++) {
|
for (int i = 0; i < n_min_energy; i++) {
|
||||||
ifix = list_min_energy[i];
|
ifix = list_min_energy[i];
|
||||||
atomKK->sync(fix[ifix]->execution_space,fix[ifix]->datamask_read);
|
atomKK->sync(fix[ifix]->execution_space,fix[ifix]->datamask_read);
|
||||||
|
if (!fix[ifix]->kokkosable) lmp->kokkos->auto_sync = 1;
|
||||||
eng += fix[ifix]->min_energy(&fextra[index]);
|
eng += fix[ifix]->min_energy(&fextra[index]);
|
||||||
index += fix[ifix]->min_dof();
|
index += fix[ifix]->min_dof();
|
||||||
|
lmp->kokkos->auto_sync = 0;
|
||||||
atomKK->modified(fix[ifix]->execution_space,fix[ifix]->datamask_modify);
|
atomKK->modified(fix[ifix]->execution_space,fix[ifix]->datamask_modify);
|
||||||
}
|
}
|
||||||
return eng;
|
return eng;
|
||||||
@ -466,7 +525,9 @@ void ModifyKokkos::min_store()
|
|||||||
for (int i = 0; i < n_min_energy; i++) {
|
for (int i = 0; i < n_min_energy; i++) {
|
||||||
atomKK->sync(fix[list_min_energy[i]]->execution_space,
|
atomKK->sync(fix[list_min_energy[i]]->execution_space,
|
||||||
fix[list_min_energy[i]]->datamask_read);
|
fix[list_min_energy[i]]->datamask_read);
|
||||||
|
if (!fix[list_min_energy[i]]->kokkosable) lmp->kokkos->auto_sync = 1;
|
||||||
fix[list_min_energy[i]]->min_store();
|
fix[list_min_energy[i]]->min_store();
|
||||||
|
lmp->kokkos->auto_sync = 0;
|
||||||
atomKK->modified(fix[list_min_energy[i]]->execution_space,
|
atomKK->modified(fix[list_min_energy[i]]->execution_space,
|
||||||
fix[list_min_energy[i]]->datamask_modify);
|
fix[list_min_energy[i]]->datamask_modify);
|
||||||
}
|
}
|
||||||
@ -481,7 +542,9 @@ void ModifyKokkos::min_clearstore()
|
|||||||
for (int i = 0; i < n_min_energy; i++) {
|
for (int i = 0; i < n_min_energy; i++) {
|
||||||
atomKK->sync(fix[list_min_energy[i]]->execution_space,
|
atomKK->sync(fix[list_min_energy[i]]->execution_space,
|
||||||
fix[list_min_energy[i]]->datamask_read);
|
fix[list_min_energy[i]]->datamask_read);
|
||||||
|
if (!fix[list_min_energy[i]]->kokkosable) lmp->kokkos->auto_sync = 1;
|
||||||
fix[list_min_energy[i]]->min_clearstore();
|
fix[list_min_energy[i]]->min_clearstore();
|
||||||
|
lmp->kokkos->auto_sync = 0;
|
||||||
atomKK->modified(fix[list_min_energy[i]]->execution_space,
|
atomKK->modified(fix[list_min_energy[i]]->execution_space,
|
||||||
fix[list_min_energy[i]]->datamask_modify);
|
fix[list_min_energy[i]]->datamask_modify);
|
||||||
}
|
}
|
||||||
@ -492,7 +555,9 @@ void ModifyKokkos::min_pushstore()
|
|||||||
for (int i = 0; i < n_min_energy; i++) {
|
for (int i = 0; i < n_min_energy; i++) {
|
||||||
atomKK->sync(fix[list_min_energy[i]]->execution_space,
|
atomKK->sync(fix[list_min_energy[i]]->execution_space,
|
||||||
fix[list_min_energy[i]]->datamask_read);
|
fix[list_min_energy[i]]->datamask_read);
|
||||||
|
if (!fix[list_min_energy[i]]->kokkosable) lmp->kokkos->auto_sync = 1;
|
||||||
fix[list_min_energy[i]]->min_pushstore();
|
fix[list_min_energy[i]]->min_pushstore();
|
||||||
|
lmp->kokkos->auto_sync = 0;
|
||||||
atomKK->modified(fix[list_min_energy[i]]->execution_space,
|
atomKK->modified(fix[list_min_energy[i]]->execution_space,
|
||||||
fix[list_min_energy[i]]->datamask_modify);
|
fix[list_min_energy[i]]->datamask_modify);
|
||||||
}
|
}
|
||||||
@ -503,7 +568,9 @@ void ModifyKokkos::min_popstore()
|
|||||||
for (int i = 0; i < n_min_energy; i++) {
|
for (int i = 0; i < n_min_energy; i++) {
|
||||||
atomKK->sync(fix[list_min_energy[i]]->execution_space,
|
atomKK->sync(fix[list_min_energy[i]]->execution_space,
|
||||||
fix[list_min_energy[i]]->datamask_read);
|
fix[list_min_energy[i]]->datamask_read);
|
||||||
|
if (!fix[list_min_energy[i]]->kokkosable) lmp->kokkos->auto_sync = 1;
|
||||||
fix[list_min_energy[i]]->min_popstore();
|
fix[list_min_energy[i]]->min_popstore();
|
||||||
|
lmp->kokkos->auto_sync = 0;
|
||||||
atomKK->modified(fix[list_min_energy[i]]->execution_space,
|
atomKK->modified(fix[list_min_energy[i]]->execution_space,
|
||||||
fix[list_min_energy[i]]->datamask_modify);
|
fix[list_min_energy[i]]->datamask_modify);
|
||||||
}
|
}
|
||||||
@ -521,8 +588,10 @@ void ModifyKokkos::min_step(double alpha, double *hextra)
|
|||||||
for (int i = 0; i < n_min_energy; i++) {
|
for (int i = 0; i < n_min_energy; i++) {
|
||||||
ifix = list_min_energy[i];
|
ifix = list_min_energy[i];
|
||||||
atomKK->sync(fix[ifix]->execution_space,fix[ifix]->datamask_read);
|
atomKK->sync(fix[ifix]->execution_space,fix[ifix]->datamask_read);
|
||||||
|
if (!fix[ifix]->kokkosable) lmp->kokkos->auto_sync = 1;
|
||||||
fix[ifix]->min_step(alpha,&hextra[index]);
|
fix[ifix]->min_step(alpha,&hextra[index]);
|
||||||
index += fix[ifix]->min_dof();
|
index += fix[ifix]->min_dof();
|
||||||
|
lmp->kokkos->auto_sync = 0;
|
||||||
atomKK->modified(fix[ifix]->execution_space,fix[ifix]->datamask_modify);
|
atomKK->modified(fix[ifix]->execution_space,fix[ifix]->datamask_modify);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -540,9 +609,11 @@ double ModifyKokkos::max_alpha(double *hextra)
|
|||||||
for (int i = 0; i < n_min_energy; i++) {
|
for (int i = 0; i < n_min_energy; i++) {
|
||||||
ifix = list_min_energy[i];
|
ifix = list_min_energy[i];
|
||||||
atomKK->sync(fix[ifix]->execution_space,fix[ifix]->datamask_read);
|
atomKK->sync(fix[ifix]->execution_space,fix[ifix]->datamask_read);
|
||||||
|
if (!fix[ifix]->kokkosable) lmp->kokkos->auto_sync = 1;
|
||||||
double alpha_one = fix[ifix]->max_alpha(&hextra[index]);
|
double alpha_one = fix[ifix]->max_alpha(&hextra[index]);
|
||||||
alpha = MIN(alpha,alpha_one);
|
alpha = MIN(alpha,alpha_one);
|
||||||
index += fix[ifix]->min_dof();
|
index += fix[ifix]->min_dof();
|
||||||
|
lmp->kokkos->auto_sync = 0;
|
||||||
atomKK->modified(fix[ifix]->execution_space,fix[ifix]->datamask_modify);
|
atomKK->modified(fix[ifix]->execution_space,fix[ifix]->datamask_modify);
|
||||||
}
|
}
|
||||||
return alpha;
|
return alpha;
|
||||||
@ -558,7 +629,9 @@ int ModifyKokkos::min_dof()
|
|||||||
for (int i = 0; i < n_min_energy; i++) {
|
for (int i = 0; i < n_min_energy; i++) {
|
||||||
atomKK->sync(fix[list_min_energy[i]]->execution_space,
|
atomKK->sync(fix[list_min_energy[i]]->execution_space,
|
||||||
fix[list_min_energy[i]]->datamask_read);
|
fix[list_min_energy[i]]->datamask_read);
|
||||||
|
if (!fix[list_min_energy[i]]->kokkosable) lmp->kokkos->auto_sync = 1;
|
||||||
ndof += fix[list_min_energy[i]]->min_dof();
|
ndof += fix[list_min_energy[i]]->min_dof();
|
||||||
|
lmp->kokkos->auto_sync = 0;
|
||||||
atomKK->modified(fix[list_min_energy[i]]->execution_space,
|
atomKK->modified(fix[list_min_energy[i]]->execution_space,
|
||||||
fix[list_min_energy[i]]->datamask_modify);
|
fix[list_min_energy[i]]->datamask_modify);
|
||||||
}
|
}
|
||||||
@ -576,7 +649,9 @@ int ModifyKokkos::min_reset_ref()
|
|||||||
for (int i = 0; i < n_min_energy; i++) {
|
for (int i = 0; i < n_min_energy; i++) {
|
||||||
atomKK->sync(fix[list_min_energy[i]]->execution_space,
|
atomKK->sync(fix[list_min_energy[i]]->execution_space,
|
||||||
fix[list_min_energy[i]]->datamask_read);
|
fix[list_min_energy[i]]->datamask_read);
|
||||||
|
if (!fix[list_min_energy[i]]->kokkosable) lmp->kokkos->auto_sync = 1;
|
||||||
itmp = fix[list_min_energy[i]]->min_reset_ref();
|
itmp = fix[list_min_energy[i]]->min_reset_ref();
|
||||||
|
lmp->kokkos->auto_sync = 0;
|
||||||
if (itmp) itmpall = 1;
|
if (itmp) itmpall = 1;
|
||||||
atomKK->modified(fix[list_min_energy[i]]->execution_space,
|
atomKK->modified(fix[list_min_energy[i]]->execution_space,
|
||||||
fix[list_min_energy[i]]->datamask_modify);
|
fix[list_min_energy[i]]->datamask_modify);
|
||||||
|
|||||||
@ -589,6 +589,11 @@ void NeighborKokkos::build_topology_kokkos() {
|
|||||||
k_dihedrallist = neighbond_device.k_dihedrallist;
|
k_dihedrallist = neighbond_device.k_dihedrallist;
|
||||||
k_improperlist = neighbond_device.k_improperlist;
|
k_improperlist = neighbond_device.k_improperlist;
|
||||||
|
|
||||||
|
k_bondlist.sync<LMPDeviceType>();
|
||||||
|
k_anglelist.sync<LMPDeviceType>();
|
||||||
|
k_dihedrallist.sync<LMPDeviceType>();
|
||||||
|
k_improperlist.sync<LMPDeviceType>();
|
||||||
|
|
||||||
k_bondlist.modify<LMPDeviceType>();
|
k_bondlist.modify<LMPDeviceType>();
|
||||||
k_anglelist.modify<LMPDeviceType>();
|
k_anglelist.modify<LMPDeviceType>();
|
||||||
k_dihedrallist.modify<LMPDeviceType>();
|
k_dihedrallist.modify<LMPDeviceType>();
|
||||||
@ -601,6 +606,11 @@ void NeighborKokkos::build_topology_kokkos() {
|
|||||||
k_dihedrallist = neighbond_host.k_dihedrallist;
|
k_dihedrallist = neighbond_host.k_dihedrallist;
|
||||||
k_improperlist = neighbond_host.k_improperlist;
|
k_improperlist = neighbond_host.k_improperlist;
|
||||||
|
|
||||||
|
k_bondlist.sync<LMPHostType>();
|
||||||
|
k_anglelist.sync<LMPHostType>();
|
||||||
|
k_dihedrallist.sync<LMPHostType>();
|
||||||
|
k_improperlist.sync<LMPHostType>();
|
||||||
|
|
||||||
k_bondlist.modify<LMPHostType>();
|
k_bondlist.modify<LMPHostType>();
|
||||||
k_anglelist.modify<LMPHostType>();
|
k_anglelist.modify<LMPHostType>();
|
||||||
k_dihedrallist.modify<LMPHostType>();
|
k_dihedrallist.modify<LMPHostType>();
|
||||||
|
|||||||
@ -75,11 +75,13 @@ void VerletKokkos::setup()
|
|||||||
}
|
}
|
||||||
|
|
||||||
update->setupflag = 1;
|
update->setupflag = 1;
|
||||||
|
lmp->kokkos->auto_sync = 0;
|
||||||
|
|
||||||
// setup domain, communication and neighboring
|
// setup domain, communication and neighboring
|
||||||
// acquire ghosts
|
// acquire ghosts
|
||||||
// build neighbor lists
|
// build neighbor lists
|
||||||
|
|
||||||
|
atomKK->sync(Host,ALL_MASK);
|
||||||
atomKK->modified(Host,ALL_MASK);
|
atomKK->modified(Host,ALL_MASK);
|
||||||
|
|
||||||
atomKK->setup();
|
atomKK->setup();
|
||||||
@ -124,8 +126,8 @@ void VerletKokkos::setup()
|
|||||||
|
|
||||||
if (pair_compute_flag) {
|
if (pair_compute_flag) {
|
||||||
atomKK->sync(force->pair->execution_space,force->pair->datamask_read);
|
atomKK->sync(force->pair->execution_space,force->pair->datamask_read);
|
||||||
atomKK->modified(force->pair->execution_space,force->pair->datamask_modify);
|
|
||||||
force->pair->compute(eflag,vflag);
|
force->pair->compute(eflag,vflag);
|
||||||
|
atomKK->modified(force->pair->execution_space,force->pair->datamask_modify);
|
||||||
timer->stamp(Timer::PAIR);
|
timer->stamp(Timer::PAIR);
|
||||||
}
|
}
|
||||||
else if (force->pair) force->pair->compute_dummy(eflag,vflag);
|
else if (force->pair) force->pair->compute_dummy(eflag,vflag);
|
||||||
@ -134,23 +136,23 @@ void VerletKokkos::setup()
|
|||||||
if (atomKK->molecular) {
|
if (atomKK->molecular) {
|
||||||
if (force->bond) {
|
if (force->bond) {
|
||||||
atomKK->sync(force->bond->execution_space,force->bond->datamask_read);
|
atomKK->sync(force->bond->execution_space,force->bond->datamask_read);
|
||||||
atomKK->modified(force->bond->execution_space,force->bond->datamask_modify);
|
|
||||||
force->bond->compute(eflag,vflag);
|
force->bond->compute(eflag,vflag);
|
||||||
|
atomKK->modified(force->bond->execution_space,force->bond->datamask_modify);
|
||||||
}
|
}
|
||||||
if (force->angle) {
|
if (force->angle) {
|
||||||
atomKK->sync(force->angle->execution_space,force->angle->datamask_read);
|
atomKK->sync(force->angle->execution_space,force->angle->datamask_read);
|
||||||
atomKK->modified(force->angle->execution_space,force->angle->datamask_modify);
|
|
||||||
force->angle->compute(eflag,vflag);
|
force->angle->compute(eflag,vflag);
|
||||||
|
atomKK->modified(force->angle->execution_space,force->angle->datamask_modify);
|
||||||
}
|
}
|
||||||
if (force->dihedral) {
|
if (force->dihedral) {
|
||||||
atomKK->sync(force->dihedral->execution_space,force->dihedral->datamask_read);
|
atomKK->sync(force->dihedral->execution_space,force->dihedral->datamask_read);
|
||||||
atomKK->modified(force->dihedral->execution_space,force->dihedral->datamask_modify);
|
|
||||||
force->dihedral->compute(eflag,vflag);
|
force->dihedral->compute(eflag,vflag);
|
||||||
|
atomKK->modified(force->dihedral->execution_space,force->dihedral->datamask_modify);
|
||||||
}
|
}
|
||||||
if (force->improper) {
|
if (force->improper) {
|
||||||
atomKK->sync(force->improper->execution_space,force->improper->datamask_read);
|
atomKK->sync(force->improper->execution_space,force->improper->datamask_read);
|
||||||
atomKK->modified(force->improper->execution_space,force->improper->datamask_modify);
|
|
||||||
force->improper->compute(eflag,vflag);
|
force->improper->compute(eflag,vflag);
|
||||||
|
atomKK->modified(force->improper->execution_space,force->improper->datamask_modify);
|
||||||
}
|
}
|
||||||
timer->stamp(Timer::BOND);
|
timer->stamp(Timer::BOND);
|
||||||
}
|
}
|
||||||
@ -159,17 +161,17 @@ void VerletKokkos::setup()
|
|||||||
force->kspace->setup();
|
force->kspace->setup();
|
||||||
if (kspace_compute_flag) {
|
if (kspace_compute_flag) {
|
||||||
atomKK->sync(force->kspace->execution_space,force->kspace->datamask_read);
|
atomKK->sync(force->kspace->execution_space,force->kspace->datamask_read);
|
||||||
atomKK->modified(force->kspace->execution_space,force->kspace->datamask_modify);
|
|
||||||
force->kspace->compute(eflag,vflag);
|
force->kspace->compute(eflag,vflag);
|
||||||
|
atomKK->modified(force->kspace->execution_space,force->kspace->datamask_modify);
|
||||||
timer->stamp(Timer::KSPACE);
|
timer->stamp(Timer::KSPACE);
|
||||||
} else force->kspace->compute_dummy(eflag,vflag);
|
} else force->kspace->compute_dummy(eflag,vflag);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (force->newton) comm->reverse_comm();
|
if (force->newton) comm->reverse_comm();
|
||||||
|
|
||||||
modify->setup(vflag);
|
modify->setup(vflag);
|
||||||
output->setup();
|
output->setup();
|
||||||
update->setupflag = 0;
|
lmp->kokkos->auto_sync = 0;
|
||||||
|
update->setupflag = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
/* ----------------------------------------------------------------------
|
||||||
@ -181,12 +183,14 @@ void VerletKokkos::setup()
|
|||||||
void VerletKokkos::setup_minimal(int flag)
|
void VerletKokkos::setup_minimal(int flag)
|
||||||
{
|
{
|
||||||
update->setupflag = 1;
|
update->setupflag = 1;
|
||||||
|
lmp->kokkos->auto_sync = 0;
|
||||||
|
|
||||||
// setup domain, communication and neighboring
|
// setup domain, communication and neighboring
|
||||||
// acquire ghosts
|
// acquire ghosts
|
||||||
// build neighbor lists
|
// build neighbor lists
|
||||||
|
|
||||||
if (flag) {
|
if (flag) {
|
||||||
|
atomKK->sync(Host,ALL_MASK);
|
||||||
atomKK->modified(Host,ALL_MASK);
|
atomKK->modified(Host,ALL_MASK);
|
||||||
|
|
||||||
modify->setup_pre_exchange();
|
modify->setup_pre_exchange();
|
||||||
@ -226,8 +230,8 @@ void VerletKokkos::setup_minimal(int flag)
|
|||||||
|
|
||||||
if (pair_compute_flag) {
|
if (pair_compute_flag) {
|
||||||
atomKK->sync(force->pair->execution_space,force->pair->datamask_read);
|
atomKK->sync(force->pair->execution_space,force->pair->datamask_read);
|
||||||
atomKK->modified(force->pair->execution_space,force->pair->datamask_modify);
|
|
||||||
force->pair->compute(eflag,vflag);
|
force->pair->compute(eflag,vflag);
|
||||||
|
atomKK->modified(force->pair->execution_space,force->pair->datamask_modify);
|
||||||
timer->stamp(Timer::PAIR);
|
timer->stamp(Timer::PAIR);
|
||||||
}
|
}
|
||||||
else if (force->pair) force->pair->compute_dummy(eflag,vflag);
|
else if (force->pair) force->pair->compute_dummy(eflag,vflag);
|
||||||
@ -236,23 +240,23 @@ void VerletKokkos::setup_minimal(int flag)
|
|||||||
if (atomKK->molecular) {
|
if (atomKK->molecular) {
|
||||||
if (force->bond) {
|
if (force->bond) {
|
||||||
atomKK->sync(force->bond->execution_space,force->bond->datamask_read);
|
atomKK->sync(force->bond->execution_space,force->bond->datamask_read);
|
||||||
atomKK->modified(force->bond->execution_space,force->bond->datamask_modify);
|
|
||||||
force->bond->compute(eflag,vflag);
|
force->bond->compute(eflag,vflag);
|
||||||
|
atomKK->modified(force->bond->execution_space,force->bond->datamask_modify);
|
||||||
}
|
}
|
||||||
if (force->angle) {
|
if (force->angle) {
|
||||||
atomKK->sync(force->angle->execution_space,force->angle->datamask_read);
|
atomKK->sync(force->angle->execution_space,force->angle->datamask_read);
|
||||||
atomKK->modified(force->angle->execution_space,force->angle->datamask_modify);
|
|
||||||
force->angle->compute(eflag,vflag);
|
force->angle->compute(eflag,vflag);
|
||||||
|
atomKK->modified(force->angle->execution_space,force->angle->datamask_modify);
|
||||||
}
|
}
|
||||||
if (force->dihedral) {
|
if (force->dihedral) {
|
||||||
atomKK->sync(force->dihedral->execution_space,force->dihedral->datamask_read);
|
atomKK->sync(force->dihedral->execution_space,force->dihedral->datamask_read);
|
||||||
atomKK->modified(force->dihedral->execution_space,force->dihedral->datamask_modify);
|
|
||||||
force->dihedral->compute(eflag,vflag);
|
force->dihedral->compute(eflag,vflag);
|
||||||
|
atomKK->modified(force->dihedral->execution_space,force->dihedral->datamask_modify);
|
||||||
}
|
}
|
||||||
if (force->improper) {
|
if (force->improper) {
|
||||||
atomKK->sync(force->improper->execution_space,force->improper->datamask_read);
|
atomKK->sync(force->improper->execution_space,force->improper->datamask_read);
|
||||||
atomKK->modified(force->improper->execution_space,force->improper->datamask_modify);
|
|
||||||
force->improper->compute(eflag,vflag);
|
force->improper->compute(eflag,vflag);
|
||||||
|
atomKK->modified(force->improper->execution_space,force->improper->datamask_modify);
|
||||||
}
|
}
|
||||||
timer->stamp(Timer::BOND);
|
timer->stamp(Timer::BOND);
|
||||||
}
|
}
|
||||||
@ -261,8 +265,8 @@ void VerletKokkos::setup_minimal(int flag)
|
|||||||
force->kspace->setup();
|
force->kspace->setup();
|
||||||
if (kspace_compute_flag) {
|
if (kspace_compute_flag) {
|
||||||
atomKK->sync(force->kspace->execution_space,force->kspace->datamask_read);
|
atomKK->sync(force->kspace->execution_space,force->kspace->datamask_read);
|
||||||
atomKK->modified(force->kspace->execution_space,force->kspace->datamask_modify);
|
|
||||||
force->kspace->compute(eflag,vflag);
|
force->kspace->compute(eflag,vflag);
|
||||||
|
atomKK->modified(force->kspace->execution_space,force->kspace->datamask_modify);
|
||||||
timer->stamp(Timer::KSPACE);
|
timer->stamp(Timer::KSPACE);
|
||||||
} else force->kspace->compute_dummy(eflag,vflag);
|
} else force->kspace->compute_dummy(eflag,vflag);
|
||||||
}
|
}
|
||||||
@ -270,6 +274,7 @@ void VerletKokkos::setup_minimal(int flag)
|
|||||||
if (force->newton) comm->reverse_comm();
|
if (force->newton) comm->reverse_comm();
|
||||||
|
|
||||||
modify->setup(vflag);
|
modify->setup(vflag);
|
||||||
|
lmp->kokkos->auto_sync = 1;
|
||||||
update->setupflag = 0;
|
update->setupflag = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -289,6 +294,8 @@ void VerletKokkos::run(int n)
|
|||||||
int n_post_force = modify->n_post_force;
|
int n_post_force = modify->n_post_force;
|
||||||
int n_end_of_step = modify->n_end_of_step;
|
int n_end_of_step = modify->n_end_of_step;
|
||||||
|
|
||||||
|
lmp->kokkos->auto_sync = 0;
|
||||||
|
|
||||||
if (atomKK->sortfreq > 0) sortflag = 1;
|
if (atomKK->sortfreq > 0) sortflag = 1;
|
||||||
else sortflag = 0;
|
else sortflag = 0;
|
||||||
|
|
||||||
@ -453,11 +460,11 @@ void VerletKokkos::run(int n)
|
|||||||
|
|
||||||
if (pair_compute_flag) {
|
if (pair_compute_flag) {
|
||||||
atomKK->sync(force->pair->execution_space,force->pair->datamask_read);
|
atomKK->sync(force->pair->execution_space,force->pair->datamask_read);
|
||||||
atomKK->modified(force->pair->execution_space,force->pair->datamask_modify);
|
|
||||||
atomKK->sync(force->pair->execution_space,~(~force->pair->datamask_read|(F_MASK | ENERGY_MASK | VIRIAL_MASK)));
|
atomKK->sync(force->pair->execution_space,~(~force->pair->datamask_read|(F_MASK | ENERGY_MASK | VIRIAL_MASK)));
|
||||||
atomKK->modified(force->pair->execution_space,~(~force->pair->datamask_modify|(F_MASK | ENERGY_MASK | VIRIAL_MASK)));
|
|
||||||
Kokkos::Impl::Timer ktimer;
|
Kokkos::Impl::Timer ktimer;
|
||||||
force->pair->compute(eflag,vflag);
|
force->pair->compute(eflag,vflag);
|
||||||
|
atomKK->modified(force->pair->execution_space,force->pair->datamask_modify);
|
||||||
|
atomKK->modified(force->pair->execution_space,~(~force->pair->datamask_modify|(F_MASK | ENERGY_MASK | VIRIAL_MASK)));
|
||||||
timer->stamp(Timer::PAIR);
|
timer->stamp(Timer::PAIR);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -473,31 +480,31 @@ void VerletKokkos::run(int n)
|
|||||||
if (atomKK->molecular) {
|
if (atomKK->molecular) {
|
||||||
if (force->bond) {
|
if (force->bond) {
|
||||||
atomKK->sync(force->bond->execution_space,~(~force->bond->datamask_read|(F_MASK | ENERGY_MASK | VIRIAL_MASK)));
|
atomKK->sync(force->bond->execution_space,~(~force->bond->datamask_read|(F_MASK | ENERGY_MASK | VIRIAL_MASK)));
|
||||||
atomKK->modified(force->bond->execution_space,~(~force->bond->datamask_modify|(F_MASK | ENERGY_MASK | VIRIAL_MASK)));
|
|
||||||
force->bond->compute(eflag,vflag);
|
force->bond->compute(eflag,vflag);
|
||||||
|
atomKK->modified(force->bond->execution_space,~(~force->bond->datamask_modify|(F_MASK | ENERGY_MASK | VIRIAL_MASK)));
|
||||||
}
|
}
|
||||||
if (force->angle) {
|
if (force->angle) {
|
||||||
atomKK->sync(force->angle->execution_space,~(~force->angle->datamask_read|(F_MASK | ENERGY_MASK | VIRIAL_MASK)));
|
atomKK->sync(force->angle->execution_space,~(~force->angle->datamask_read|(F_MASK | ENERGY_MASK | VIRIAL_MASK)));
|
||||||
atomKK->modified(force->angle->execution_space,~(~force->angle->datamask_modify|(F_MASK | ENERGY_MASK | VIRIAL_MASK)));
|
|
||||||
force->angle->compute(eflag,vflag);
|
force->angle->compute(eflag,vflag);
|
||||||
|
atomKK->modified(force->angle->execution_space,~(~force->angle->datamask_modify|(F_MASK | ENERGY_MASK | VIRIAL_MASK)));
|
||||||
}
|
}
|
||||||
if (force->dihedral) {
|
if (force->dihedral) {
|
||||||
atomKK->sync(force->dihedral->execution_space,~(~force->dihedral->datamask_read|(F_MASK | ENERGY_MASK | VIRIAL_MASK)));
|
atomKK->sync(force->dihedral->execution_space,~(~force->dihedral->datamask_read|(F_MASK | ENERGY_MASK | VIRIAL_MASK)));
|
||||||
atomKK->modified(force->dihedral->execution_space,~(~force->dihedral->datamask_modify|(F_MASK | ENERGY_MASK | VIRIAL_MASK)));
|
|
||||||
force->dihedral->compute(eflag,vflag);
|
force->dihedral->compute(eflag,vflag);
|
||||||
|
atomKK->modified(force->dihedral->execution_space,~(~force->dihedral->datamask_modify|(F_MASK | ENERGY_MASK | VIRIAL_MASK)));
|
||||||
}
|
}
|
||||||
if (force->improper) {
|
if (force->improper) {
|
||||||
atomKK->sync(force->improper->execution_space,~(~force->improper->datamask_read|(F_MASK | ENERGY_MASK | VIRIAL_MASK)));
|
atomKK->sync(force->improper->execution_space,~(~force->improper->datamask_read|(F_MASK | ENERGY_MASK | VIRIAL_MASK)));
|
||||||
atomKK->modified(force->improper->execution_space,~(~force->improper->datamask_modify|(F_MASK | ENERGY_MASK | VIRIAL_MASK)));
|
|
||||||
force->improper->compute(eflag,vflag);
|
force->improper->compute(eflag,vflag);
|
||||||
|
atomKK->modified(force->improper->execution_space,~(~force->improper->datamask_modify|(F_MASK | ENERGY_MASK | VIRIAL_MASK)));
|
||||||
}
|
}
|
||||||
timer->stamp(Timer::BOND);
|
timer->stamp(Timer::BOND);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (kspace_compute_flag) {
|
if (kspace_compute_flag) {
|
||||||
atomKK->sync(force->kspace->execution_space,~(~force->kspace->datamask_read|(F_MASK | ENERGY_MASK | VIRIAL_MASK)));
|
atomKK->sync(force->kspace->execution_space,~(~force->kspace->datamask_read|(F_MASK | ENERGY_MASK | VIRIAL_MASK)));
|
||||||
atomKK->modified(force->kspace->execution_space,~(~force->kspace->datamask_modify|(F_MASK | ENERGY_MASK | VIRIAL_MASK)));
|
|
||||||
force->kspace->compute(eflag,vflag);
|
force->kspace->compute(eflag,vflag);
|
||||||
|
atomKK->modified(force->kspace->execution_space,~(~force->kspace->datamask_modify|(F_MASK | ENERGY_MASK | VIRIAL_MASK)));
|
||||||
timer->stamp(Timer::KSPACE);
|
timer->stamp(Timer::KSPACE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -509,6 +516,7 @@ void VerletKokkos::run(int n)
|
|||||||
Kokkos::deep_copy(LMPHostType(),f_merge_copy,atomKK->k_f.h_view);
|
Kokkos::deep_copy(LMPHostType(),f_merge_copy,atomKK->k_f.h_view);
|
||||||
Kokkos::parallel_for(atomKK->k_f.dimension_0(),
|
Kokkos::parallel_for(atomKK->k_f.dimension_0(),
|
||||||
ForceAdder<DAT::t_f_array,DAT::t_f_array>(atomKK->k_f.d_view,f_merge_copy));
|
ForceAdder<DAT::t_f_array,DAT::t_f_array>(atomKK->k_f.d_view,f_merge_copy));
|
||||||
|
atomKK->k_f.modified_host() = 0; // special case
|
||||||
atomKK->k_f.modify<LMPDeviceType>();
|
atomKK->k_f.modify<LMPDeviceType>();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -535,6 +543,9 @@ void VerletKokkos::run(int n)
|
|||||||
timer->stamp(Timer::OUTPUT);
|
timer->stamp(Timer::OUTPUT);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
atomKK->sync(Host,ALL_MASK);
|
||||||
|
lmp->kokkos->auto_sync = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
/* ----------------------------------------------------------------------
|
||||||
@ -561,8 +572,9 @@ void VerletKokkos::force_clear()
|
|||||||
|
|
||||||
if (nbytes) {
|
if (nbytes) {
|
||||||
if (atomKK->k_f.modified_host() > atomKK->k_f.modified_device()) {
|
if (atomKK->k_f.modified_host() > atomKK->k_f.modified_device()) {
|
||||||
memset_kokkos(atomKK->k_f.view<LMPHostType>());
|
memset_kokkos(atomKK->k_f.view<LMPHostType>());
|
||||||
atomKK->modified(Host,F_MASK);
|
atomKK->modified(Host,F_MASK);
|
||||||
|
atomKK->sync(Device,F_MASK);
|
||||||
} else {
|
} else {
|
||||||
memset_kokkos(atomKK->k_f.view<LMPDeviceType>());
|
memset_kokkos(atomKK->k_f.view<LMPDeviceType>());
|
||||||
atomKK->modified(Device,F_MASK);
|
atomKK->modified(Device,F_MASK);
|
||||||
|
|||||||
@ -155,6 +155,11 @@ void PairAIREBO::settings(int narg, char **arg)
|
|||||||
ljflag = force->inumeric(FLERR,arg[1]);
|
ljflag = force->inumeric(FLERR,arg[1]);
|
||||||
torflag = force->inumeric(FLERR,arg[2]);
|
torflag = force->inumeric(FLERR,arg[2]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// this one parameter for C-C interactions is different in AIREBO vs REBO
|
||||||
|
// see Favata, Micheletti, Ryu, Pugno, Comp Phys Comm (2016)
|
||||||
|
|
||||||
|
PCCf_2_0 = -0.0276030;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
/* ----------------------------------------------------------------------
|
||||||
@ -4090,7 +4095,12 @@ void PairAIREBO::spline_init()
|
|||||||
PCCf[0][3] = 0.0161253646;
|
PCCf[0][3] = 0.0161253646;
|
||||||
PCCf[1][1] = -0.010960;
|
PCCf[1][1] = -0.010960;
|
||||||
PCCf[1][2] = 0.00632624824;
|
PCCf[1][2] = 0.00632624824;
|
||||||
PCCf[2][0] = -0.0276030;
|
|
||||||
|
// this one parameter for C-C interactions is different in REBO vs AIREBO
|
||||||
|
// see Favata, Micheletti, Ryu, Pugno, Comp Phys Comm (2016)
|
||||||
|
|
||||||
|
PCCf[2][0] = PCCf_2_0;
|
||||||
|
|
||||||
PCCf[2][1] = 0.00317953083;
|
PCCf[2][1] = 0.00317953083;
|
||||||
|
|
||||||
PCHf[0][1] = 0.209336733;
|
PCHf[0][1] = 0.209336733;
|
||||||
|
|||||||
@ -70,6 +70,7 @@ class PairAIREBO : public Pair {
|
|||||||
double epsilon[2][2],sigma[2][2],epsilonT[2][2];
|
double epsilon[2][2],sigma[2][2],epsilonT[2][2];
|
||||||
|
|
||||||
// parameters for Morse variant
|
// parameters for Morse variant
|
||||||
|
|
||||||
double epsilonM[2][2],alphaM[2][2],reqM[2][2];
|
double epsilonM[2][2],alphaM[2][2],reqM[2][2];
|
||||||
|
|
||||||
// spline coefficients
|
// spline coefficients
|
||||||
@ -82,6 +83,7 @@ class PairAIREBO : public Pair {
|
|||||||
|
|
||||||
// spline knot values
|
// spline knot values
|
||||||
|
|
||||||
|
double PCCf_2_0;
|
||||||
double PCCf[5][5],PCCdfdx[5][5],PCCdfdy[5][5],PCHf[5][5];
|
double PCCf[5][5],PCCdfdx[5][5],PCCdfdy[5][5],PCHf[5][5];
|
||||||
double PCHdfdx[5][5],PCHdfdy[5][5];
|
double PCHdfdx[5][5],PCHdfdy[5][5];
|
||||||
double piCCf[5][5][11],piCCdfdx[5][5][11];
|
double piCCf[5][5][11],piCCdfdx[5][5][11];
|
||||||
|
|||||||
@ -30,4 +30,9 @@ void PairREBO::settings(int narg, char **arg)
|
|||||||
|
|
||||||
cutlj = 0.0;
|
cutlj = 0.0;
|
||||||
ljflag = torflag = 0;
|
ljflag = torflag = 0;
|
||||||
|
|
||||||
|
// this one parameter for C-C interactions is different in REBO vs AIREBO
|
||||||
|
// see Favata, Micheletti, Ryu, Pugno, Comp Phys Comm (2016)
|
||||||
|
|
||||||
|
PCCf_2_0 = 0.0;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -58,6 +58,8 @@ class AtomKokkos : public Atom {
|
|||||||
tagint **k_special;
|
tagint **k_special;
|
||||||
AtomKokkos(class LAMMPS *lmp) : Atom(lmp) {}
|
AtomKokkos(class LAMMPS *lmp) : Atom(lmp) {}
|
||||||
~AtomKokkos() {}
|
~AtomKokkos() {}
|
||||||
|
void sync(const ExecutionSpace space, unsigned int mask) {}
|
||||||
|
void modified(const ExecutionSpace space, unsigned int mask) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
class CommKokkos : public CommBrick {
|
class CommKokkos : public CommBrick {
|
||||||
|
|||||||
@ -101,6 +101,7 @@ id(NULL), style(NULL), eatom(NULL), vatom(NULL)
|
|||||||
datamask_read = ALL_MASK;
|
datamask_read = ALL_MASK;
|
||||||
datamask_modify = ALL_MASK;
|
datamask_modify = ALL_MASK;
|
||||||
|
|
||||||
|
kokkosable = 0;
|
||||||
copymode = 0;
|
copymode = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -96,6 +96,7 @@ class Fix : protected Pointers {
|
|||||||
|
|
||||||
// KOKKOS host/device flag and data masks
|
// KOKKOS host/device flag and data masks
|
||||||
|
|
||||||
|
int kokkosable; // 1 if Kokkos fix
|
||||||
ExecutionSpace execution_space;
|
ExecutionSpace execution_space;
|
||||||
unsigned int datamask_read,datamask_modify;
|
unsigned int datamask_read,datamask_modify;
|
||||||
|
|
||||||
|
|||||||
180
src/region.cpp
180
src/region.cpp
@ -20,6 +20,7 @@
|
|||||||
#include "lattice.h"
|
#include "lattice.h"
|
||||||
#include "input.h"
|
#include "input.h"
|
||||||
#include "variable.h"
|
#include "variable.h"
|
||||||
|
#include "math_extra.h"
|
||||||
#include "error.h"
|
#include "error.h"
|
||||||
#include "force.h"
|
#include "force.h"
|
||||||
|
|
||||||
@ -41,7 +42,15 @@ Region::Region(LAMMPS *lmp, int narg, char **arg) : Pointers(lmp)
|
|||||||
xstr = ystr = zstr = tstr = NULL;
|
xstr = ystr = zstr = tstr = NULL;
|
||||||
dx = dy = dz = 0.0;
|
dx = dy = dz = 0.0;
|
||||||
|
|
||||||
|
// used by set_velocity() even if no rotation specified
|
||||||
|
|
||||||
|
point[0] = point[1] = point[2] = 0.0;
|
||||||
|
|
||||||
|
size_restart = 5;
|
||||||
|
reset_vel();
|
||||||
copymode = 0;
|
copymode = 0;
|
||||||
|
list = NULL;
|
||||||
|
nregion = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
@ -87,6 +96,7 @@ void Region::init()
|
|||||||
if (!input->variable->equalstyle(tvar))
|
if (!input->variable->equalstyle(tvar))
|
||||||
error->all(FLERR,"Variable for region is not equal style");
|
error->all(FLERR,"Variable for region is not equal style");
|
||||||
}
|
}
|
||||||
|
vel_timestep = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
/* ----------------------------------------------------------------------
|
||||||
@ -103,9 +113,9 @@ int Region::dynamic_check()
|
|||||||
/* ----------------------------------------------------------------------
|
/* ----------------------------------------------------------------------
|
||||||
called before looping over atoms with match() or surface()
|
called before looping over atoms with match() or surface()
|
||||||
this insures any variables used by region are invoked once per timestep
|
this insures any variables used by region are invoked once per timestep
|
||||||
also insures variables are invoked by all procs even those w/out atoms
|
also insures variables are invoked by all procs even those w/out atoms
|
||||||
necessary if equal-style variable invokes global operation
|
necessary if equal-style variable invokes global operation
|
||||||
with MPI_Allreduce, e.g. xcm() or count()
|
with MPI_Allreduce, e.g. xcm() or count()
|
||||||
------------------------------------------------------------------------- */
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
void Region::prematch()
|
void Region::prematch()
|
||||||
@ -129,6 +139,7 @@ void Region::prematch()
|
|||||||
int Region::match(double x, double y, double z)
|
int Region::match(double x, double y, double z)
|
||||||
{
|
{
|
||||||
if (dynamic) inverse_transform(x,y,z);
|
if (dynamic) inverse_transform(x,y,z);
|
||||||
|
if (openflag) return 1;
|
||||||
return !(inside(x,y,z) ^ interior);
|
return !(inside(x,y,z) ^ interior);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -170,8 +181,15 @@ int Region::surface(double x, double y, double z, double cutoff)
|
|||||||
xnear[1] = y;
|
xnear[1] = y;
|
||||||
xnear[2] = z;
|
xnear[2] = z;
|
||||||
|
|
||||||
if (interior) ncontact = surface_interior(xnear,cutoff);
|
if (!openflag) {
|
||||||
else ncontact = surface_exterior(xnear,cutoff);
|
if (interior) ncontact = surface_interior(xnear,cutoff);
|
||||||
|
else ncontact = surface_exterior(xnear,cutoff);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
// one of surface_int/ext() will return 0
|
||||||
|
// so no need to worry about offset of contact indices
|
||||||
|
ncontact = surface_exterior(xnear,cutoff) + surface_interior(xnear,cutoff);
|
||||||
|
}
|
||||||
|
|
||||||
if (rotateflag && ncontact) {
|
if (rotateflag && ncontact) {
|
||||||
for (int i = 0; i < ncontact; i++) {
|
for (int i = 0; i < ncontact; i++) {
|
||||||
@ -200,6 +218,7 @@ void Region::add_contact(int n, double *x, double xp, double yp, double zp)
|
|||||||
double dely = x[1] - yp;
|
double dely = x[1] - yp;
|
||||||
double delz = x[2] - zp;
|
double delz = x[2] - zp;
|
||||||
contact[n].r = sqrt(delx*delx + dely*dely + delz*delz);
|
contact[n].r = sqrt(delx*delx + dely*dely + delz*delz);
|
||||||
|
contact[n].radius = 0;
|
||||||
contact[n].delx = delx;
|
contact[n].delx = delx;
|
||||||
contact[n].dely = dely;
|
contact[n].dely = dely;
|
||||||
contact[n].delz = delz;
|
contact[n].delz = delz;
|
||||||
@ -307,6 +326,9 @@ void Region::options(int narg, char **arg)
|
|||||||
scaleflag = 1;
|
scaleflag = 1;
|
||||||
moveflag = rotateflag = 0;
|
moveflag = rotateflag = 0;
|
||||||
|
|
||||||
|
openflag = 0;
|
||||||
|
for (int i = 0; i < 6; i++) open_faces[i] = 0;
|
||||||
|
|
||||||
int iarg = 0;
|
int iarg = 0;
|
||||||
while (iarg < narg) {
|
while (iarg < narg) {
|
||||||
if (strcmp(arg[iarg],"units") == 0) {
|
if (strcmp(arg[iarg],"units") == 0) {
|
||||||
@ -363,9 +385,20 @@ void Region::options(int narg, char **arg)
|
|||||||
axis[2] = force->numeric(FLERR,arg[iarg+7]);
|
axis[2] = force->numeric(FLERR,arg[iarg+7]);
|
||||||
rotateflag = 1;
|
rotateflag = 1;
|
||||||
iarg += 8;
|
iarg += 8;
|
||||||
} else error->all(FLERR,"Illegal region command");
|
|
||||||
|
} else if (strcmp(arg[iarg],"open") == 0) {
|
||||||
|
if (iarg+2 > narg) error->all(FLERR,"Illegal region command");
|
||||||
|
int iface = force->inumeric(FLERR,arg[iarg+1]);
|
||||||
|
if (iface < 1 || iface > 6) error->all(FLERR,"Illegal region command");
|
||||||
|
// additional checks on valid face index are done by region classes
|
||||||
|
open_faces[iface-1] = 1;
|
||||||
|
openflag = 1;
|
||||||
|
iarg += 2;
|
||||||
|
}
|
||||||
|
else error->all(FLERR,"Illegal region command");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// error check
|
// error check
|
||||||
|
|
||||||
if ((moveflag || rotateflag) &&
|
if ((moveflag || rotateflag) &&
|
||||||
@ -401,3 +434,140 @@ void Region::options(int narg, char **arg)
|
|||||||
if (moveflag || rotateflag) dynamic = 1;
|
if (moveflag || rotateflag) dynamic = 1;
|
||||||
else dynamic = 0;
|
else dynamic = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
find nearest point to C on line segment A,B and return it as D
|
||||||
|
project (C-A) onto (B-A)
|
||||||
|
t = length of that projection, normalized by length of (B-A)
|
||||||
|
t <= 0, C is closest to A
|
||||||
|
t >= 1, C is closest to B
|
||||||
|
else closest point is between A and B
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void Region::point_on_line_segment(double *a, double *b,
|
||||||
|
double *c, double *d)
|
||||||
|
{
|
||||||
|
double ba[3],ca[3];
|
||||||
|
|
||||||
|
MathExtra::sub3(b,a,ba);
|
||||||
|
MathExtra::sub3(c,a,ca);
|
||||||
|
double t = MathExtra::dot3(ca,ba) / MathExtra::dot3(ba,ba);
|
||||||
|
if (t <= 0.0) {
|
||||||
|
d[0] = a[0];
|
||||||
|
d[1] = a[1];
|
||||||
|
d[2] = a[2];
|
||||||
|
} else if (t >= 1.0) {
|
||||||
|
d[0] = b[0];
|
||||||
|
d[1] = b[1];
|
||||||
|
d[2] = b[2];
|
||||||
|
} else {
|
||||||
|
d[0] = a[0] + t*ba[0];
|
||||||
|
d[1] = a[1] + t*ba[1];
|
||||||
|
d[2] = a[2] + t*ba[2];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
infer translational and angular velocity of region
|
||||||
|
necessary b/c motion variables are for displacement & theta
|
||||||
|
there is no analytic formula for v & omega
|
||||||
|
prev[4] contains values of dx,dy,dz,theta at previous step
|
||||||
|
used for difference, then updated to current step values
|
||||||
|
dt is time elapsed since previous step
|
||||||
|
rpoint = point updated by current displacement
|
||||||
|
called by fix wall/gran/region every timestep
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void Region::set_velocity()
|
||||||
|
{
|
||||||
|
if (vel_timestep == update->ntimestep) return;
|
||||||
|
vel_timestep = update->ntimestep;
|
||||||
|
if (moveflag) {
|
||||||
|
if (update->ntimestep > 0) {
|
||||||
|
v[0] = (dx - prev[0])/update->dt;
|
||||||
|
v[1] = (dy - prev[1])/update->dt;
|
||||||
|
v[2] = (dz - prev[2])/update->dt;
|
||||||
|
}
|
||||||
|
else v[0] = v[1] = v[2] = 0.0;
|
||||||
|
prev[0] = dx;
|
||||||
|
prev[1] = dy;
|
||||||
|
prev[2] = dz;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (rotateflag) {
|
||||||
|
rpoint[0] = point[0] + dx;
|
||||||
|
rpoint[1] = point[1] + dy;
|
||||||
|
rpoint[2] = point[2] + dz;
|
||||||
|
if (update->ntimestep > 0) {
|
||||||
|
double angvel = (theta-prev[3]) / update->dt;
|
||||||
|
omega[0] = angvel*axis[0];
|
||||||
|
omega[1] = angvel*axis[1];
|
||||||
|
omega[2] = angvel*axis[2];
|
||||||
|
}
|
||||||
|
else omega[0] = omega[1] = omega[2] = 0.0;
|
||||||
|
prev[3] = theta;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (varshape){
|
||||||
|
set_velocity_shape();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
compute velocity of wall for given contact
|
||||||
|
since contacts only store delx/y/z, need to pass particle coords
|
||||||
|
to compute contact point
|
||||||
|
called by fix/wall/gran/region every contact every timestep
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void Region::velocity_contact(double *vwall, double *x, int ic)
|
||||||
|
{
|
||||||
|
Contact c = contact[ic];
|
||||||
|
double xc[3];
|
||||||
|
xc[0] = x[0] - contact[ic].delx;
|
||||||
|
xc[1] = x[1] - contact[ic].dely;
|
||||||
|
xc[2] = x[2] - contact[ic].delz;
|
||||||
|
|
||||||
|
vwall[0] = v[0] + omega[1]*(xc[2] - rpoint[2]) - omega[2]*(xc[1] - rpoint[1]);
|
||||||
|
vwall[1] = v[1] + omega[2]*(xc[0] - rpoint[0]) - omega[0]*(xc[2] - rpoint[2]);
|
||||||
|
vwall[2] = v[2] + omega[0]*(xc[1] - rpoint[1]) - omega[1]*(xc[0] - rpoint[0]);
|
||||||
|
|
||||||
|
if (varshape && contact[ic].varflag) velocity_contact_shape(vwall,xc);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
region writes its current position/angle
|
||||||
|
needed by fix/wall/gran/region to compute velocity by differencing scheme
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void Region::write_restart(FILE *fp)
|
||||||
|
{
|
||||||
|
fwrite(prev, sizeof(double), size_restart, fp);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
region reads its previous position/angle
|
||||||
|
needed by fix/wall/gran/region to compute velocity by differencing scheme
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
int Region::restart(char *buf, int n)
|
||||||
|
{
|
||||||
|
char *rlist = new char[size_restart*sizeof(double)];
|
||||||
|
for (int i = 0; i < size_restart*sizeof(double); i++)
|
||||||
|
rlist[i] = buf[n++];
|
||||||
|
for (int i = 0; i < size_restart; i++) {
|
||||||
|
prev[i] = ((double *)rlist)[i];
|
||||||
|
}
|
||||||
|
delete [] rlist;
|
||||||
|
return n;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
set prev vector to zero
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void Region::reset_vel()
|
||||||
|
{
|
||||||
|
for (int i = 0; i < size_restart; i++)
|
||||||
|
prev[i] = 0;
|
||||||
|
}
|
||||||
|
|||||||
50
src/region.h
50
src/region.h
@ -31,17 +31,44 @@ class Region : protected Pointers {
|
|||||||
int bboxflag; // 1 if bounding box is computable
|
int bboxflag; // 1 if bounding box is computable
|
||||||
int varshape; // 1 if region shape changes over time
|
int varshape; // 1 if region shape changes over time
|
||||||
int dynamic; // 1 if position/orient changes over time
|
int dynamic; // 1 if position/orient changes over time
|
||||||
|
int moveflag,rotateflag; // 1 if position/orientation changes
|
||||||
|
int openflag; // 1 if any face is open
|
||||||
|
int open_faces[6]; // flags for which faces are open
|
||||||
|
|
||||||
int copymode; // 1 if copy of original class
|
int copymode; // 1 if copy of original class
|
||||||
|
|
||||||
// contact = particle near region surface
|
// contact = particle near region surface (for soft interactions)
|
||||||
|
// touch = particle touching region surface (for granular interactions)
|
||||||
|
|
||||||
struct Contact {
|
struct Contact {
|
||||||
double r; // distance between particle & surf, r > 0.0
|
double r; // distance between particle & surf, r > 0.0
|
||||||
double delx,dely,delz; // vector from surface pt to particle
|
double delx,dely,delz; // vector from surface pt to particle
|
||||||
|
double radius; // curvature of region at contact point
|
||||||
|
int iwall; // unique id of wall for storing shear history
|
||||||
|
int varflag; // 1 if wall can be variable-controlled
|
||||||
};
|
};
|
||||||
Contact *contact; // list of contacts
|
Contact *contact; // list of contacts
|
||||||
int cmax; // max # of contacts possible with region
|
int cmax; // max # of contacts possible with region
|
||||||
|
int tmax; // max # of touching contacts possible
|
||||||
|
|
||||||
|
// motion attributes of region
|
||||||
|
// public so can be accessed by other classes
|
||||||
|
|
||||||
|
double dx,dy,dz,theta; // current displacement and orientation
|
||||||
|
double v[3]; // translational velocity
|
||||||
|
double rpoint[3]; // current origin of rotation axis
|
||||||
|
double omega[3]; // angular velocity
|
||||||
|
double rprev; // speed of time-dependent radius, if applicable
|
||||||
|
double xcenter[3]; // translated/rotated center of cylinder/sphere
|
||||||
|
// only used with varshape
|
||||||
|
double prev[5]; // stores displacement (X3), angle and if
|
||||||
|
// necessary, region variable size (e.g. radius)
|
||||||
|
// at previous time step
|
||||||
|
int vel_timestep; // store timestep at which set_velocity was called
|
||||||
|
// prevents multiple fix/wall/gran/region calls
|
||||||
|
int nregion; // For union and intersect
|
||||||
|
int size_restart;
|
||||||
|
int *list;
|
||||||
|
|
||||||
Region(class LAMMPS *, int, char **);
|
Region(class LAMMPS *, int, char **);
|
||||||
virtual ~Region();
|
virtual ~Region();
|
||||||
@ -54,6 +81,12 @@ class Region : protected Pointers {
|
|||||||
int match(double, double, double);
|
int match(double, double, double);
|
||||||
int surface(double, double, double, double);
|
int surface(double, double, double, double);
|
||||||
|
|
||||||
|
virtual void set_velocity();
|
||||||
|
void velocity_contact(double *, double *, int);
|
||||||
|
virtual void write_restart(FILE *);
|
||||||
|
virtual int restart(char *, int);
|
||||||
|
virtual void reset_vel();
|
||||||
|
|
||||||
// implemented by each region, not called by other classes
|
// implemented by each region, not called by other classes
|
||||||
|
|
||||||
virtual int inside(double, double, double) = 0;
|
virtual int inside(double, double, double) = 0;
|
||||||
@ -61,6 +94,8 @@ class Region : protected Pointers {
|
|||||||
virtual int surface_exterior(double *, double) = 0;
|
virtual int surface_exterior(double *, double) = 0;
|
||||||
virtual void shape_update() {}
|
virtual void shape_update() {}
|
||||||
virtual void pretransform();
|
virtual void pretransform();
|
||||||
|
virtual void set_velocity_shape() {}
|
||||||
|
virtual void velocity_contact_shape(double*, double*) {}
|
||||||
|
|
||||||
// Kokkos function, implemented by each Kokkos region
|
// Kokkos function, implemented by each Kokkos region
|
||||||
|
|
||||||
@ -69,15 +104,14 @@ class Region : protected Pointers {
|
|||||||
protected:
|
protected:
|
||||||
void add_contact(int, double *, double, double, double);
|
void add_contact(int, double *, double, double, double);
|
||||||
void options(int, char **);
|
void options(int, char **);
|
||||||
|
void point_on_line_segment(double *, double *, double *, double *);
|
||||||
|
void forward_transform(double &, double &, double &);
|
||||||
|
|
||||||
int moveflag,rotateflag; // 1 if position/orientation changes
|
private:
|
||||||
|
|
||||||
double point[3],axis[3],runit[3];
|
|
||||||
char *xstr,*ystr,*zstr,*tstr;
|
char *xstr,*ystr,*zstr,*tstr;
|
||||||
int xvar,yvar,zvar,tvar;
|
int xvar,yvar,zvar,tvar;
|
||||||
double dx,dy,dz,theta;
|
double axis[3],point[3],runit[3];
|
||||||
|
|
||||||
void forward_transform(double &, double &, double &);
|
|
||||||
void inverse_transform(double &, double &, double &);
|
void inverse_transform(double &, double &, double &);
|
||||||
void rotate(double &, double &, double &, double);
|
void rotate(double &, double &, double &, double);
|
||||||
};
|
};
|
||||||
@ -100,10 +134,6 @@ E: Variable for region is not equal style
|
|||||||
|
|
||||||
Self-explanatory.
|
Self-explanatory.
|
||||||
|
|
||||||
E: Can only use Kokkos supported regions with Kokkos package
|
|
||||||
|
|
||||||
Self-explanatory.
|
|
||||||
|
|
||||||
E: Illegal ... command
|
E: Illegal ... command
|
||||||
|
|
||||||
Self-explanatory. Check the input script syntax and compare to the
|
Self-explanatory. Check the input script syntax and compare to the
|
||||||
|
|||||||
@ -14,9 +14,10 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include "region_block.h"
|
#include "region_block.h"
|
||||||
#include "domain.h"
|
|
||||||
#include "error.h"
|
|
||||||
#include "force.h"
|
#include "force.h"
|
||||||
|
#include "domain.h"
|
||||||
|
#include "math_extra.h"
|
||||||
|
#include "error.h"
|
||||||
|
|
||||||
using namespace LAMMPS_NS;
|
using namespace LAMMPS_NS;
|
||||||
|
|
||||||
@ -94,9 +95,91 @@ RegBlock::RegBlock(LAMMPS *lmp, int narg, char **arg) : Region(lmp, narg, arg)
|
|||||||
} else bboxflag = 0;
|
} else bboxflag = 0;
|
||||||
|
|
||||||
// particle could be close to all 6 planes
|
// particle could be close to all 6 planes
|
||||||
|
// particle can only touch 3 planes
|
||||||
|
|
||||||
cmax = 6;
|
cmax = 6;
|
||||||
contact = new Contact[cmax];
|
contact = new Contact[cmax];
|
||||||
|
if (interior) tmax = 3;
|
||||||
|
else tmax = 1;
|
||||||
|
|
||||||
|
// open face data structs
|
||||||
|
|
||||||
|
face[0][0] = -1.0;
|
||||||
|
face[0][1] = 0.0;
|
||||||
|
face[0][2] = 0.0;
|
||||||
|
face[1][0] = 1.0;
|
||||||
|
face[1][1] = 0.0;
|
||||||
|
face[1][2] = 0.0;
|
||||||
|
face[2][0] = 0.0;
|
||||||
|
face[2][1] = -1.0;
|
||||||
|
face[2][2] = 0.0;
|
||||||
|
face[3][0] = 0.0;
|
||||||
|
face[3][1] = 1.0;
|
||||||
|
face[3][2] = 0.0;
|
||||||
|
face[4][0] = 0.0;
|
||||||
|
face[4][1] = 0.0;
|
||||||
|
face[4][2] = -1.0;
|
||||||
|
face[5][0] = 0.0;
|
||||||
|
face[5][1] = 0.0;
|
||||||
|
face[5][2] = 1.0;
|
||||||
|
|
||||||
|
// face[0]
|
||||||
|
|
||||||
|
corners[0][0][0] = xlo;
|
||||||
|
corners[0][0][1] = ylo;
|
||||||
|
corners[0][0][2] = zlo;
|
||||||
|
corners[0][1][0] = xlo;
|
||||||
|
corners[0][1][1] = ylo;
|
||||||
|
corners[0][1][2] = zhi;
|
||||||
|
corners[0][2][0] = xlo;
|
||||||
|
corners[0][2][1] = yhi;
|
||||||
|
corners[0][2][2] = zhi;
|
||||||
|
corners[0][3][0] = xlo;
|
||||||
|
corners[0][3][1] = yhi;
|
||||||
|
corners[0][3][2] = zlo;
|
||||||
|
|
||||||
|
// face[1]
|
||||||
|
|
||||||
|
corners[1][0][0] = xhi;
|
||||||
|
corners[1][0][1] = ylo;
|
||||||
|
corners[1][0][2] = zlo;
|
||||||
|
corners[1][1][0] = xhi;
|
||||||
|
corners[1][1][1] = ylo;
|
||||||
|
corners[1][1][2] = zhi;
|
||||||
|
corners[1][2][0] = xhi;
|
||||||
|
corners[1][2][1] = yhi;
|
||||||
|
corners[1][2][2] = zhi;
|
||||||
|
corners[1][3][0] = xhi;
|
||||||
|
corners[1][3][1] = yhi;
|
||||||
|
corners[1][3][2] = zlo;
|
||||||
|
|
||||||
|
// face[2]
|
||||||
|
|
||||||
|
MathExtra::copy3(corners[2][0],corners[0][0]);
|
||||||
|
MathExtra::copy3(corners[2][1],corners[1][0]);
|
||||||
|
MathExtra::copy3(corners[2][2],corners[1][1]);
|
||||||
|
MathExtra::copy3(corners[2][3],corners[0][1]);
|
||||||
|
|
||||||
|
// face[3]
|
||||||
|
|
||||||
|
MathExtra::copy3(corners[3][0],corners[0][3]);
|
||||||
|
MathExtra::copy3(corners[3][1],corners[0][2]);
|
||||||
|
MathExtra::copy3(corners[3][2],corners[1][2]);
|
||||||
|
MathExtra::copy3(corners[3][3],corners[1][3]);
|
||||||
|
|
||||||
|
// face[4]
|
||||||
|
|
||||||
|
MathExtra::copy3(corners[4][0],corners[0][0]);
|
||||||
|
MathExtra::copy3(corners[4][1],corners[0][3]);
|
||||||
|
MathExtra::copy3(corners[4][2],corners[1][3]);
|
||||||
|
MathExtra::copy3(corners[4][3],corners[1][0]);
|
||||||
|
|
||||||
|
// face[5]
|
||||||
|
|
||||||
|
MathExtra::copy3(corners[5][0],corners[0][1]);
|
||||||
|
MathExtra::copy3(corners[5][1],corners[1][1]);
|
||||||
|
MathExtra::copy3(corners[5][2],corners[1][2]);
|
||||||
|
MathExtra::copy3(corners[5][3],corners[0][2]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
@ -141,47 +224,59 @@ int RegBlock::surface_interior(double *x, double cutoff)
|
|||||||
int n = 0;
|
int n = 0;
|
||||||
|
|
||||||
delta = x[0] - xlo;
|
delta = x[0] - xlo;
|
||||||
if (delta < cutoff) {
|
if (delta < cutoff && !open_faces[0]) {
|
||||||
contact[n].r = delta;
|
contact[n].r = delta;
|
||||||
contact[n].delx = delta;
|
contact[n].delx = delta;
|
||||||
contact[n].dely = contact[n].delz = 0.0;
|
contact[n].dely = contact[n].delz = 0.0;
|
||||||
|
contact[n].radius = 0;
|
||||||
|
contact[n].iwall = 0;
|
||||||
n++;
|
n++;
|
||||||
}
|
}
|
||||||
delta = xhi - x[0];
|
delta = xhi - x[0];
|
||||||
if (delta < cutoff) {
|
if (delta < cutoff && !open_faces[1]) {
|
||||||
contact[n].r = delta;
|
contact[n].r = delta;
|
||||||
contact[n].delx = -delta;
|
contact[n].delx = -delta;
|
||||||
contact[n].dely = contact[n].delz = 0.0;
|
contact[n].dely = contact[n].delz = 0.0;
|
||||||
|
contact[n].radius = 0;
|
||||||
|
contact[n].iwall = 1;
|
||||||
n++;
|
n++;
|
||||||
}
|
}
|
||||||
|
|
||||||
delta = x[1] - ylo;
|
delta = x[1] - ylo;
|
||||||
if (delta < cutoff) {
|
if (delta < cutoff && !open_faces[2]) {
|
||||||
contact[n].r = delta;
|
contact[n].r = delta;
|
||||||
contact[n].dely = delta;
|
contact[n].dely = delta;
|
||||||
contact[n].delx = contact[n].delz = 0.0;
|
contact[n].delx = contact[n].delz = 0.0;
|
||||||
|
contact[n].radius = 0;
|
||||||
|
contact[n].iwall = 2;
|
||||||
n++;
|
n++;
|
||||||
}
|
}
|
||||||
delta = yhi - x[1];
|
delta = yhi - x[1];
|
||||||
if (delta < cutoff) {
|
if (delta < cutoff && !open_faces[3]) {
|
||||||
contact[n].r = delta;
|
contact[n].r = delta;
|
||||||
contact[n].dely = -delta;
|
contact[n].dely = -delta;
|
||||||
contact[n].delx = contact[n].delz = 0.0;
|
contact[n].delx = contact[n].delz = 0.0;
|
||||||
|
contact[n].radius = 0;
|
||||||
|
contact[n].iwall = 3;
|
||||||
n++;
|
n++;
|
||||||
}
|
}
|
||||||
|
|
||||||
delta = x[2] - zlo;
|
delta = x[2] - zlo;
|
||||||
if (delta < cutoff) {
|
if (delta < cutoff && !open_faces[4]) {
|
||||||
contact[n].r = delta;
|
contact[n].r = delta;
|
||||||
contact[n].delz = delta;
|
contact[n].delz = delta;
|
||||||
contact[n].delx = contact[n].dely = 0.0;
|
contact[n].delx = contact[n].dely = 0.0;
|
||||||
|
contact[n].radius = 0;
|
||||||
|
contact[n].iwall = 4;
|
||||||
n++;
|
n++;
|
||||||
}
|
}
|
||||||
delta = zhi - x[2];
|
delta = zhi - x[2];
|
||||||
if (delta < cutoff) {
|
if (delta < cutoff && !open_faces[5]) {
|
||||||
contact[n].r = delta;
|
contact[n].r = delta;
|
||||||
contact[n].delz = -delta;
|
contact[n].delz = -delta;
|
||||||
contact[n].delx = contact[n].dely = 0.0;
|
contact[n].delx = contact[n].dely = 0.0;
|
||||||
|
contact[n].radius = 0;
|
||||||
|
contact[n].iwall = 5;
|
||||||
n++;
|
n++;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -197,6 +292,7 @@ int RegBlock::surface_interior(double *x, double cutoff)
|
|||||||
int RegBlock::surface_exterior(double *x, double cutoff)
|
int RegBlock::surface_exterior(double *x, double cutoff)
|
||||||
{
|
{
|
||||||
double xp,yp,zp;
|
double xp,yp,zp;
|
||||||
|
double xc,yc,zc,dist,mindist;
|
||||||
|
|
||||||
// x is far enough from block that there is no contact
|
// x is far enough from block that there is no contact
|
||||||
// x is interior to block
|
// x is interior to block
|
||||||
@ -212,17 +308,129 @@ int RegBlock::surface_exterior(double *x, double cutoff)
|
|||||||
// could be edge or corner pt of block
|
// could be edge or corner pt of block
|
||||||
// do not add contact point if r >= cutoff
|
// do not add contact point if r >= cutoff
|
||||||
|
|
||||||
if (x[0] < xlo) xp = xlo;
|
if (!openflag){
|
||||||
else if (x[0] > xhi) xp = xhi;
|
if (x[0] < xlo) xp = xlo;
|
||||||
else xp = x[0];
|
else if (x[0] > xhi) xp = xhi;
|
||||||
if (x[1] < ylo) yp = ylo;
|
else xp = x[0];
|
||||||
else if (x[1] > yhi) yp = yhi;
|
if (x[1] < ylo) yp = ylo;
|
||||||
else yp = x[1];
|
else if (x[1] > yhi) yp = yhi;
|
||||||
if (x[2] < zlo) zp = zlo;
|
else yp = x[1];
|
||||||
else if (x[2] > zhi) zp = zhi;
|
if (x[2] < zlo) zp = zlo;
|
||||||
else zp = x[2];
|
else if (x[2] > zhi) zp = zhi;
|
||||||
|
else zp = x[2];
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
mindist = BIG;
|
||||||
|
for (int i = 0; i < 6; i++){
|
||||||
|
if (open_faces[i]) continue;
|
||||||
|
dist = find_closest_point(i,x,xc,yc,zc);
|
||||||
|
if (dist < mindist){
|
||||||
|
xp = xc;
|
||||||
|
yp = yc;
|
||||||
|
zp = zc;
|
||||||
|
mindist = dist;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
add_contact(0,x,xp,yp,zp);
|
add_contact(0,x,xp,yp,zp);
|
||||||
|
contact[0].iwall = 0;
|
||||||
if (contact[0].r < cutoff) return 1;
|
if (contact[0].r < cutoff) return 1;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*------------------------------------------------------------------------
|
||||||
|
return distance to closest point on surface I of block region
|
||||||
|
store closest point in xc,yc,zc
|
||||||
|
--------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
double RegBlock::find_closest_point(int i, double *x,
|
||||||
|
double &xc, double &yc, double &zc)
|
||||||
|
{
|
||||||
|
double dot,d2,d2min;
|
||||||
|
double xr[3],xproj[3],p[3];
|
||||||
|
|
||||||
|
xr[0] = x[0] - corners[i][0][0];
|
||||||
|
xr[1] = x[1] - corners[i][0][1];
|
||||||
|
xr[2] = x[2] - corners[i][0][2];
|
||||||
|
dot = face[i][0]*xr[0] + face[i][1]*xr[1] + face[i][2]*xr[2];
|
||||||
|
xproj[0] = xr[0] - dot*face[i][0];
|
||||||
|
xproj[1] = xr[1] - dot*face[i][1];
|
||||||
|
xproj[2] = xr[2] - dot*face[i][2];
|
||||||
|
|
||||||
|
d2min = BIG;
|
||||||
|
|
||||||
|
// check if point projects inside of face
|
||||||
|
|
||||||
|
if (inside_face(xproj, i)){
|
||||||
|
d2 = d2min = dot*dot;
|
||||||
|
xc = xproj[0] + corners[i][0][0];
|
||||||
|
yc = xproj[1] + corners[i][0][1];
|
||||||
|
zc = xproj[2] + corners[i][0][2];
|
||||||
|
|
||||||
|
// check each edge
|
||||||
|
|
||||||
|
} else {
|
||||||
|
point_on_line_segment(corners[i][0],corners[i][1],x,p);
|
||||||
|
d2 = (p[0]-x[0])*(p[0]-x[0]) + (p[1]-x[1])*(p[1]-x[1]) +
|
||||||
|
(p[2]-x[2])*(p[2]-x[2]);
|
||||||
|
if (d2 < d2min) {
|
||||||
|
d2min = d2;
|
||||||
|
xc = p[0];
|
||||||
|
yc = p[1];
|
||||||
|
zc = p[2];
|
||||||
|
}
|
||||||
|
|
||||||
|
point_on_line_segment(corners[i][1],corners[i][2],x,p);
|
||||||
|
d2 = (p[0]-x[0])*(p[0]-x[0]) + (p[1]-x[1])*(p[1]-x[1]) +
|
||||||
|
(p[2]-x[2])*(p[2]-x[2]);
|
||||||
|
if (d2 < d2min) {
|
||||||
|
d2min = d2;
|
||||||
|
xc = p[0];
|
||||||
|
yc = p[1];
|
||||||
|
zc = p[2];
|
||||||
|
}
|
||||||
|
|
||||||
|
point_on_line_segment(corners[i][2],corners[i][3],x,p);
|
||||||
|
d2 = (p[0]-x[0])*(p[0]-x[0]) + (p[1]-x[1])*(p[1]-x[1]) +
|
||||||
|
(p[2]-x[2])*(p[2]-x[2]);
|
||||||
|
if (d2 < d2min) {
|
||||||
|
d2min = d2;
|
||||||
|
xc = p[0];
|
||||||
|
yc = p[1];
|
||||||
|
zc = p[2];
|
||||||
|
}
|
||||||
|
|
||||||
|
point_on_line_segment(corners[i][3],corners[i][4],x,p);
|
||||||
|
d2 = (p[0]-x[0])*(p[0]-x[0]) + (p[1]-x[1])*(p[1]-x[1]) +
|
||||||
|
(p[2]-x[2])*(p[2]-x[2]);
|
||||||
|
if (d2 < d2min) {
|
||||||
|
d2min = d2;
|
||||||
|
xc = p[0];
|
||||||
|
yc = p[1];
|
||||||
|
zc = p[2];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return d2min;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*------------------------------------------------------------------------
|
||||||
|
determine if projected point is inside given face of the block
|
||||||
|
--------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
int RegBlock::inside_face(double *xproj, int iface)
|
||||||
|
{
|
||||||
|
if (iface < 2) {
|
||||||
|
if (xproj[1] > 0 && (xproj[1] < yhi-ylo) &&
|
||||||
|
xproj[2] > 0 && (xproj[2] < zhi-zlo)) return 1;
|
||||||
|
} else if (iface < 4) {
|
||||||
|
if (xproj[0] > 0 && (xproj[0] < (xhi-xlo)) &&
|
||||||
|
xproj[2] > 0 && (xproj[2] < (zhi-zlo))) return 1;
|
||||||
|
} else {
|
||||||
|
if (xproj[0] > 0 && xproj[0] < (xhi-xlo) &&
|
||||||
|
xproj[1] > 0 && xproj[1] < (yhi-ylo)) return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|||||||
@ -36,6 +36,11 @@ class RegBlock : public Region {
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
double xlo,xhi,ylo,yhi,zlo,zhi;
|
double xlo,xhi,ylo,yhi,zlo,zhi;
|
||||||
|
double corners[6][4][3];
|
||||||
|
double face[6][3];
|
||||||
|
|
||||||
|
double find_closest_point(int, double *, double &, double &, double &);
|
||||||
|
int inside_face(double *, int);
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -34,6 +34,11 @@ RegCone::RegCone(LAMMPS *lmp, int narg, char **arg) :
|
|||||||
{
|
{
|
||||||
options(narg-9,&arg[9]);
|
options(narg-9,&arg[9]);
|
||||||
|
|
||||||
|
// check open face settings
|
||||||
|
|
||||||
|
if (openflag && (open_faces[3] || open_faces[4] || open_faces[5]))
|
||||||
|
error->all(FLERR,"Invalid region cone open setting");
|
||||||
|
|
||||||
if (strcmp(arg[2],"x") && strcmp(arg[2],"y") && strcmp(arg[2],"z"))
|
if (strcmp(arg[2],"x") && strcmp(arg[2],"y") && strcmp(arg[2],"z"))
|
||||||
error->all(FLERR,"Illegal region cylinder command");
|
error->all(FLERR,"Illegal region cylinder command");
|
||||||
axis = arg[2][0];
|
axis = arg[2][0];
|
||||||
@ -118,7 +123,6 @@ RegCone::RegCone(LAMMPS *lmp, int narg, char **arg) :
|
|||||||
|
|
||||||
if (interior) {
|
if (interior) {
|
||||||
bboxflag = 1;
|
bboxflag = 1;
|
||||||
|
|
||||||
if (axis == 'x') {
|
if (axis == 'x') {
|
||||||
extent_xlo = lo;
|
extent_xlo = lo;
|
||||||
extent_xhi = hi;
|
extent_xhi = hi;
|
||||||
@ -145,10 +149,13 @@ RegCone::RegCone(LAMMPS *lmp, int narg, char **arg) :
|
|||||||
}
|
}
|
||||||
} else bboxflag = 0;
|
} else bboxflag = 0;
|
||||||
|
|
||||||
// particle could be contact cone surface and 2 ends
|
// particle could be close to cone surface and 2 ends
|
||||||
|
// particle can only touch surface and 1 end
|
||||||
|
|
||||||
cmax = 3;
|
cmax = 3;
|
||||||
contact = new Contact[cmax];
|
contact = new Contact[cmax];
|
||||||
|
if (interior) tmax = 2;
|
||||||
|
else tmax = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
@ -167,7 +174,7 @@ int RegCone::inside(double x, double y, double z)
|
|||||||
{
|
{
|
||||||
double del1,del2,dist;
|
double del1,del2,dist;
|
||||||
double currentradius;
|
double currentradius;
|
||||||
int inside = 0;
|
int inside;
|
||||||
|
|
||||||
if (axis == 'x') {
|
if (axis == 'x') {
|
||||||
del1 = y - c1;
|
del1 = y - c1;
|
||||||
@ -226,7 +233,7 @@ int RegCone::surface_interior(double *x, double cutoff)
|
|||||||
// surflo = pt on outer circle of bottom end plane, same dir as x vs axis
|
// surflo = pt on outer circle of bottom end plane, same dir as x vs axis
|
||||||
// surfhi = pt on outer circle of top end plane, same dir as x vs axis
|
// surfhi = pt on outer circle of top end plane, same dir as x vs axis
|
||||||
|
|
||||||
if (r > 0.0) {
|
if (r > 0.0 && !open_faces[2]) {
|
||||||
surflo[0] = lo;
|
surflo[0] = lo;
|
||||||
surflo[1] = c1 + del1*radiuslo/r;
|
surflo[1] = c1 + del1*radiuslo/r;
|
||||||
surflo[2] = c2 + del2*radiuslo/r;
|
surflo[2] = c2 + del2*radiuslo/r;
|
||||||
@ -243,22 +250,29 @@ int RegCone::surface_interior(double *x, double cutoff)
|
|||||||
contact[n].delx = delx;
|
contact[n].delx = delx;
|
||||||
contact[n].dely = dely;
|
contact[n].dely = dely;
|
||||||
contact[n].delz = delz;
|
contact[n].delz = delz;
|
||||||
|
contact[n].radius = -2.0*(radiuslo + (xs[0]-lo)*
|
||||||
|
(radiushi-radiuslo)/(hi-lo));
|
||||||
|
contact[n].iwall = 2;
|
||||||
n++;
|
n++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
delta = x[0] - lo;
|
delta = x[0] - lo;
|
||||||
if (delta < cutoff) {
|
if (delta < cutoff && !open_faces[0]) {
|
||||||
contact[n].r = delta;
|
contact[n].r = delta;
|
||||||
contact[n].delx = delta;
|
contact[n].delx = delta;
|
||||||
contact[n].dely = contact[n].delz = 0.0;
|
contact[n].dely = contact[n].delz = 0.0;
|
||||||
|
contact[n].radius = 0;
|
||||||
|
contact[n].iwall = 0;
|
||||||
n++;
|
n++;
|
||||||
}
|
}
|
||||||
delta = hi - x[0];
|
delta = hi - x[0];
|
||||||
if (delta < cutoff) {
|
if (delta < cutoff && !open_faces[1]) {
|
||||||
contact[n].r = delta;
|
contact[n].r = delta;
|
||||||
contact[n].delx = -delta;
|
contact[n].delx = -delta;
|
||||||
contact[n].dely = contact[n].delz = 0.0;
|
contact[n].dely = contact[n].delz = 0.0;
|
||||||
|
contact[n].radius = 0;
|
||||||
|
contact[n].iwall = 1;
|
||||||
n++;
|
n++;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -266,7 +280,8 @@ int RegCone::surface_interior(double *x, double cutoff)
|
|||||||
del1 = x[0] - c1;
|
del1 = x[0] - c1;
|
||||||
del2 = x[2] - c2;
|
del2 = x[2] - c2;
|
||||||
r = sqrt(del1*del1 + del2*del2);
|
r = sqrt(del1*del1 + del2*del2);
|
||||||
currentradius = radiuslo + (x[1]-lo)*(radiushi-radiuslo)/(hi-lo);
|
currentradius = radiuslo + (x[1]-lo)*
|
||||||
|
(radiushi-radiuslo)/(hi-lo);
|
||||||
|
|
||||||
// y is exterior to cone
|
// y is exterior to cone
|
||||||
|
|
||||||
@ -276,7 +291,7 @@ int RegCone::surface_interior(double *x, double cutoff)
|
|||||||
// surflo = pt on outer circle of bottom end plane, same dir as y vs axis
|
// surflo = pt on outer circle of bottom end plane, same dir as y vs axis
|
||||||
// surfhi = pt on outer circle of top end plane, same dir as y vs axis
|
// surfhi = pt on outer circle of top end plane, same dir as y vs axis
|
||||||
|
|
||||||
if (r > 0.0) {
|
if (r > 0.0 && !open_faces[2]) {
|
||||||
surflo[0] = c1 + del1*radiuslo/r;
|
surflo[0] = c1 + del1*radiuslo/r;
|
||||||
surflo[1] = lo;
|
surflo[1] = lo;
|
||||||
surflo[2] = c2 + del2*radiuslo/r;
|
surflo[2] = c2 + del2*radiuslo/r;
|
||||||
@ -293,22 +308,29 @@ int RegCone::surface_interior(double *x, double cutoff)
|
|||||||
contact[n].delx = delx;
|
contact[n].delx = delx;
|
||||||
contact[n].dely = dely;
|
contact[n].dely = dely;
|
||||||
contact[n].delz = delz;
|
contact[n].delz = delz;
|
||||||
|
contact[n].iwall = 2;
|
||||||
|
contact[n].radius = -2.0*(radiuslo + (xs[1]-lo)*
|
||||||
|
(radiushi-radiuslo)/(hi-lo));
|
||||||
n++;
|
n++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
delta = x[1] - lo;
|
delta = x[1] - lo;
|
||||||
if (delta < cutoff) {
|
if (delta < cutoff && !open_faces[0]) {
|
||||||
contact[n].r = delta;
|
contact[n].r = delta;
|
||||||
contact[n].delz = delta;
|
contact[n].delz = delta;
|
||||||
contact[n].delx = contact[n].dely = 0.0;
|
contact[n].delx = contact[n].dely = 0.0;
|
||||||
|
contact[n].iwall = 0;
|
||||||
|
contact[n].radius = 0;
|
||||||
n++;
|
n++;
|
||||||
}
|
}
|
||||||
delta = hi - x[1];
|
delta = hi - x[1];
|
||||||
if (delta < cutoff) {
|
if (delta < cutoff && !open_faces[1]) {
|
||||||
contact[n].r = delta;
|
contact[n].r = delta;
|
||||||
contact[n].delz = -delta;
|
contact[n].delz = -delta;
|
||||||
contact[n].delx = contact[n].dely = 0.0;
|
contact[n].delx = contact[n].dely = 0.0;
|
||||||
|
contact[n].iwall = 1;
|
||||||
|
contact[n].radius = 0;
|
||||||
n++;
|
n++;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -326,7 +348,7 @@ int RegCone::surface_interior(double *x, double cutoff)
|
|||||||
// surflo = pt on outer circle of bottom end plane, same dir as z vs axis
|
// surflo = pt on outer circle of bottom end plane, same dir as z vs axis
|
||||||
// surfhi = pt on outer circle of top end plane, same dir as z vs axis
|
// surfhi = pt on outer circle of top end plane, same dir as z vs axis
|
||||||
|
|
||||||
if (r > 0.0) {
|
if (r > 0.0 && !open_faces[2]) {
|
||||||
surflo[0] = c1 + del1*radiuslo/r;
|
surflo[0] = c1 + del1*radiuslo/r;
|
||||||
surflo[1] = c2 + del2*radiuslo/r;
|
surflo[1] = c2 + del2*radiuslo/r;
|
||||||
surflo[2] = lo;
|
surflo[2] = lo;
|
||||||
@ -343,22 +365,29 @@ int RegCone::surface_interior(double *x, double cutoff)
|
|||||||
contact[n].delx = delx;
|
contact[n].delx = delx;
|
||||||
contact[n].dely = dely;
|
contact[n].dely = dely;
|
||||||
contact[n].delz = delz;
|
contact[n].delz = delz;
|
||||||
|
contact[n].iwall = 2;
|
||||||
|
contact[n].radius = -2.0*(radiuslo + (xs[2]-lo)*
|
||||||
|
(radiushi-radiuslo)/(hi-lo));
|
||||||
n++;
|
n++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
delta = x[2] - lo;
|
delta = x[2] - lo;
|
||||||
if (delta < cutoff) {
|
if (delta < cutoff && !open_faces[0]) {
|
||||||
contact[n].r = delta;
|
contact[n].r = delta;
|
||||||
contact[n].delz = delta;
|
contact[n].delz = delta;
|
||||||
contact[n].delx = contact[n].dely = 0.0;
|
contact[n].delx = contact[n].dely = 0.0;
|
||||||
|
contact[n].iwall = 0;
|
||||||
|
contact[n].radius = 0;
|
||||||
n++;
|
n++;
|
||||||
}
|
}
|
||||||
delta = hi - x[2];
|
delta = hi - x[2];
|
||||||
if (delta < cutoff) {
|
if (delta < cutoff && !open_faces[1]) {
|
||||||
contact[n].r = delta;
|
contact[n].r = delta;
|
||||||
contact[n].delz = -delta;
|
contact[n].delz = -delta;
|
||||||
contact[n].delx = contact[n].dely = 0.0;
|
contact[n].delx = contact[n].dely = 0.0;
|
||||||
|
contact[n].iwall = 1;
|
||||||
|
contact[n].radius = 0;
|
||||||
n++;
|
n++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -374,7 +403,7 @@ int RegCone::surface_interior(double *x, double cutoff)
|
|||||||
|
|
||||||
int RegCone::surface_exterior(double *x, double cutoff)
|
int RegCone::surface_exterior(double *x, double cutoff)
|
||||||
{
|
{
|
||||||
double del1,del2,r,currentradius,distsq;
|
double del1,del2,r,currentradius,distsq,distsqprev,crad;
|
||||||
double corner1[3],corner2[3],corner3[3],corner4[3],xp[3],nearest[3];
|
double corner1[3],corner2[3],corner3[3],corner4[3],xp[3],nearest[3];
|
||||||
|
|
||||||
if (axis == 'x') {
|
if (axis == 'x') {
|
||||||
@ -383,11 +412,15 @@ int RegCone::surface_exterior(double *x, double cutoff)
|
|||||||
r = sqrt(del1*del1 + del2*del2);
|
r = sqrt(del1*del1 + del2*del2);
|
||||||
currentradius = radiuslo + (x[0]-lo)*(radiushi-radiuslo)/(hi-lo);
|
currentradius = radiuslo + (x[0]-lo)*(radiushi-radiuslo)/(hi-lo);
|
||||||
|
|
||||||
|
// radius of curvature, only used for granular walls
|
||||||
|
|
||||||
|
double crad = 0.0;
|
||||||
|
|
||||||
// x is far enough from cone that there is no contact
|
// x is far enough from cone that there is no contact
|
||||||
// x is interior to cone
|
// x is interior to cone
|
||||||
|
|
||||||
if (r >= maxradius+cutoff ||
|
if (r >= maxradius+cutoff || x[0] <= lo-cutoff || x[0] >= hi+cutoff)
|
||||||
x[0] <= lo-cutoff || x[0] >= hi+cutoff) return 0;
|
return 0;
|
||||||
if (r < currentradius && x[0] > lo && x[0] < hi) return 0;
|
if (r < currentradius && x[0] > lo && x[0] < hi) return 0;
|
||||||
|
|
||||||
// x is exterior to cone or on its surface
|
// x is exterior to cone or on its surface
|
||||||
@ -411,14 +444,31 @@ int RegCone::surface_exterior(double *x, double cutoff)
|
|||||||
corner4[2] = c2;
|
corner4[2] = c2;
|
||||||
|
|
||||||
distsq = BIG;
|
distsq = BIG;
|
||||||
point_on_line_segment(corner1,corner2,x,xp);
|
|
||||||
distsq = closest(x,xp,nearest,distsq);
|
|
||||||
point_on_line_segment(corner1,corner3,x,xp);
|
|
||||||
distsq = closest(x,xp,nearest,distsq);
|
|
||||||
point_on_line_segment(corner2,corner4,x,xp);
|
|
||||||
distsq = closest(x,xp,nearest,distsq);
|
|
||||||
|
|
||||||
|
if (!open_faces[2]) {
|
||||||
|
point_on_line_segment(corner1,corner2,x,xp);
|
||||||
|
distsq = closest(x,xp,nearest,distsq);
|
||||||
|
crad = -2.0*(radiuslo + (nearest[0]-lo)*(radiushi-radiuslo)/(hi-lo));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!open_faces[0]) {
|
||||||
|
point_on_line_segment(corner1,corner3,x,xp);
|
||||||
|
distsqprev = distsq;
|
||||||
|
distsq = closest(x,xp,nearest,distsq);
|
||||||
|
if (distsq < distsqprev) crad = 0.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!open_faces[1]) {
|
||||||
|
point_on_line_segment(corner2,corner4,x,xp);
|
||||||
|
distsqprev = distsq;
|
||||||
|
distsq = closest(x,xp,nearest,distsq);
|
||||||
|
if (distsq < distsqprev) crad = 0.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (distsq == BIG) return 0;
|
||||||
add_contact(0,x,nearest[0],nearest[1],nearest[2]);
|
add_contact(0,x,nearest[0],nearest[1],nearest[2]);
|
||||||
|
contact[0].radius = crad;
|
||||||
|
contact[0].iwall = 0;
|
||||||
if (contact[0].r < cutoff) return 1;
|
if (contact[0].r < cutoff) return 1;
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
@ -456,14 +506,30 @@ int RegCone::surface_exterior(double *x, double cutoff)
|
|||||||
corner4[2] = c2;
|
corner4[2] = c2;
|
||||||
|
|
||||||
distsq = BIG;
|
distsq = BIG;
|
||||||
point_on_line_segment(corner1,corner2,x,xp);
|
|
||||||
distsq = closest(x,xp,nearest,distsq);
|
if (!open_faces[2]){
|
||||||
point_on_line_segment(corner1,corner3,x,xp);
|
point_on_line_segment(corner1,corner2,x,xp);
|
||||||
distsq = closest(x,xp,nearest,distsq);
|
distsq = closest(x,xp,nearest,distsq);
|
||||||
point_on_line_segment(corner2,corner4,x,xp);
|
crad = -2.0*(radiuslo + (nearest[1]-lo)*(radiushi-radiuslo)/(hi-lo));
|
||||||
distsq = closest(x,xp,nearest,distsq);
|
}
|
||||||
|
|
||||||
|
if (!open_faces[0]) {
|
||||||
|
point_on_line_segment(corner1,corner3,x,xp);
|
||||||
|
distsqprev = distsq;
|
||||||
|
distsq = closest(x,xp,nearest,distsq);
|
||||||
|
if (distsq < distsqprev) crad = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!open_faces[1]) {
|
||||||
|
point_on_line_segment(corner2,corner4,x,xp);
|
||||||
|
distsqprev = distsq;
|
||||||
|
distsq = closest(x,xp,nearest,distsq);
|
||||||
|
if (distsq < distsqprev) crad = 0;
|
||||||
|
}
|
||||||
|
|
||||||
add_contact(0,x,nearest[0],nearest[1],nearest[2]);
|
add_contact(0,x,nearest[0],nearest[1],nearest[2]);
|
||||||
|
contact[0].radius = crad;
|
||||||
|
contact[0].iwall = 0;
|
||||||
if (contact[0].r < cutoff) return 1;
|
if (contact[0].r < cutoff) return 1;
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
@ -476,8 +542,8 @@ int RegCone::surface_exterior(double *x, double cutoff)
|
|||||||
// z is far enough from cone that there is no contact
|
// z is far enough from cone that there is no contact
|
||||||
// z is interior to cone
|
// z is interior to cone
|
||||||
|
|
||||||
if (r >= maxradius+cutoff ||
|
if (r >= maxradius+cutoff || x[2] <= lo-cutoff || x[2] >= hi+cutoff)
|
||||||
x[2] <= lo-cutoff || x[2] >= hi+cutoff) return 0;
|
return 0;
|
||||||
if (r < currentradius && x[2] > lo && x[2] < hi) return 0;
|
if (r < currentradius && x[2] > lo && x[2] < hi) return 0;
|
||||||
|
|
||||||
// z is exterior to cone or on its surface
|
// z is exterior to cone or on its surface
|
||||||
@ -501,52 +567,35 @@ int RegCone::surface_exterior(double *x, double cutoff)
|
|||||||
corner4[2] = hi;
|
corner4[2] = hi;
|
||||||
|
|
||||||
distsq = BIG;
|
distsq = BIG;
|
||||||
point_on_line_segment(corner1,corner2,x,xp);
|
|
||||||
distsq = closest(x,xp,nearest,distsq);
|
if (!open_faces[2]){
|
||||||
point_on_line_segment(corner1,corner3,x,xp);
|
point_on_line_segment(corner1,corner2,x,xp);
|
||||||
distsq = closest(x,xp,nearest,distsq);
|
distsq = closest(x,xp,nearest,distsq);
|
||||||
point_on_line_segment(corner2,corner4,x,xp);
|
crad = -2.0*(radiuslo + (nearest[2]-lo)*(radiushi-radiuslo)/(hi-lo));
|
||||||
distsq = closest(x,xp,nearest,distsq);
|
}
|
||||||
|
|
||||||
|
if (!open_faces[0]) {
|
||||||
|
point_on_line_segment(corner1,corner3,x,xp);
|
||||||
|
distsqprev = distsq;
|
||||||
|
distsq = closest(x,xp,nearest,distsq);
|
||||||
|
if (distsq < distsqprev) crad = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!open_faces[1]) {
|
||||||
|
point_on_line_segment(corner2,corner4,x,xp);
|
||||||
|
distsqprev = distsq;
|
||||||
|
distsq = closest(x,xp,nearest,distsq);
|
||||||
|
if (distsq < distsqprev) crad = 0;
|
||||||
|
}
|
||||||
|
|
||||||
add_contact(0,x,nearest[0],nearest[1],nearest[2]);
|
add_contact(0,x,nearest[0],nearest[1],nearest[2]);
|
||||||
|
contact[0].radius = crad;
|
||||||
|
contact[0].iwall = 0;
|
||||||
if (contact[0].r < cutoff) return 1;
|
if (contact[0].r < cutoff) return 1;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
|
||||||
find nearest point to C on line segment A,B and return it as D
|
|
||||||
project (C-A) onto (B-A)
|
|
||||||
t = length of that projection, normalized by length of (B-A)
|
|
||||||
t <= 0, C is closest to A
|
|
||||||
t >= 1, C is closest to B
|
|
||||||
else closest point is between A and B
|
|
||||||
------------------------------------------------------------------------- */
|
|
||||||
|
|
||||||
void RegCone::point_on_line_segment(double *a, double *b,
|
|
||||||
double *c, double *d)
|
|
||||||
{
|
|
||||||
double ba[3],ca[3];
|
|
||||||
|
|
||||||
subtract(a,b,ba);
|
|
||||||
subtract(a,c,ca);
|
|
||||||
double t = dotproduct(ca,ba) / dotproduct(ba,ba);
|
|
||||||
|
|
||||||
if (t <= 0.0) {
|
|
||||||
d[0] = a[0];
|
|
||||||
d[1] = a[1];
|
|
||||||
d[2] = a[2];
|
|
||||||
} else if (t >= 1.0) {
|
|
||||||
d[0] = b[0];
|
|
||||||
d[1] = b[1];
|
|
||||||
d[2] = b[2];
|
|
||||||
} else {
|
|
||||||
d[0] = a[0] + t*ba[0];
|
|
||||||
d[1] = a[1] + t*ba[1];
|
|
||||||
d[2] = a[2] + t*ba[2];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
double RegCone::closest(double *x, double *near, double *nearest, double dsq)
|
double RegCone::closest(double *x, double *near, double *nearest, double dsq)
|
||||||
@ -562,23 +611,3 @@ double RegCone::closest(double *x, double *near, double *nearest, double dsq)
|
|||||||
nearest[2] = near[2];
|
nearest[2] = near[2];
|
||||||
return rsq;
|
return rsq;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
|
||||||
v3 = v2 - v1
|
|
||||||
------------------------------------------------------------------------- */
|
|
||||||
|
|
||||||
void RegCone::subtract(double *v1, double *v2, double *v3)
|
|
||||||
{
|
|
||||||
v3[0] = v2[0] - v1[0];
|
|
||||||
v3[1] = v2[1] - v1[1];
|
|
||||||
v3[2] = v2[2] - v1[2];
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
|
||||||
return dotproduct = v1 dot v2
|
|
||||||
------------------------------------------------------------------------- */
|
|
||||||
|
|
||||||
double RegCone::dotproduct(double *v1, double *v2)
|
|
||||||
{
|
|
||||||
return (v1[0]*v2[0] + v1[1]*v2[1] + v1[2]*v2[2]);
|
|
||||||
}
|
|
||||||
|
|||||||
@ -39,11 +39,7 @@ class RegCone : public Region {
|
|||||||
double lo,hi;
|
double lo,hi;
|
||||||
double maxradius;
|
double maxradius;
|
||||||
|
|
||||||
void point_on_line_segment(double *, double *, double *, double *);
|
|
||||||
double closest(double *, double *, double *, double);
|
double closest(double *, double *, double *, double);
|
||||||
|
|
||||||
void subtract(double *, double *, double *);
|
|
||||||
double dotproduct(double *, double *);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -34,6 +34,12 @@ RegCylinder::RegCylinder(LAMMPS *lmp, int narg, char **arg) :
|
|||||||
{
|
{
|
||||||
options(narg-8,&arg[8]);
|
options(narg-8,&arg[8]);
|
||||||
|
|
||||||
|
// check open face settings
|
||||||
|
|
||||||
|
if (openflag && (open_faces[2] || open_faces[3] ||
|
||||||
|
open_faces[4] || open_faces[5]))
|
||||||
|
error->all(FLERR,"Invalid region cylinder open setting");
|
||||||
|
|
||||||
if (strcmp(arg[2],"x") && strcmp(arg[2],"y") && strcmp(arg[2],"z"))
|
if (strcmp(arg[2],"x") && strcmp(arg[2],"y") && strcmp(arg[2],"z"))
|
||||||
error->all(FLERR,"Illegal region cylinder command");
|
error->all(FLERR,"Illegal region cylinder command");
|
||||||
axis = arg[2][0];
|
axis = arg[2][0];
|
||||||
@ -61,7 +67,7 @@ RegCylinder::RegCylinder(LAMMPS *lmp, int narg, char **arg) :
|
|||||||
shape_update();
|
shape_update();
|
||||||
} else {
|
} else {
|
||||||
radius = force->numeric(FLERR,arg[5]);
|
radius = force->numeric(FLERR,arg[5]);
|
||||||
if (axis == 'x') radius *= yscale;
|
if (axis == 'x') radius *= xscale;
|
||||||
else radius *= xscale;
|
else radius *= xscale;
|
||||||
rstyle = CONSTANT;
|
rstyle = CONSTANT;
|
||||||
}
|
}
|
||||||
@ -149,10 +155,13 @@ RegCylinder::RegCylinder(LAMMPS *lmp, int narg, char **arg) :
|
|||||||
}
|
}
|
||||||
} else bboxflag = 0;
|
} else bboxflag = 0;
|
||||||
|
|
||||||
// particle could be contact cylinder surface and 2 ends
|
// particle could be close to cylinder surface and 2 ends
|
||||||
|
// particle can only touch surface and 1 end
|
||||||
|
|
||||||
cmax = 3;
|
cmax = 3;
|
||||||
contact = new Contact[cmax];
|
contact = new Contact[cmax];
|
||||||
|
if (interior) tmax = 2;
|
||||||
|
else tmax = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
@ -230,25 +239,34 @@ int RegCylinder::surface_interior(double *x, double cutoff)
|
|||||||
// x is interior to cylinder or on its surface
|
// x is interior to cylinder or on its surface
|
||||||
|
|
||||||
delta = radius - r;
|
delta = radius - r;
|
||||||
if (delta < cutoff && r > 0.0) {
|
if (delta < cutoff && r > 0.0 && !open_faces[2]) {
|
||||||
contact[n].r = delta;
|
contact[n].r = delta;
|
||||||
contact[n].delx = 0.0;
|
contact[n].delx = 0.0;
|
||||||
contact[n].dely = del1*(1.0-radius/r);
|
contact[n].dely = del1*(1.0-radius/r);
|
||||||
contact[n].delz = del2*(1.0-radius/r);
|
contact[n].delz = del2*(1.0-radius/r);
|
||||||
|
contact[n].radius = -2.0*radius;
|
||||||
|
contact[n].iwall = 2;
|
||||||
|
contact[n].varflag = 1;
|
||||||
n++;
|
n++;
|
||||||
}
|
}
|
||||||
delta = x[0] - lo;
|
delta = x[0] - lo;
|
||||||
if (delta < cutoff) {
|
if (delta < cutoff && !open_faces[0]) {
|
||||||
contact[n].r = delta;
|
contact[n].r = delta;
|
||||||
contact[n].delx = delta;
|
contact[n].delx = delta;
|
||||||
contact[n].dely = contact[n].delz = 0.0;
|
contact[n].dely = contact[n].delz = 0.0;
|
||||||
|
contact[n].radius = 0;
|
||||||
|
contact[n].iwall = 0;
|
||||||
|
contact[n].varflag = 0;
|
||||||
n++;
|
n++;
|
||||||
}
|
}
|
||||||
delta = hi - x[0];
|
delta = hi - x[0];
|
||||||
if (delta < cutoff) {
|
if (delta < cutoff && !open_faces[1]) {
|
||||||
contact[n].r = delta;
|
contact[n].r = delta;
|
||||||
contact[n].delx = -delta;
|
contact[n].delx = -delta;
|
||||||
contact[n].dely = contact[n].delz = 0.0;
|
contact[n].dely = contact[n].delz = 0.0;
|
||||||
|
contact[n].radius = 0;
|
||||||
|
contact[n].iwall = 1;
|
||||||
|
contact[n].varflag = 0;
|
||||||
n++;
|
n++;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -264,25 +282,34 @@ int RegCylinder::surface_interior(double *x, double cutoff)
|
|||||||
// y is interior to cylinder or on its surface
|
// y is interior to cylinder or on its surface
|
||||||
|
|
||||||
delta = radius - r;
|
delta = radius - r;
|
||||||
if (delta < cutoff && r > 0.0) {
|
if (delta < cutoff && r > 0.0 && !open_faces[2]) {
|
||||||
contact[n].r = delta;
|
contact[n].r = delta;
|
||||||
contact[n].delx = del1*(1.0-radius/r);
|
contact[n].delx = del1*(1.0-radius/r);
|
||||||
contact[n].dely = 0.0;
|
contact[n].dely = 0.0;
|
||||||
contact[n].delz = del2*(1.0-radius/r);
|
contact[n].delz = del2*(1.0-radius/r);
|
||||||
|
contact[n].radius = -2.0*radius;
|
||||||
|
contact[n].iwall = 2;
|
||||||
|
contact[n].varflag = 1;
|
||||||
n++;
|
n++;
|
||||||
}
|
}
|
||||||
delta = x[1] - lo;
|
delta = x[1] - lo;
|
||||||
if (delta < cutoff) {
|
if (delta < cutoff && !open_faces[0]) {
|
||||||
contact[n].r = delta;
|
contact[n].r = delta;
|
||||||
contact[n].dely = delta;
|
contact[n].dely = delta;
|
||||||
contact[n].delx = contact[n].delz = 0.0;
|
contact[n].delx = contact[n].delz = 0.0;
|
||||||
|
contact[n].radius = 0;
|
||||||
|
contact[n].iwall = 0;
|
||||||
|
contact[n].varflag = 0;
|
||||||
n++;
|
n++;
|
||||||
}
|
}
|
||||||
delta = hi - x[1];
|
delta = hi - x[1];
|
||||||
if (delta < cutoff) {
|
if (delta < cutoff && !open_faces[1]) {
|
||||||
contact[n].r = delta;
|
contact[n].r = delta;
|
||||||
contact[n].dely = -delta;
|
contact[n].dely = -delta;
|
||||||
contact[n].delx = contact[n].delz = 0.0;
|
contact[n].delx = contact[n].delz = 0.0;
|
||||||
|
contact[n].radius = 0;
|
||||||
|
contact[n].iwall = 1;
|
||||||
|
contact[n].varflag = 0;
|
||||||
n++;
|
n++;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -298,25 +325,34 @@ int RegCylinder::surface_interior(double *x, double cutoff)
|
|||||||
// z is interior to cylinder or on its surface
|
// z is interior to cylinder or on its surface
|
||||||
|
|
||||||
delta = radius - r;
|
delta = radius - r;
|
||||||
if (delta < cutoff && r > 0.0) {
|
if (delta < cutoff && r > 0.0 && !open_faces[2]) {
|
||||||
contact[n].r = delta;
|
contact[n].r = delta;
|
||||||
contact[n].delx = del1*(1.0-radius/r);
|
contact[n].delx = del1*(1.0-radius/r);
|
||||||
contact[n].dely = del2*(1.0-radius/r);
|
contact[n].dely = del2*(1.0-radius/r);
|
||||||
contact[n].delz = 0.0;
|
contact[n].delz = 0.0;
|
||||||
|
contact[n].radius = -2.0*radius;
|
||||||
|
contact[n].iwall = 2;
|
||||||
|
contact[n].varflag = 1;
|
||||||
n++;
|
n++;
|
||||||
}
|
}
|
||||||
delta = x[2] - lo;
|
delta = x[2] - lo;
|
||||||
if (delta < cutoff) {
|
if (delta < cutoff && !open_faces[0]) {
|
||||||
contact[n].r = delta;
|
contact[n].r = delta;
|
||||||
contact[n].delz = delta;
|
contact[n].delz = delta;
|
||||||
contact[n].delx = contact[n].dely = 0.0;
|
contact[n].delx = contact[n].dely = 0.0;
|
||||||
|
contact[n].radius = 0;
|
||||||
|
contact[n].iwall = 0;
|
||||||
|
contact[n].varflag = 0;
|
||||||
n++;
|
n++;
|
||||||
}
|
}
|
||||||
delta = hi - x[2];
|
delta = hi - x[2];
|
||||||
if (delta < cutoff) {
|
if (delta < cutoff && !open_faces[1]) {
|
||||||
contact[n].r = delta;
|
contact[n].r = delta;
|
||||||
contact[n].delz = -delta;
|
contact[n].delz = -delta;
|
||||||
contact[n].delx = contact[n].dely = 0.0;
|
contact[n].delx = contact[n].dely = 0.0;
|
||||||
|
contact[n].radius = 0;
|
||||||
|
contact[n].iwall = 1;
|
||||||
|
contact[n].varflag = 0;
|
||||||
n++;
|
n++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -334,6 +370,13 @@ int RegCylinder::surface_exterior(double *x, double cutoff)
|
|||||||
{
|
{
|
||||||
double del1,del2,r;
|
double del1,del2,r;
|
||||||
double xp,yp,zp;
|
double xp,yp,zp;
|
||||||
|
double dx, dr, dr2, d2, d2prev;
|
||||||
|
|
||||||
|
// radius of curvature for granular
|
||||||
|
// 0 for flat surfaces (infinite case), 2*radius for curved portion
|
||||||
|
|
||||||
|
double crad = 0.0;
|
||||||
|
int varflag = 0;
|
||||||
|
|
||||||
if (axis == 'x') {
|
if (axis == 'x') {
|
||||||
del1 = x[1] - c1;
|
del1 = x[1] - c1;
|
||||||
@ -351,18 +394,81 @@ int RegCylinder::surface_exterior(double *x, double cutoff)
|
|||||||
// could be edge of cylinder
|
// could be edge of cylinder
|
||||||
// do not add contact point if r >= cutoff
|
// do not add contact point if r >= cutoff
|
||||||
|
|
||||||
if (r > radius) {
|
d2prev = BIG;
|
||||||
yp = c1 + del1*radius/r;
|
if (!openflag) {
|
||||||
zp = c2 + del2*radius/r;
|
if (r > radius) {
|
||||||
} else {
|
yp = c1 + del1*radius/r;
|
||||||
yp = x[1];
|
zp = c2 + del2*radius/r;
|
||||||
zp = x[2];
|
crad = 2.0*radius;
|
||||||
|
varflag = 1;
|
||||||
|
} else {
|
||||||
|
yp = x[1];
|
||||||
|
zp = x[2];
|
||||||
|
}
|
||||||
|
if (x[0] < lo) xp = lo;
|
||||||
|
else if (x[0] > hi) xp = hi;
|
||||||
|
else xp = x[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
// closest point on curved surface
|
||||||
|
|
||||||
|
else {
|
||||||
|
dr = r - radius;
|
||||||
|
dr2 = dr*dr;
|
||||||
|
if (!open_faces[2]){
|
||||||
|
yp = c1 + del1*radius/r;
|
||||||
|
zp = c2 + del2*radius/r;
|
||||||
|
if (x[0] < lo) {
|
||||||
|
dx = lo-x[0];
|
||||||
|
xp = lo;
|
||||||
|
}
|
||||||
|
else if (x[0] > hi) {
|
||||||
|
dx = x[0]-hi;
|
||||||
|
xp = hi;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
dx = 0;
|
||||||
|
xp = x[0];
|
||||||
|
}
|
||||||
|
d2 = d2prev = dr2 + dx*dx;
|
||||||
|
}
|
||||||
|
|
||||||
|
// closest point on bottom cap
|
||||||
|
|
||||||
|
if (!open_faces[0]) {
|
||||||
|
dx = lo - x[0];
|
||||||
|
if (r < radius) d2 = dx*dx;
|
||||||
|
else d2 = dr2 + dx*dx;
|
||||||
|
if (d2 < d2prev) {
|
||||||
|
xp = lo;
|
||||||
|
if (r < radius){
|
||||||
|
yp = x[1];
|
||||||
|
zp = x[2];
|
||||||
|
}
|
||||||
|
d2prev = d2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// closest point on top cap
|
||||||
|
|
||||||
|
if (!open_faces[1]) {
|
||||||
|
dx = hi - x[0];
|
||||||
|
if (r < radius) d2 = dx*dx;
|
||||||
|
else d2 = dr2 + dx*dx;
|
||||||
|
if (d2 < d2prev) {
|
||||||
|
xp = hi;
|
||||||
|
if (r < radius){
|
||||||
|
yp = x[1];
|
||||||
|
zp = x[2];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (x[0] < lo) xp = lo;
|
|
||||||
else if (x[0] > hi) xp = hi;
|
|
||||||
else xp = x[0];
|
|
||||||
|
|
||||||
add_contact(0,x,xp,yp,zp);
|
add_contact(0,x,xp,yp,zp);
|
||||||
|
contact[0].radius = crad;
|
||||||
|
contact[0].varflag = varflag;
|
||||||
|
contact[0].iwall = 0;
|
||||||
if (contact[0].r < cutoff) return 1;
|
if (contact[0].r < cutoff) return 1;
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
@ -382,18 +488,81 @@ int RegCylinder::surface_exterior(double *x, double cutoff)
|
|||||||
// could be edge of cylinder
|
// could be edge of cylinder
|
||||||
// do not add contact point if r >= cutoff
|
// do not add contact point if r >= cutoff
|
||||||
|
|
||||||
if (r > radius) {
|
d2prev = BIG;
|
||||||
xp = c1 + del1*radius/r;
|
if (!openflag) {
|
||||||
zp = c2 + del2*radius/r;
|
if (r > radius) {
|
||||||
} else {
|
xp = c1 + del1*radius/r;
|
||||||
xp = x[0];
|
zp = c2 + del2*radius/r;
|
||||||
zp = x[2];
|
crad = 2.0*radius;
|
||||||
|
varflag = 1;
|
||||||
|
} else {
|
||||||
|
xp = x[0];
|
||||||
|
zp = x[2];
|
||||||
|
}
|
||||||
|
if (x[1] < lo) yp = lo;
|
||||||
|
else if (x[1] > hi) yp = hi;
|
||||||
|
else yp = x[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
// closest point on curved surface
|
||||||
|
|
||||||
|
else {
|
||||||
|
dr = r - radius;
|
||||||
|
dr2 = dr*dr;
|
||||||
|
if (!open_faces[2]){
|
||||||
|
xp = c1 + del1*radius/r;
|
||||||
|
zp = c2 + del2*radius/r;
|
||||||
|
if (x[1] < lo) {
|
||||||
|
dx = lo-x[1];
|
||||||
|
yp = lo;
|
||||||
|
}
|
||||||
|
else if (x[1] > hi) {
|
||||||
|
dx = x[1]-hi;
|
||||||
|
yp = hi;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
dx = 0;
|
||||||
|
yp = x[1];
|
||||||
|
}
|
||||||
|
d2 = d2prev = dr2 + dx*dx;
|
||||||
|
}
|
||||||
|
|
||||||
|
// closest point on bottom cap
|
||||||
|
|
||||||
|
if (!open_faces[0]) {
|
||||||
|
dx = lo - x[1];
|
||||||
|
if (r < radius) d2 = dx*dx;
|
||||||
|
else d2 = dr2 + dx*dx;
|
||||||
|
if (d2 < d2prev) {
|
||||||
|
yp = lo;
|
||||||
|
if (r < radius) {
|
||||||
|
xp = x[0];
|
||||||
|
zp = x[2];
|
||||||
|
}
|
||||||
|
d2prev = d2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// closest point on top cap
|
||||||
|
|
||||||
|
if (!open_faces[1]) {
|
||||||
|
dx = hi - x[1];
|
||||||
|
if (r < radius) d2 = dx*dx;
|
||||||
|
else d2 = dr2 + dx*dx;
|
||||||
|
if (d2 < d2prev) {
|
||||||
|
yp = hi;
|
||||||
|
if (r < radius) {
|
||||||
|
xp = x[0];
|
||||||
|
zp = x[2];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (x[1] < lo) yp = lo;
|
|
||||||
else if (x[1] > hi) yp = hi;
|
|
||||||
else yp = x[1];
|
|
||||||
|
|
||||||
add_contact(0,x,xp,yp,zp);
|
add_contact(0,x,xp,yp,zp);
|
||||||
|
contact[0].radius = crad;
|
||||||
|
contact[0].varflag = varflag;
|
||||||
|
contact[0].iwall = 0;
|
||||||
if (contact[0].r < cutoff) return 1;
|
if (contact[0].r < cutoff) return 1;
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
@ -413,18 +582,81 @@ int RegCylinder::surface_exterior(double *x, double cutoff)
|
|||||||
// could be edge of cylinder
|
// could be edge of cylinder
|
||||||
// do not add contact point if r >= cutoff
|
// do not add contact point if r >= cutoff
|
||||||
|
|
||||||
if (r > radius) {
|
d2prev = BIG;
|
||||||
xp = c1 + del1*radius/r;
|
if (!openflag) {
|
||||||
yp = c2 + del2*radius/r;
|
if (r > radius) {
|
||||||
} else {
|
xp = c1 + del1*radius/r;
|
||||||
xp = x[0];
|
yp = c2 + del2*radius/r;
|
||||||
yp = x[1];
|
crad = 2.0*radius;
|
||||||
|
varflag = 1;
|
||||||
|
} else {
|
||||||
|
xp = x[0];
|
||||||
|
yp = x[1];
|
||||||
|
}
|
||||||
|
if (x[2] < lo) zp = lo;
|
||||||
|
else if (x[2] > hi) zp = hi;
|
||||||
|
else zp = x[2];
|
||||||
|
}
|
||||||
|
|
||||||
|
// closest point on curved surface
|
||||||
|
|
||||||
|
else {
|
||||||
|
dr = r - radius;
|
||||||
|
dr2 = dr*dr;
|
||||||
|
if (!open_faces[2]){
|
||||||
|
xp = c1 + del1*radius/r;
|
||||||
|
yp = c2 + del2*radius/r;
|
||||||
|
if (x[2] < lo) {
|
||||||
|
dx = lo-x[2];
|
||||||
|
zp = lo;
|
||||||
|
}
|
||||||
|
else if (x[2] > hi) {
|
||||||
|
dx = x[2]-hi;
|
||||||
|
zp = hi;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
dx = 0;
|
||||||
|
zp = x[2];
|
||||||
|
}
|
||||||
|
d2 = d2prev = dr2 + dx*dx;
|
||||||
|
}
|
||||||
|
|
||||||
|
// closest point on bottom cap
|
||||||
|
|
||||||
|
if (!open_faces[0]) {
|
||||||
|
dx = lo - x[2];
|
||||||
|
if (r < radius) d2 = dx*dx;
|
||||||
|
else d2 = dr2 + dx*dx;
|
||||||
|
if (d2 < d2prev) {
|
||||||
|
zp = lo;
|
||||||
|
if (r < radius) {
|
||||||
|
xp = x[0];
|
||||||
|
yp = x[1];
|
||||||
|
}
|
||||||
|
d2prev = d2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// closest point on top cap
|
||||||
|
|
||||||
|
if (!open_faces[1]) {
|
||||||
|
dx = hi - x[2];
|
||||||
|
if (r < radius) d2 = dx*dx;
|
||||||
|
else d2 = dr2 + dx*dx;
|
||||||
|
if (d2 < d2prev) {
|
||||||
|
zp = hi;
|
||||||
|
if (r < radius) {
|
||||||
|
xp = x[0];
|
||||||
|
yp = x[1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (x[2] < lo) zp = lo;
|
|
||||||
else if (x[2] > hi) zp = hi;
|
|
||||||
else zp = x[2];
|
|
||||||
|
|
||||||
add_contact(0,x,xp,yp,zp);
|
add_contact(0,x,xp,yp,zp);
|
||||||
|
contact[0].radius = crad;
|
||||||
|
contact[0].varflag = varflag;
|
||||||
|
contact[0].iwall = 0;
|
||||||
if (contact[0].r < cutoff) return 1;
|
if (contact[0].r < cutoff) return 1;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -439,8 +671,9 @@ void RegCylinder::shape_update()
|
|||||||
radius = input->variable->compute_equal(rvar);
|
radius = input->variable->compute_equal(rvar);
|
||||||
if (radius < 0.0)
|
if (radius < 0.0)
|
||||||
error->one(FLERR,"Variable evaluation in region gave bad value");
|
error->one(FLERR,"Variable evaluation in region gave bad value");
|
||||||
if (axis == 'x') radius *= yscale;
|
if (axis == 'x') radius *= xscale;
|
||||||
else radius *= xscale;
|
else if (axis == 'y') radius*= yscale;
|
||||||
|
else radius *= zscale;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
/* ----------------------------------------------------------------------
|
||||||
@ -455,3 +688,65 @@ void RegCylinder::variable_check()
|
|||||||
if (!input->variable->equalstyle(rvar))
|
if (!input->variable->equalstyle(rvar))
|
||||||
error->all(FLERR,"Variable for region cylinder is invalid style");
|
error->all(FLERR,"Variable for region cylinder is invalid style");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
Set values needed to calculate velocity due to shape changes.
|
||||||
|
These values do not depend on the contact, so this function is
|
||||||
|
called once per timestep by fix/wall/gran/region.
|
||||||
|
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void RegCylinder::set_velocity_shape()
|
||||||
|
{
|
||||||
|
if (axis == 'x'){
|
||||||
|
xcenter[0] = 0;
|
||||||
|
xcenter[1] = c1;
|
||||||
|
xcenter[2] = c2;
|
||||||
|
}
|
||||||
|
else if (axis == 'y'){
|
||||||
|
xcenter[0] = c1;
|
||||||
|
xcenter[1] = 0;
|
||||||
|
xcenter[2] = c2;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
xcenter[0] = c1;
|
||||||
|
xcenter[1] = c2;
|
||||||
|
xcenter[2] = 0;
|
||||||
|
}
|
||||||
|
forward_transform(xcenter[0], xcenter[1], xcenter[2]);
|
||||||
|
if (update->ntimestep > 0) rprev = prev[4];
|
||||||
|
else rprev = radius;
|
||||||
|
prev[4] = radius;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
add velocity due to shape change to wall velocity
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void RegCylinder::velocity_contact_shape(double *vwall, double *xc)
|
||||||
|
{
|
||||||
|
double delx, dely, delz; // Displacement of contact point in x,y,z
|
||||||
|
if (axis == 'x'){
|
||||||
|
delx = 0;
|
||||||
|
dely = (xc[1] - xcenter[1])*(1 - rprev/radius);
|
||||||
|
delz = (xc[2] - xcenter[2])*(1 - rprev/radius);
|
||||||
|
}
|
||||||
|
else if (axis == 'y'){
|
||||||
|
delx = (xc[0] - xcenter[0])*(1 - rprev/radius);
|
||||||
|
dely = 0;
|
||||||
|
delz = (xc[2] - xcenter[2])*(1 - rprev/radius);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
delx = (xc[0] - xcenter[0])*(1 - rprev/radius);
|
||||||
|
dely = (xc[1] - xcenter[1])*(1 - rprev/radius);
|
||||||
|
delz = 0;
|
||||||
|
}
|
||||||
|
vwall[0] += delx/update->dt;
|
||||||
|
vwall[1] += dely/update->dt;
|
||||||
|
vwall[2] += delz/update->dt;
|
||||||
|
//printf ("R is %g, prev %g, velocity of wall at %g %g %g is %g %g %g\n",radius,rprev,xc[0],xc[1],xc[2],vwall[0],vwall[1],vwall[2]);
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
@ -35,6 +35,8 @@ class RegCylinder : public Region {
|
|||||||
int surface_interior(double *, double);
|
int surface_interior(double *, double);
|
||||||
int surface_exterior(double *, double);
|
int surface_exterior(double *, double);
|
||||||
void shape_update();
|
void shape_update();
|
||||||
|
void set_velocity_shape();
|
||||||
|
void velocity_contact_shape(double *, double *);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
char axis;
|
char axis;
|
||||||
|
|||||||
@ -43,7 +43,7 @@ RegIntersect::RegIntersect(LAMMPS *lmp, int narg, char **arg) :
|
|||||||
idsub[nregion] = new char[m];
|
idsub[nregion] = new char[m];
|
||||||
strcpy(idsub[nregion],arg[iarg+3]);
|
strcpy(idsub[nregion],arg[iarg+3]);
|
||||||
iregion = domain->find_region(idsub[nregion]);
|
iregion = domain->find_region(idsub[nregion]);
|
||||||
if (iregion == -1)
|
if (iregion == -1)
|
||||||
error->all(FLERR,"Region intersect region ID does not exist");
|
error->all(FLERR,"Region intersect region ID does not exist");
|
||||||
list[nregion++] = iregion;
|
list[nregion++] = iregion;
|
||||||
}
|
}
|
||||||
@ -88,11 +88,21 @@ RegIntersect::RegIntersect(LAMMPS *lmp, int narg, char **arg) :
|
|||||||
}
|
}
|
||||||
|
|
||||||
// possible contacts = sum of possible contacts in all sub-regions
|
// possible contacts = sum of possible contacts in all sub-regions
|
||||||
|
// for near contacts and touching contacts
|
||||||
|
|
||||||
cmax = 0;
|
cmax = 0;
|
||||||
for (int ilist = 0; ilist < nregion; ilist++)
|
size_restart = 0;
|
||||||
|
for (int ilist = 0; ilist < nregion; ilist++){
|
||||||
cmax += regions[list[ilist]]->cmax;
|
cmax += regions[list[ilist]]->cmax;
|
||||||
|
size_restart += regions[list[ilist]]->size_restart;
|
||||||
|
}
|
||||||
contact = new Contact[cmax];
|
contact = new Contact[cmax];
|
||||||
|
|
||||||
|
tmax = 0;
|
||||||
|
for (int ilist = 0; ilist < nregion; ilist++) {
|
||||||
|
if (interior) tmax += regions[list[ilist]]->tmax;
|
||||||
|
else tmax++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
@ -117,7 +127,7 @@ void RegIntersect::init()
|
|||||||
int iregion;
|
int iregion;
|
||||||
for (int ilist = 0; ilist < nregion; ilist++) {
|
for (int ilist = 0; ilist < nregion; ilist++) {
|
||||||
iregion = domain->find_region(idsub[ilist]);
|
iregion = domain->find_region(idsub[ilist]);
|
||||||
if (iregion == -1)
|
if (iregion == -1)
|
||||||
error->all(FLERR,"Region union region ID does not exist");
|
error->all(FLERR,"Region union region ID does not exist");
|
||||||
list[ilist] = iregion;
|
list[ilist] = iregion;
|
||||||
}
|
}
|
||||||
@ -159,6 +169,7 @@ int RegIntersect::surface_interior(double *x, double cutoff)
|
|||||||
Region **regions = domain->regions;
|
Region **regions = domain->regions;
|
||||||
int n = 0;
|
int n = 0;
|
||||||
|
|
||||||
|
int walloffset = 0;
|
||||||
for (ilist = 0; ilist < nregion; ilist++) {
|
for (ilist = 0; ilist < nregion; ilist++) {
|
||||||
iregion = list[ilist];
|
iregion = list[ilist];
|
||||||
ncontacts = regions[iregion]->surface(x[0],x[1],x[2],cutoff);
|
ncontacts = regions[iregion]->surface(x[0],x[1],x[2],cutoff);
|
||||||
@ -173,12 +184,18 @@ int RegIntersect::surface_interior(double *x, double cutoff)
|
|||||||
}
|
}
|
||||||
if (jlist == nregion) {
|
if (jlist == nregion) {
|
||||||
contact[n].r = regions[iregion]->contact[m].r;
|
contact[n].r = regions[iregion]->contact[m].r;
|
||||||
|
contact[n].radius = regions[iregion]->contact[m].radius;
|
||||||
contact[n].delx = regions[iregion]->contact[m].delx;
|
contact[n].delx = regions[iregion]->contact[m].delx;
|
||||||
contact[n].dely = regions[iregion]->contact[m].dely;
|
contact[n].dely = regions[iregion]->contact[m].dely;
|
||||||
contact[n].delz = regions[iregion]->contact[m].delz;
|
contact[n].delz = regions[iregion]->contact[m].delz;
|
||||||
|
contact[n].iwall = regions[iregion]->contact[m].iwall + walloffset;
|
||||||
|
contact[n].varflag = regions[iregion]->contact[m].varflag;
|
||||||
n++;
|
n++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// increment by cmax instead of tmax to insure
|
||||||
|
// possible wall IDs for sub-regions are non overlapping
|
||||||
|
walloffset += regions[iregion]->cmax;
|
||||||
}
|
}
|
||||||
|
|
||||||
return n;
|
return n;
|
||||||
@ -218,9 +235,12 @@ int RegIntersect::surface_exterior(double *x, double cutoff)
|
|||||||
}
|
}
|
||||||
if (jlist == nregion) {
|
if (jlist == nregion) {
|
||||||
contact[n].r = regions[iregion]->contact[m].r;
|
contact[n].r = regions[iregion]->contact[m].r;
|
||||||
|
contact[n].radius = regions[iregion]->contact[m].radius;
|
||||||
contact[n].delx = regions[iregion]->contact[m].delx;
|
contact[n].delx = regions[iregion]->contact[m].delx;
|
||||||
contact[n].dely = regions[iregion]->contact[m].dely;
|
contact[n].dely = regions[iregion]->contact[m].dely;
|
||||||
contact[n].delz = regions[iregion]->contact[m].delz;
|
contact[n].delz = regions[iregion]->contact[m].delz;
|
||||||
|
contact[n].iwall = ilist;
|
||||||
|
contact[n].varflag = regions[iregion]->contact[m].varflag;
|
||||||
n++;
|
n++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -253,3 +273,48 @@ void RegIntersect::pretransform()
|
|||||||
for (int ilist = 0; ilist < nregion; ilist++)
|
for (int ilist = 0; ilist < nregion; ilist++)
|
||||||
regions[list[ilist]]->pretransform();
|
regions[list[ilist]]->pretransform();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
get translational/angular velocities of all subregions
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void RegIntersect::set_velocity()
|
||||||
|
{
|
||||||
|
Region **regions = domain->regions;
|
||||||
|
for (int ilist = 0; ilist < nregion; ilist++)
|
||||||
|
regions[list[ilist]]->set_velocity();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
region writes its current position/angle
|
||||||
|
needed by fix/wall/gran/region to compute velocity by differencing scheme
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void RegIntersect::write_restart(FILE *fp)
|
||||||
|
{
|
||||||
|
for (int ilist = 0; ilist < nregion; ilist++)
|
||||||
|
domain->regions[list[ilist]]->write_restart(fp);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
region reads its previous position/angle
|
||||||
|
needed by fix/wall/gran/region to compute velocity by differencing scheme
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
int RegIntersect::restart(char *buf, int n)
|
||||||
|
{
|
||||||
|
for (int ilist = 0; ilist < nregion; ilist++)
|
||||||
|
n = domain->regions[list[ilist]]->restart(buf, n);
|
||||||
|
return n;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
set prev vector to zero
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void RegIntersect::reset_vel()
|
||||||
|
{
|
||||||
|
for (int ilist = 0; ilist < nregion; ilist++)
|
||||||
|
domain->regions[list[ilist]]->reset_vel();
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
@ -34,10 +34,12 @@ class RegIntersect : public Region {
|
|||||||
int surface_exterior(double *, double);
|
int surface_exterior(double *, double);
|
||||||
void shape_update();
|
void shape_update();
|
||||||
void pretransform();
|
void pretransform();
|
||||||
|
void set_velocity();
|
||||||
|
void write_restart(FILE *);
|
||||||
|
int restart(char *, int);
|
||||||
|
void reset_vel();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
int nregion;
|
|
||||||
int *list;
|
|
||||||
char **idsub;
|
char **idsub;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -45,9 +45,9 @@ RegPlane::RegPlane(LAMMPS *lmp, int narg, char **arg) :
|
|||||||
// plane has no bounding box
|
// plane has no bounding box
|
||||||
|
|
||||||
bboxflag = 0;
|
bboxflag = 0;
|
||||||
|
|
||||||
cmax = 1;
|
cmax = 1;
|
||||||
contact = new Contact[cmax];
|
contact = new Contact[cmax];
|
||||||
|
tmax = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
@ -85,6 +85,8 @@ int RegPlane::surface_interior(double *x, double cutoff)
|
|||||||
contact[0].delx = dot*normal[0];
|
contact[0].delx = dot*normal[0];
|
||||||
contact[0].dely = dot*normal[1];
|
contact[0].dely = dot*normal[1];
|
||||||
contact[0].delz = dot*normal[2];
|
contact[0].delz = dot*normal[2];
|
||||||
|
contact[0].radius = 0;
|
||||||
|
contact[0].iwall = 0;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
@ -105,6 +107,8 @@ int RegPlane::surface_exterior(double *x, double cutoff)
|
|||||||
contact[0].delx = -dot*normal[0];
|
contact[0].delx = -dot*normal[0];
|
||||||
contact[0].dely = -dot*normal[1];
|
contact[0].dely = -dot*normal[1];
|
||||||
contact[0].delz = -dot*normal[2];
|
contact[0].delz = -dot*normal[2];
|
||||||
|
contact[0].radius = 0;
|
||||||
|
contact[0].iwall = 0;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
@ -21,6 +21,7 @@
|
|||||||
#include "region_prism.h"
|
#include "region_prism.h"
|
||||||
#include "domain.h"
|
#include "domain.h"
|
||||||
#include "force.h"
|
#include "force.h"
|
||||||
|
#include "math_extra.h"
|
||||||
#include "error.h"
|
#include "error.h"
|
||||||
|
|
||||||
using namespace LAMMPS_NS;
|
using namespace LAMMPS_NS;
|
||||||
@ -116,10 +117,13 @@ RegPrism::RegPrism(LAMMPS *lmp, int narg, char **arg) : Region(lmp, narg, arg)
|
|||||||
extent_zhi = zhi;
|
extent_zhi = zhi;
|
||||||
} else bboxflag = 0;
|
} else bboxflag = 0;
|
||||||
|
|
||||||
// particle could contact all 6 planes
|
// particle could be close to all 6 planes
|
||||||
|
// particle can only touch 3 planes
|
||||||
|
|
||||||
cmax = 6;
|
cmax = 6;
|
||||||
contact = new Contact[cmax];
|
contact = new Contact[cmax];
|
||||||
|
if (interior) tmax = 3;
|
||||||
|
else tmax = 1;
|
||||||
|
|
||||||
// h = transformation matrix from tilt coords (0-1) to box coords (xyz)
|
// h = transformation matrix from tilt coords (0-1) to box coords (xyz)
|
||||||
// columns of h are edge vectors of tilted box
|
// columns of h are edge vectors of tilted box
|
||||||
@ -191,14 +195,28 @@ RegPrism::RegPrism(LAMMPS *lmp, int narg, char **arg) : Region(lmp, narg, arg)
|
|||||||
// face = 6 inward-facing unit normals to prism faces
|
// face = 6 inward-facing unit normals to prism faces
|
||||||
// order = xy plane, xz plane, yz plane
|
// order = xy plane, xz plane, yz plane
|
||||||
|
|
||||||
cross(a,b,face[0]);
|
MathExtra::cross3(a,b,face[0]);
|
||||||
cross(b,a,face[1]);
|
MathExtra::cross3(b,a,face[1]);
|
||||||
cross(c,a,face[2]);
|
MathExtra::cross3(c,a,face[2]);
|
||||||
cross(a,c,face[3]);
|
MathExtra::cross3(a,c,face[3]);
|
||||||
cross(b,c,face[4]);
|
MathExtra::cross3(b,c,face[4]);
|
||||||
cross(c,b,face[5]);
|
MathExtra::cross3(c,b,face[5]);
|
||||||
|
|
||||||
for (int i = 0; i < 6; i++) normalize(face[i]);
|
// remap open face indices to be consistent
|
||||||
|
|
||||||
|
if (openflag) {
|
||||||
|
int temp[6];
|
||||||
|
for (int i = 0; i < 6; i++)
|
||||||
|
temp[i] = open_faces[i];
|
||||||
|
open_faces[0] = temp[4];
|
||||||
|
open_faces[1] = temp[5];
|
||||||
|
open_faces[2] = temp[2];
|
||||||
|
open_faces[3] = temp[3];
|
||||||
|
open_faces[4] = temp[0];
|
||||||
|
open_faces[5] = temp[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < 6; i++) MathExtra::norm3(face[i]);
|
||||||
|
|
||||||
// tri = 3 vertices (0-7) in each of 12 triangles on 6 faces
|
// tri = 3 vertices (0-7) in each of 12 triangles on 6 faces
|
||||||
// verts in each tri are ordered so that right-hand rule gives inward norm
|
// verts in each tri are ordered so that right-hand rule gives inward norm
|
||||||
@ -275,7 +293,8 @@ int RegPrism::surface_interior(double *x, double cutoff)
|
|||||||
|
|
||||||
int n = 0;
|
int n = 0;
|
||||||
|
|
||||||
for (int i = 0; i < 6; i++) {
|
for (i = 0; i < 6; i++) {
|
||||||
|
if (open_faces[i]) continue;
|
||||||
if (i % 2) corner = chi;
|
if (i % 2) corner = chi;
|
||||||
else corner = clo;
|
else corner = clo;
|
||||||
dot = (x[0]-corner[0])*face[i][0] + (x[1]-corner[1])*face[i][1] +
|
dot = (x[0]-corner[0])*face[i][0] + (x[1]-corner[1])*face[i][1] +
|
||||||
@ -285,6 +304,8 @@ int RegPrism::surface_interior(double *x, double cutoff)
|
|||||||
contact[n].delx = dot*face[i][0];
|
contact[n].delx = dot*face[i][0];
|
||||||
contact[n].dely = dot*face[i][1];
|
contact[n].dely = dot*face[i][1];
|
||||||
contact[n].delz = dot*face[i][2];
|
contact[n].delz = dot*face[i][2];
|
||||||
|
contact[n].radius = 0;
|
||||||
|
contact[n].iwall = i;
|
||||||
n++;
|
n++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -334,6 +355,8 @@ int RegPrism::surface_exterior(double *x, double cutoff)
|
|||||||
|
|
||||||
find_nearest(x,xp,yp,zp);
|
find_nearest(x,xp,yp,zp);
|
||||||
add_contact(0,x,xp,yp,zp);
|
add_contact(0,x,xp,yp,zp);
|
||||||
|
contact[0].radius = 0;
|
||||||
|
contact[0].iwall = 0;
|
||||||
if (contact[0].r < cutoff) return 1;
|
if (contact[0].r < cutoff) return 1;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -361,6 +384,7 @@ void RegPrism::find_nearest(double *x, double &xp, double &yp, double &zp)
|
|||||||
|
|
||||||
for (int itri = 0; itri < 12; itri++) {
|
for (int itri = 0; itri < 12; itri++) {
|
||||||
iface = itri/2;
|
iface = itri/2;
|
||||||
|
if (open_faces[iface]) continue;
|
||||||
i = tri[itri][0];
|
i = tri[itri][0];
|
||||||
j = tri[itri][1];
|
j = tri[itri][1];
|
||||||
k = tri[itri][2];
|
k = tri[itri][2];
|
||||||
@ -370,8 +394,9 @@ void RegPrism::find_nearest(double *x, double &xp, double &yp, double &zp)
|
|||||||
xproj[0] = x[0] - dot*face[iface][0];
|
xproj[0] = x[0] - dot*face[iface][0];
|
||||||
xproj[1] = x[1] - dot*face[iface][1];
|
xproj[1] = x[1] - dot*face[iface][1];
|
||||||
xproj[2] = x[2] - dot*face[iface][2];
|
xproj[2] = x[2] - dot*face[iface][2];
|
||||||
if (inside_tri(xproj,corners[i],corners[j],corners[k],face[iface]))
|
if (inside_tri(xproj,corners[i],corners[j],corners[k],face[iface])){
|
||||||
distsq = closest(x,xproj,nearest,distsq);
|
distsq = closest(x,xproj,nearest,distsq);
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
point_on_line_segment(corners[i],corners[j],xproj,xline);
|
point_on_line_segment(corners[i],corners[j],xproj,xline);
|
||||||
distsq = closest(x,xline,nearest,distsq);
|
distsq = closest(x,xline,nearest,distsq);
|
||||||
@ -401,57 +426,24 @@ int RegPrism::inside_tri(double *x, double *v1, double *v2, double *v3,
|
|||||||
{
|
{
|
||||||
double edge[3],pvec[3],xproduct[3];
|
double edge[3],pvec[3],xproduct[3];
|
||||||
|
|
||||||
subtract(v1,v2,edge);
|
MathExtra::sub3(v2,v1,edge);
|
||||||
subtract(v1,x,pvec);
|
MathExtra::sub3(x,v1,pvec);
|
||||||
cross(edge,pvec,xproduct);
|
MathExtra::cross3(edge,pvec,xproduct);
|
||||||
if (dotproduct(xproduct,norm) < 0.0) return 0;
|
if (MathExtra::dot3(xproduct,norm) < 0.0) return 0;
|
||||||
|
|
||||||
subtract(v2,v3,edge);
|
MathExtra::sub3(v3,v2,edge);
|
||||||
subtract(v2,x,pvec);
|
MathExtra::sub3(x,v2,pvec);
|
||||||
cross(edge,pvec,xproduct);
|
MathExtra::cross3(edge,pvec,xproduct);
|
||||||
if (dotproduct(xproduct,norm) < 0.0) return 0;
|
if (MathExtra::dot3(xproduct,norm) < 0.0) return 0;
|
||||||
|
|
||||||
subtract(v3,v1,edge);
|
MathExtra::sub3(v1,v3,edge);
|
||||||
subtract(v3,x,pvec);
|
MathExtra::sub3(x,v3,pvec);
|
||||||
cross(edge,pvec,xproduct);
|
MathExtra::cross3(edge,pvec,xproduct);
|
||||||
if (dotproduct(xproduct,norm) < 0.0) return 0;
|
if (MathExtra::dot3(xproduct,norm) < 0.0) return 0;
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
|
||||||
find nearest point to C on line segment A,B and return it as D
|
|
||||||
project (C-A) onto (B-A)
|
|
||||||
t = length of that projection, normalized by length of (B-A)
|
|
||||||
t <= 0, C is closest to A
|
|
||||||
t >= 1, C is closest to B
|
|
||||||
else closest point is between A and B
|
|
||||||
------------------------------------------------------------------------- */
|
|
||||||
|
|
||||||
void RegPrism::point_on_line_segment(double *a, double *b,
|
|
||||||
double *c, double *d)
|
|
||||||
{
|
|
||||||
double ba[3],ca[3];
|
|
||||||
|
|
||||||
subtract(a,b,ba);
|
|
||||||
subtract(a,c,ca);
|
|
||||||
double t = dotproduct(ca,ba) / dotproduct(ba,ba);
|
|
||||||
|
|
||||||
if (t <= 0.0) {
|
|
||||||
d[0] = a[0];
|
|
||||||
d[1] = a[1];
|
|
||||||
d[2] = a[2];
|
|
||||||
} else if (t >= 1.0) {
|
|
||||||
d[0] = b[0];
|
|
||||||
d[1] = b[1];
|
|
||||||
d[2] = b[2];
|
|
||||||
} else {
|
|
||||||
d[0] = a[0] + t*ba[0];
|
|
||||||
d[1] = a[1] + t*ba[1];
|
|
||||||
d[2] = a[2] + t*ba[2];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
double RegPrism::closest(double *x, double *near, double *nearest, double dsq)
|
double RegPrism::closest(double *x, double *near, double *nearest, double dsq)
|
||||||
@ -467,44 +459,3 @@ double RegPrism::closest(double *x, double *near, double *nearest, double dsq)
|
|||||||
nearest[2] = near[2];
|
nearest[2] = near[2];
|
||||||
return rsq;
|
return rsq;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
|
||||||
v3 = v2 - v1
|
|
||||||
------------------------------------------------------------------------- */
|
|
||||||
|
|
||||||
void RegPrism::subtract(double *v1, double *v2, double *v3)
|
|
||||||
{
|
|
||||||
v3[0] = v2[0] - v1[0];
|
|
||||||
v3[1] = v2[1] - v1[1];
|
|
||||||
v3[2] = v2[2] - v1[2];
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
|
||||||
v3 = v1 x v2
|
|
||||||
------------------------------------------------------------------------- */
|
|
||||||
|
|
||||||
void RegPrism::cross(double *v1, double *v2, double *v3)
|
|
||||||
{
|
|
||||||
v3[0] = v1[1]*v2[2] - v1[2]*v2[1];
|
|
||||||
v3[1] = v1[2]*v2[0] - v1[0]*v2[2];
|
|
||||||
v3[2] = v1[0]*v2[1] - v1[1]*v2[0];
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
|
||||||
return dotproduct = v1 dot v2
|
|
||||||
------------------------------------------------------------------------- */
|
|
||||||
|
|
||||||
double RegPrism::dotproduct(double *v1, double *v2)
|
|
||||||
{
|
|
||||||
return (v1[0]*v2[0] + v1[1]*v2[1] + v1[2]*v2[2]);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
|
||||||
|
|
||||||
void RegPrism::normalize(double *x)
|
|
||||||
{
|
|
||||||
double invlen = 1.0/sqrt(x[0]*x[0] + x[1]*x[1] + x[2]*x[2]);
|
|
||||||
x[0] *= invlen;
|
|
||||||
x[1] *= invlen;
|
|
||||||
x[2] *= invlen;
|
|
||||||
}
|
|
||||||
|
|||||||
@ -47,13 +47,7 @@ class RegPrism : public Region {
|
|||||||
|
|
||||||
void find_nearest(double *, double &, double &, double &);
|
void find_nearest(double *, double &, double &, double &);
|
||||||
int inside_tri(double *, double *, double *, double *, double *);
|
int inside_tri(double *, double *, double *, double *, double *);
|
||||||
void point_on_line_segment(double *, double *, double *, double *);
|
|
||||||
double closest(double *, double *, double *, double);
|
double closest(double *, double *, double *, double);
|
||||||
|
|
||||||
void subtract(double *, double *, double *);
|
|
||||||
void cross(double *, double *, double *);
|
|
||||||
double dotproduct(double *, double *);
|
|
||||||
void normalize(double *);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -70,6 +70,7 @@ RegSphere::RegSphere(LAMMPS *lmp, int narg, char **arg) :
|
|||||||
|
|
||||||
cmax = 1;
|
cmax = 1;
|
||||||
contact = new Contact[cmax];
|
contact = new Contact[cmax];
|
||||||
|
tmax = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
@ -125,6 +126,9 @@ int RegSphere::surface_interior(double *x, double cutoff)
|
|||||||
contact[0].delx = delx*(1.0-radius/r);
|
contact[0].delx = delx*(1.0-radius/r);
|
||||||
contact[0].dely = dely*(1.0-radius/r);
|
contact[0].dely = dely*(1.0-radius/r);
|
||||||
contact[0].delz = delz*(1.0-radius/r);
|
contact[0].delz = delz*(1.0-radius/r);
|
||||||
|
contact[0].radius = -radius;
|
||||||
|
contact[0].iwall = 0;
|
||||||
|
contact[0].varflag = 1;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
@ -150,6 +154,9 @@ int RegSphere::surface_exterior(double *x, double cutoff)
|
|||||||
contact[0].delx = delx*(1.0-radius/r);
|
contact[0].delx = delx*(1.0-radius/r);
|
||||||
contact[0].dely = dely*(1.0-radius/r);
|
contact[0].dely = dely*(1.0-radius/r);
|
||||||
contact[0].delz = delz*(1.0-radius/r);
|
contact[0].delz = delz*(1.0-radius/r);
|
||||||
|
contact[0].radius = radius;
|
||||||
|
contact[0].iwall = 0;
|
||||||
|
contact[0].varflag = 1;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
@ -178,3 +185,42 @@ void RegSphere::variable_check()
|
|||||||
if (!input->variable->equalstyle(rvar))
|
if (!input->variable->equalstyle(rvar))
|
||||||
error->all(FLERR,"Variable for region sphere is invalid style");
|
error->all(FLERR,"Variable for region sphere is invalid style");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
Set values needed to calculate velocity due to shape changes.
|
||||||
|
These values do not depend on the contact, so this function is
|
||||||
|
called once per timestep by fix/wall/gran/region.
|
||||||
|
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void RegSphere::set_velocity_shape()
|
||||||
|
{
|
||||||
|
xcenter[0] = xc;
|
||||||
|
xcenter[1] = yc;
|
||||||
|
xcenter[2] = zc;
|
||||||
|
forward_transform(xcenter[0], xcenter[1], xcenter[2]);
|
||||||
|
if (update->ntimestep > 0) rprev = prev[4];
|
||||||
|
else rprev = radius;
|
||||||
|
prev[4] = radius;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
add velocity due to shape change to wall velocity
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void RegSphere::velocity_contact_shape(double *vwall, double *xc)
|
||||||
|
{
|
||||||
|
double delx, dely, delz; // Displacement of contact point in x,y,z
|
||||||
|
|
||||||
|
delx = (xc[0] - xcenter[0])*(1 - rprev/radius);
|
||||||
|
dely = (xc[1] - xcenter[1])*(1 - rprev/radius);
|
||||||
|
delz = (xc[2] - xcenter[2])*(1 - rprev/radius);
|
||||||
|
|
||||||
|
vwall[0] += delx/update->dt;
|
||||||
|
vwall[1] += dely/update->dt;
|
||||||
|
vwall[2] += delz/update->dt;
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
@ -33,6 +33,9 @@ class RegSphere : public Region {
|
|||||||
int surface_interior(double *, double);
|
int surface_interior(double *, double);
|
||||||
int surface_exterior(double *, double);
|
int surface_exterior(double *, double);
|
||||||
void shape_update();
|
void shape_update();
|
||||||
|
void set_velocity_shape();
|
||||||
|
void velocity_contact_shape(double *, double *);
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
double xc,yc,zc;
|
double xc,yc,zc;
|
||||||
|
|||||||
@ -44,7 +44,7 @@ RegUnion::RegUnion(LAMMPS *lmp, int narg, char **arg) : Region(lmp, narg, arg)
|
|||||||
idsub[nregion] = new char[m];
|
idsub[nregion] = new char[m];
|
||||||
strcpy(idsub[nregion],arg[iarg+3]);
|
strcpy(idsub[nregion],arg[iarg+3]);
|
||||||
iregion = domain->find_region(idsub[nregion]);
|
iregion = domain->find_region(idsub[nregion]);
|
||||||
if (iregion == -1)
|
if (iregion == -1)
|
||||||
error->all(FLERR,"Region union region ID does not exist");
|
error->all(FLERR,"Region union region ID does not exist");
|
||||||
list[nregion++] = iregion;
|
list[nregion++] = iregion;
|
||||||
}
|
}
|
||||||
@ -55,6 +55,8 @@ RegUnion::RegUnion(LAMMPS *lmp, int narg, char **arg) : Region(lmp, narg, arg)
|
|||||||
for (int ilist = 0; ilist < nregion; ilist++) {
|
for (int ilist = 0; ilist < nregion; ilist++) {
|
||||||
if (regions[list[ilist]]->varshape) varshape = 1;
|
if (regions[list[ilist]]->varshape) varshape = 1;
|
||||||
if (regions[list[ilist]]->dynamic) dynamic = 1;
|
if (regions[list[ilist]]->dynamic) dynamic = 1;
|
||||||
|
if (regions[list[ilist]]->moveflag) moveflag = 1;
|
||||||
|
if (regions[list[ilist]]->rotateflag) rotateflag = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// extent of union of regions
|
// extent of union of regions
|
||||||
@ -80,11 +82,21 @@ RegUnion::RegUnion(LAMMPS *lmp, int narg, char **arg) : Region(lmp, narg, arg)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// possible contacts = sum of possible contacts in all sub-regions
|
// possible contacts = sum of possible contacts in all sub-regions
|
||||||
|
// for near contacts and touching contacts
|
||||||
|
|
||||||
cmax = 0;
|
cmax = 0;
|
||||||
for (int ilist = 0; ilist < nregion; ilist++)
|
size_restart = 0;
|
||||||
|
for (int ilist = 0; ilist < nregion; ilist++){
|
||||||
cmax += regions[list[ilist]]->cmax;
|
cmax += regions[list[ilist]]->cmax;
|
||||||
|
size_restart += regions[list[ilist]]->size_restart;
|
||||||
|
}
|
||||||
contact = new Contact[cmax];
|
contact = new Contact[cmax];
|
||||||
|
|
||||||
|
tmax = 0;
|
||||||
|
for (int ilist = 0; ilist < nregion; ilist++) {
|
||||||
|
if (interior) tmax += regions[list[ilist]]->tmax;
|
||||||
|
else tmax++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
@ -109,7 +121,7 @@ void RegUnion::init()
|
|||||||
int iregion;
|
int iregion;
|
||||||
for (int ilist = 0; ilist < nregion; ilist++) {
|
for (int ilist = 0; ilist < nregion; ilist++) {
|
||||||
iregion = domain->find_region(idsub[ilist]);
|
iregion = domain->find_region(idsub[ilist]);
|
||||||
if (iregion == -1)
|
if (iregion == -1)
|
||||||
error->all(FLERR,"Region union region ID does not exist");
|
error->all(FLERR,"Region union region ID does not exist");
|
||||||
list[ilist] = iregion;
|
list[ilist] = iregion;
|
||||||
}
|
}
|
||||||
@ -151,6 +163,7 @@ int RegUnion::surface_interior(double *x, double cutoff)
|
|||||||
Region **regions = domain->regions;
|
Region **regions = domain->regions;
|
||||||
int n = 0;
|
int n = 0;
|
||||||
|
|
||||||
|
int walloffset = 0 ;
|
||||||
for (ilist = 0; ilist < nregion; ilist++) {
|
for (ilist = 0; ilist < nregion; ilist++) {
|
||||||
iregion = list[ilist];
|
iregion = list[ilist];
|
||||||
ncontacts = regions[iregion]->surface(x[0],x[1],x[2],cutoff);
|
ncontacts = regions[iregion]->surface(x[0],x[1],x[2],cutoff);
|
||||||
@ -161,16 +174,23 @@ int RegUnion::surface_interior(double *x, double cutoff)
|
|||||||
for (jlist = 0; jlist < nregion; jlist++) {
|
for (jlist = 0; jlist < nregion; jlist++) {
|
||||||
if (jlist == ilist) continue;
|
if (jlist == ilist) continue;
|
||||||
jregion = list[jlist];
|
jregion = list[jlist];
|
||||||
if (regions[jregion]->match(xs,ys,zs)) break;
|
if (regions[jregion]->match(xs,ys,zs) &&
|
||||||
|
!regions[jregion]->openflag) break;
|
||||||
}
|
}
|
||||||
if (jlist == nregion) {
|
if (jlist == nregion) {
|
||||||
contact[n].r = regions[iregion]->contact[m].r;
|
contact[n].r = regions[iregion]->contact[m].r;
|
||||||
|
contact[n].radius = regions[iregion]->contact[m].radius;
|
||||||
contact[n].delx = regions[iregion]->contact[m].delx;
|
contact[n].delx = regions[iregion]->contact[m].delx;
|
||||||
contact[n].dely = regions[iregion]->contact[m].dely;
|
contact[n].dely = regions[iregion]->contact[m].dely;
|
||||||
contact[n].delz = regions[iregion]->contact[m].delz;
|
contact[n].delz = regions[iregion]->contact[m].delz;
|
||||||
|
contact[n].iwall = regions[iregion]->contact[m].iwall + walloffset;
|
||||||
|
contact[n].varflag = regions[iregion]->contact[m].varflag;
|
||||||
n++;
|
n++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// increment by cmax instead of tmax to insure
|
||||||
|
// possible wall IDs for sub-regions are non overlapping
|
||||||
|
walloffset += regions[iregion]->cmax;
|
||||||
}
|
}
|
||||||
|
|
||||||
return n;
|
return n;
|
||||||
@ -210,9 +230,12 @@ int RegUnion::surface_exterior(double *x, double cutoff)
|
|||||||
}
|
}
|
||||||
if (jlist == nregion) {
|
if (jlist == nregion) {
|
||||||
contact[n].r = regions[iregion]->contact[m].r;
|
contact[n].r = regions[iregion]->contact[m].r;
|
||||||
|
contact[n].radius = regions[iregion]->contact[m].radius;
|
||||||
contact[n].delx = regions[iregion]->contact[m].delx;
|
contact[n].delx = regions[iregion]->contact[m].delx;
|
||||||
contact[n].dely = regions[iregion]->contact[m].dely;
|
contact[n].dely = regions[iregion]->contact[m].dely;
|
||||||
contact[n].delz = regions[iregion]->contact[m].delz;
|
contact[n].delz = regions[iregion]->contact[m].delz;
|
||||||
|
contact[n].iwall = ilist;
|
||||||
|
contact[n].r = regions[iregion]->contact[m].varflag;
|
||||||
n++;
|
n++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -245,3 +268,46 @@ void RegUnion::pretransform()
|
|||||||
for (int ilist = 0; ilist < nregion; ilist++)
|
for (int ilist = 0; ilist < nregion; ilist++)
|
||||||
regions[list[ilist]]->pretransform();
|
regions[list[ilist]]->pretransform();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
get translational/angular velocities of all subregions
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void RegUnion::set_velocity()
|
||||||
|
{
|
||||||
|
Region **regions = domain->regions;
|
||||||
|
for (int ilist = 0; ilist < nregion; ilist++)
|
||||||
|
regions[list[ilist]]->set_velocity();
|
||||||
|
}
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
region writes its current position/angle
|
||||||
|
needed by fix/wall/gran/region to compute velocity by differencing scheme
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void RegUnion::write_restart(FILE *fp)
|
||||||
|
{
|
||||||
|
for (int ilist = 0; ilist < nregion; ilist++)
|
||||||
|
domain->regions[list[ilist]]->write_restart(fp);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
region reads its previous position/angle
|
||||||
|
needed by fix/wall/gran/region to compute velocity by differencing scheme
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
int RegUnion::restart(char *buf, int n)
|
||||||
|
{
|
||||||
|
for (int ilist = 0; ilist < nregion; ilist++)
|
||||||
|
n = domain->regions[list[ilist]]->restart(buf, n);
|
||||||
|
return n;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
set prev vector to zero
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void RegUnion::reset_vel()
|
||||||
|
{
|
||||||
|
for (int ilist = 0; ilist < nregion; ilist++)
|
||||||
|
domain->regions[list[ilist]]->reset_vel();
|
||||||
|
}
|
||||||
|
|||||||
@ -34,10 +34,12 @@ class RegUnion : public Region {
|
|||||||
int surface_exterior(double *, double);
|
int surface_exterior(double *, double);
|
||||||
void shape_update();
|
void shape_update();
|
||||||
void pretransform();
|
void pretransform();
|
||||||
|
void set_velocity();
|
||||||
|
void write_restart(FILE *);
|
||||||
|
int restart(char *, int);
|
||||||
|
void reset_vel();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
int nregion;
|
|
||||||
int *list;
|
|
||||||
char **idsub;
|
char **idsub;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -23,6 +23,7 @@
|
|||||||
#include "accelerator_kokkos.h"
|
#include "accelerator_kokkos.h"
|
||||||
#include "memory.h"
|
#include "memory.h"
|
||||||
#include "error.h"
|
#include "error.h"
|
||||||
|
#include "atom_masks.h"
|
||||||
|
|
||||||
using namespace LAMMPS_NS;
|
using namespace LAMMPS_NS;
|
||||||
|
|
||||||
@ -588,8 +589,12 @@ void Special::combine()
|
|||||||
|
|
||||||
if (lmp->kokkos) {
|
if (lmp->kokkos) {
|
||||||
AtomKokkos* atomKK = (AtomKokkos*) atom;
|
AtomKokkos* atomKK = (AtomKokkos*) atom;
|
||||||
|
atomKK->modified(Host,SPECIAL_MASK);
|
||||||
|
atomKK->sync(Device,SPECIAL_MASK);
|
||||||
memory->grow_kokkos(atomKK->k_special,atom->special,
|
memory->grow_kokkos(atomKK->k_special,atom->special,
|
||||||
atom->nmax,atom->maxspecial,"atom:special");
|
atom->nmax,atom->maxspecial,"atom:special");
|
||||||
|
atomKK->modified(Device,SPECIAL_MASK);
|
||||||
|
atomKK->sync(Host,SPECIAL_MASK);
|
||||||
} else {
|
} else {
|
||||||
memory->destroy(atom->special);
|
memory->destroy(atom->special);
|
||||||
memory->create(atom->special,atom->nmax,atom->maxspecial,"atom:special");
|
memory->create(atom->special,atom->nmax,atom->maxspecial,"atom:special");
|
||||||
|
|||||||
@ -1 +1 @@
|
|||||||
#define LAMMPS_VERSION "5 Oct 2016"
|
#define LAMMPS_VERSION "6 Oct 2016"
|
||||||
|
|||||||
Reference in New Issue
Block a user