Merge pull request #510 from akohlmey/collected-small-changes
Collected small changes
This commit is contained in:
Binary file not shown.
|
Before Width: | Height: | Size: 15 KiB |
@ -1,11 +0,0 @@
|
|||||||
\documentclass[12pt]{article}
|
|
||||||
|
|
||||||
\begin{document}
|
|
||||||
|
|
||||||
\begin{eqnarray*}
|
|
||||||
F & = & F_{\mathrm{LJ}}(r) - F_{\mathrm{LJ}}(r_{\mathrm{c}}) \qquad r < r_{\mathrm{c}} \\
|
|
||||||
E & = & E_{\mathrm{LJ}}(r) - E_{\mathrm{LJ}}(r_{\mathrm{c}}) + (r - r_{\mathrm{c}}) F_{\mathrm{LJ}}(r_{\mathrm{c}}) \qquad r < r_{\mathrm{c}} \\
|
|
||||||
\mathrm{with} \qquad E_{\mathrm{LJ}}(r) & = & 4 \epsilon \left[ \left(\frac{\sigma}{r}\right)^{12} - \left(\frac{\sigma}{r}\right)^6 \right] \qquad \mathrm{and} \qquad F_{\mathrm{LJ}}(r) = - E^\prime_{\mathrm{LJ}}(r)
|
|
||||||
\end{eqnarray*}
|
|
||||||
|
|
||||||
\end{document}
|
|
||||||
@ -1039,7 +1039,6 @@ package"_Section_start.html#start_3.
|
|||||||
"lj/sdk (gko)"_pair_sdk.html,
|
"lj/sdk (gko)"_pair_sdk.html,
|
||||||
"lj/sdk/coul/long (go)"_pair_sdk.html,
|
"lj/sdk/coul/long (go)"_pair_sdk.html,
|
||||||
"lj/sdk/coul/msm (o)"_pair_sdk.html,
|
"lj/sdk/coul/msm (o)"_pair_sdk.html,
|
||||||
"lj/sf (o)"_pair_lj_sf.html,
|
|
||||||
"meam/spline (o)"_pair_meam_spline.html,
|
"meam/spline (o)"_pair_meam_spline.html,
|
||||||
"meam/sw/spline"_pair_meam_sw_spline.html,
|
"meam/sw/spline"_pair_meam_sw_spline.html,
|
||||||
"mgpt"_pair_mgpt.html,
|
"mgpt"_pair_mgpt.html,
|
||||||
|
|||||||
@ -2027,8 +2027,8 @@ algorithm to formulate single-particle constraint functions
|
|||||||
g(xi,yi,zi) = 0 and their derivative (i.e. the normal of the manifold)
|
g(xi,yi,zi) = 0 and their derivative (i.e. the normal of the manifold)
|
||||||
n = grad(g).
|
n = grad(g).
|
||||||
|
|
||||||
[Author:] Stefan Paquay (Eindhoven University of Technology (TU/e), The
|
[Author:] Stefan Paquay (until 2017: Eindhoven University of Technology (TU/e), The
|
||||||
Netherlands)
|
Netherlands; since 2017: Brandeis University, Waltham, MA, USA)
|
||||||
|
|
||||||
[Install or un-install:]
|
[Install or un-install:]
|
||||||
|
|
||||||
|
|||||||
@ -47,7 +47,7 @@ keyword = {scale} or {reset} :l
|
|||||||
fix 1 all adapt 1 pair soft a 1 1 v_prefactor
|
fix 1 all adapt 1 pair soft a 1 1 v_prefactor
|
||||||
fix 1 all adapt 1 pair soft a 2* 3 v_prefactor
|
fix 1 all adapt 1 pair soft a 2* 3 v_prefactor
|
||||||
fix 1 all adapt 1 pair lj/cut epsilon * * v_scale1 coul/cut scale 3 3 v_scale2 scale yes reset yes
|
fix 1 all adapt 1 pair lj/cut epsilon * * v_scale1 coul/cut scale 3 3 v_scale2 scale yes reset yes
|
||||||
fix 1 all adapt 10 atom diameter v_size
|
fix 1 all adapt 10 atom diameter v_size :pre
|
||||||
|
|
||||||
variable ramp_up equal "ramp(0.01,0.5)"
|
variable ramp_up equal "ramp(0.01,0.5)"
|
||||||
fix stretch all adapt 1 bond harmonic r0 1 v_ramp_up :pre
|
fix stretch all adapt 1 bond harmonic r0 1 v_ramp_up :pre
|
||||||
|
|||||||
@ -565,8 +565,10 @@ more instructions on how to use the accelerated styles effectively.
|
|||||||
|
|
||||||
[Restart, fix_modify, output, run start/stop, minimize info:]
|
[Restart, fix_modify, output, run start/stop, minimize info:]
|
||||||
|
|
||||||
No information about this fix is written to "binary restart
|
This fix will restore the initial box settings from "binary restart
|
||||||
files"_restart.html. None of the "fix_modify"_fix_modify.html options
|
files"_restart.html, which allows the fix to be properly continue
|
||||||
|
deformation, when using the start/stop options of the "run"_run.html
|
||||||
|
command. None of the "fix_modify"_fix_modify.html options
|
||||||
are relevant to this fix. No global or per-atom quantities are stored
|
are relevant to this fix. No global or per-atom quantities are stored
|
||||||
by this fix for access by various "output
|
by this fix for access by various "output
|
||||||
commands"_Section_howto.html#howto_15.
|
commands"_Section_howto.html#howto_15.
|
||||||
|
|||||||
@ -447,7 +447,6 @@ pair_lj96.html
|
|||||||
pair_lj_cubic.html
|
pair_lj_cubic.html
|
||||||
pair_lj_expand.html
|
pair_lj_expand.html
|
||||||
pair_lj_long.html
|
pair_lj_long.html
|
||||||
pair_lj_sf.html
|
|
||||||
pair_lj_smooth.html
|
pair_lj_smooth.html
|
||||||
pair_lj_smooth_linear.html
|
pair_lj_smooth_linear.html
|
||||||
pair_lj_soft.html
|
pair_lj_soft.html
|
||||||
|
|||||||
@ -1,114 +0,0 @@
|
|||||||
"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
|
|
||||||
|
|
||||||
pair_style lj/sf command :h3
|
|
||||||
pair_style lj/sf/omp command :h3
|
|
||||||
|
|
||||||
[Syntax:]
|
|
||||||
|
|
||||||
pair_style lj/sf cutoff :pre
|
|
||||||
|
|
||||||
cutoff = global cutoff for Lennard-Jones interactions (distance units) :ul
|
|
||||||
|
|
||||||
[Examples:]
|
|
||||||
|
|
||||||
pair_style lj/sf 2.5
|
|
||||||
pair_coeff * * 1.0 1.0
|
|
||||||
pair_coeff 1 1 1.0 1.0 3.0 :pre
|
|
||||||
|
|
||||||
[Description:]
|
|
||||||
|
|
||||||
Style {lj/sf} computes a truncated and force-shifted LJ interaction
|
|
||||||
(Shifted Force Lennard-Jones), so that both the potential and the
|
|
||||||
force go continuously to zero at the cutoff "(Toxvaerd)"_#Toxvaerd:
|
|
||||||
|
|
||||||
:c,image(Eqs/pair_lj_sf.jpg)
|
|
||||||
|
|
||||||
The following coefficients must be defined for each pair of atoms
|
|
||||||
types via the "pair_coeff"_pair_coeff.html command as in the examples
|
|
||||||
above, or in the data file or restart files read by the
|
|
||||||
"read_data"_read_data.html or "read_restart"_read_restart.html
|
|
||||||
commands, or by mixing as described below:
|
|
||||||
|
|
||||||
epsilon (energy units)
|
|
||||||
sigma (distance units)
|
|
||||||
cutoff (distance units) :ul
|
|
||||||
|
|
||||||
The last coefficient is optional. If not specified, the global
|
|
||||||
LJ cutoff specified in the pair_style command is used.
|
|
||||||
|
|
||||||
:line
|
|
||||||
|
|
||||||
Styles with a {gpu}, {intel}, {kk}, {omp}, or {opt} suffix are
|
|
||||||
functionally the same as the corresponding style without the suffix.
|
|
||||||
They have been optimized to run faster, depending on your available
|
|
||||||
hardware, as discussed in "Section 5"_Section_accelerate.html
|
|
||||||
of the manual. The accelerated styles take the same arguments and
|
|
||||||
should produce the same results, except for round-off and precision
|
|
||||||
issues.
|
|
||||||
|
|
||||||
These accelerated styles are part of the GPU, USER-INTEL, KOKKOS,
|
|
||||||
USER-OMP and OPT packages, respectively. They are only enabled if
|
|
||||||
LAMMPS was built with those packages. See the "Making
|
|
||||||
LAMMPS"_Section_start.html#start_3 section for more info.
|
|
||||||
|
|
||||||
You can specify the accelerated styles explicitly in your input script
|
|
||||||
by including their suffix, or you can use the "-suffix command-line
|
|
||||||
switch"_Section_start.html#start_7 when you invoke LAMMPS, or you can
|
|
||||||
use the "suffix"_suffix.html command in your input script.
|
|
||||||
|
|
||||||
See "Section 5"_Section_accelerate.html of the manual for
|
|
||||||
more instructions on how to use the accelerated styles effectively.
|
|
||||||
|
|
||||||
:line
|
|
||||||
|
|
||||||
[Mixing, shift, table, tail correction, restart, rRESPA info]:
|
|
||||||
|
|
||||||
For atom type pairs I,J and I != J, the epsilon and sigma
|
|
||||||
coefficients and cutoff distance for this pair style can be mixed.
|
|
||||||
Rin is a cutoff value and is mixed like the cutoff. The
|
|
||||||
default mix value is {geometric}. See the "pair_modify" command for
|
|
||||||
details.
|
|
||||||
|
|
||||||
The "pair_modify"_pair_modify.html shift option is not relevant for
|
|
||||||
this pair style, since the pair interaction goes to 0.0 at the cutoff.
|
|
||||||
|
|
||||||
The "pair_modify"_pair_modify.html table option is not relevant
|
|
||||||
for this pair style.
|
|
||||||
|
|
||||||
This pair style does not support the "pair_modify"_pair_modify.html
|
|
||||||
tail option for adding long-range tail corrections to energy and
|
|
||||||
pressure, since the energy of the pair interaction is smoothed to 0.0
|
|
||||||
at the cutoff.
|
|
||||||
|
|
||||||
This pair style writes its information to "binary restart
|
|
||||||
files"_restart.html, so pair_style and pair_coeff commands do not need
|
|
||||||
to be specified in an input script that reads a restart file.
|
|
||||||
|
|
||||||
This pair style can only be used via the {pair} keyword of the
|
|
||||||
"run_style respa"_run_style.html command. It does not support the
|
|
||||||
{inner}, {middle}, {outer} keywords.
|
|
||||||
|
|
||||||
:line
|
|
||||||
|
|
||||||
[Restrictions:]
|
|
||||||
|
|
||||||
This pair style is part of the USER-MISC 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:]
|
|
||||||
|
|
||||||
"pair_coeff"_pair_coeff.html
|
|
||||||
|
|
||||||
[Default:] none
|
|
||||||
|
|
||||||
:line
|
|
||||||
|
|
||||||
:link(Toxvaerd)
|
|
||||||
[(Toxvaerd)] Toxvaerd, Dyre, J Chem Phys, 134, 081102 (2011).
|
|
||||||
@ -11,26 +11,26 @@ pair_style lj/smooth/linear/omp command :h3
|
|||||||
|
|
||||||
[Syntax:]
|
[Syntax:]
|
||||||
|
|
||||||
pair_style lj/smooth/linear Rc :pre
|
pair_style lj/smooth/linear cutoff :pre
|
||||||
|
|
||||||
Rc = cutoff for lj/smooth/linear interactions (distance units) :ul
|
cutoff = global cutoff for Lennard-Jones interactions (distance units) :ul
|
||||||
|
|
||||||
[Examples:]
|
[Examples:]
|
||||||
|
|
||||||
pair_style lj/smooth/linear 5.456108274435118
|
pair_style lj/smooth/linear 2.5
|
||||||
pair_coeff * * 0.7242785984051078 2.598146797350056
|
pair_coeff * * 1.0 1.0
|
||||||
pair_coeff 1 1 20.0 1.3 9.0 :pre
|
pair_coeff 1 1 0.3 3.0 9.0 :pre
|
||||||
|
|
||||||
[Description:]
|
[Description:]
|
||||||
|
|
||||||
Style {lj/smooth/linear} computes a LJ interaction that combines the
|
Style {lj/smooth/linear} computes a truncated and force-shifted LJ
|
||||||
standard 12/6 Lennard-Jones function and subtracts a linear term that
|
interaction (aka Shifted Force Lennard-Jones) that combines the
|
||||||
includes the cutoff distance Rc, as in this formula:
|
standard 12/6 Lennard-Jones function and subtracts a linear term based
|
||||||
|
on the cutoff distance, so that both, the potential and the force, go
|
||||||
|
continuously to zero at the cutoff Rc "(Toxvaerd)"_#Toxvaerd:
|
||||||
|
|
||||||
:c,image(Eqs/pair_lj_smooth_linear.jpg)
|
:c,image(Eqs/pair_lj_smooth_linear.jpg)
|
||||||
|
|
||||||
At the cutoff Rc, the energy and force (its 1st derivative) will be 0.0.
|
|
||||||
|
|
||||||
The following coefficients must be defined for each pair of atoms
|
The following coefficients must be defined for each pair of atoms
|
||||||
types via the "pair_coeff"_pair_coeff.html command as in the examples
|
types via the "pair_coeff"_pair_coeff.html command as in the examples
|
||||||
above, or in the data file or restart files read by the
|
above, or in the data file or restart files read by the
|
||||||
@ -41,8 +41,8 @@ epsilon (energy units)
|
|||||||
sigma (distance units)
|
sigma (distance units)
|
||||||
cutoff (distance units) :ul
|
cutoff (distance units) :ul
|
||||||
|
|
||||||
The last coefficient is optional. If not specified, the global value
|
The last coefficient is optional. If not specified, the global
|
||||||
for Rc is used.
|
LJ cutoff specified in the pair_style command is used.
|
||||||
|
|
||||||
:line
|
:line
|
||||||
|
|
||||||
@ -76,10 +76,11 @@ and cutoff distance can be mixed. The default mix value is geometric.
|
|||||||
See the "pair_modify" command for details.
|
See the "pair_modify" command for details.
|
||||||
|
|
||||||
This pair style does not support the "pair_modify"_pair_modify.html
|
This pair style does not support the "pair_modify"_pair_modify.html
|
||||||
shift option for the energy of the pair interaction.
|
shift option for the energy of the pair interaction, since it goes
|
||||||
|
to 0.0 at the cutoff by construction.
|
||||||
|
|
||||||
The "pair_modify"_pair_modify.html table option is not relevant for
|
The "pair_modify"_pair_modify.html table option is not relevant
|
||||||
this pair style.
|
for this pair style.
|
||||||
|
|
||||||
This pair style does not support the "pair_modify"_pair_modify.html
|
This pair style does not support the "pair_modify"_pair_modify.html
|
||||||
tail option for adding long-range tail corrections to energy and
|
tail option for adding long-range tail corrections to energy and
|
||||||
|
|||||||
@ -49,7 +49,6 @@ Pair Styles :h1
|
|||||||
pair_lj_cubic
|
pair_lj_cubic
|
||||||
pair_lj_expand
|
pair_lj_expand
|
||||||
pair_lj_long
|
pair_lj_long
|
||||||
pair_lj_sf
|
|
||||||
pair_lj_smooth
|
pair_lj_smooth
|
||||||
pair_lj_smooth_linear
|
pair_lj_smooth_linear
|
||||||
pair_lj_soft
|
pair_lj_soft
|
||||||
|
|||||||
@ -80,6 +80,7 @@ keyword = {type} or {type/fraction} or {mol} or {x} or {y} or {z} or \
|
|||||||
value can be an atom-style variable (see below)
|
value can be an atom-style variable (see below)
|
||||||
{image} nx ny nz
|
{image} nx ny nz
|
||||||
nx,ny,nz = which periodic image of the simulation box the atom is in
|
nx,ny,nz = which periodic image of the simulation box the atom is in
|
||||||
|
any of nx,ny,nz can be an atom-style variable (see below)
|
||||||
{bond} value = bond type for all bonds between selected atoms
|
{bond} value = bond type for all bonds between selected atoms
|
||||||
{angle} value = angle type for all angles between selected atoms
|
{angle} value = angle type for all angles between selected atoms
|
||||||
{dihedral} value = dihedral type for all dihedrals between selected atoms
|
{dihedral} value = dihedral type for all dihedrals between selected atoms
|
||||||
@ -363,9 +364,8 @@ A value of -1 means subtract 1 box length to get the true value.
|
|||||||
LAMMPS updates these flags as atoms cross periodic boundaries during
|
LAMMPS updates these flags as atoms cross periodic boundaries during
|
||||||
the simulation. The flags can be output with atom snapshots via the
|
the simulation. The flags can be output with atom snapshots via the
|
||||||
"dump"_dump.html command. If a value of NULL is specified for any of
|
"dump"_dump.html command. If a value of NULL is specified for any of
|
||||||
nx,ny,nz, then the current image value for that dimension is
|
nx,ny,nz, then the current image value for that dimension is unchanged.
|
||||||
unchanged. For non-periodic dimensions only a value of 0 can be
|
For non-periodic dimensions only a value of 0 can be specified.
|
||||||
specified. This keyword does not allow use of atom-style variables.
|
|
||||||
This command can be useful after a system has been equilibrated and
|
This command can be useful after a system has been equilibrated and
|
||||||
atoms have diffused one or more box lengths in various directions.
|
atoms have diffused one or more box lengths in various directions.
|
||||||
This command can then reset the image values for atoms so that they
|
This command can then reset the image values for atoms so that they
|
||||||
|
|||||||
@ -65,7 +65,13 @@ sense to define permanent bonds between atoms that interact via these
|
|||||||
potentials, though such bonds may exist elsewhere in your system,
|
potentials, though such bonds may exist elsewhere in your system,
|
||||||
e.g. when using the "pair_style hybrid"_pair_hybrid.html command.
|
e.g. when using the "pair_style hybrid"_pair_hybrid.html command.
|
||||||
Thus LAMMPS ignores special_bonds settings when manybody potentials
|
Thus LAMMPS ignores special_bonds settings when manybody potentials
|
||||||
are calculated.
|
are calculated. Please note, that the existence of explicit bonds
|
||||||
|
for atoms that are described by a manybody potential will alter the
|
||||||
|
neigborlist and thus can render the computation of those interactions
|
||||||
|
invalid, since those pairs are not only used to determine direct
|
||||||
|
pairwise interactions but also neighbors of neighbors and more.
|
||||||
|
The recommended course of action is to remove such bonds, or - if
|
||||||
|
that is not possible - use a special bonds setting of 1.0 1.0 1.0.
|
||||||
|
|
||||||
NOTE: Unlike some commands in LAMMPS, you cannot use this command
|
NOTE: Unlike some commands in LAMMPS, you cannot use this command
|
||||||
multiple times in an incremental fashion: e.g. to first set the LJ
|
multiple times in an incremental fashion: e.g. to first set the LJ
|
||||||
|
|||||||
@ -98,13 +98,14 @@ c Complete the calculation of density
|
|||||||
call G_gam(Gamma(i),ibar_meam(elti),
|
call G_gam(Gamma(i),ibar_meam(elti),
|
||||||
$ gsmooth_factor,G,errorflag)
|
$ gsmooth_factor,G,errorflag)
|
||||||
if (errorflag.ne.0) return
|
if (errorflag.ne.0) return
|
||||||
|
call get_shpfcn(shp,lattce_meam(elti,elti))
|
||||||
if (ibar_meam(elti).le.0) then
|
if (ibar_meam(elti).le.0) then
|
||||||
Gbar = 1.d0
|
Gbar = 1.d0
|
||||||
|
dGbar = 0.d0
|
||||||
else
|
else
|
||||||
call get_shpfcn(shp,lattce_meam(elti,elti))
|
|
||||||
if (mix_ref_t.eq.1) then
|
if (mix_ref_t.eq.1) then
|
||||||
gam = (t_ave(1,i)*shpi(1)+t_ave(2,i)*shpi(2)
|
gam = (t_ave(1,i)*shp(1)+t_ave(2,i)*shp(2)
|
||||||
$ +t_ave(3,i)*shpi(3))/(Z*Z)
|
$ +t_ave(3,i)*shp(3))/(Z*Z)
|
||||||
else
|
else
|
||||||
gam = (t1_meam(elti)*shp(1)+t2_meam(elti)*shp(2)
|
gam = (t1_meam(elti)*shp(1)+t2_meam(elti)*shp(2)
|
||||||
$ +t3_meam(elti)*shp(3))/(Z*Z)
|
$ +t3_meam(elti)*shp(3))/(Z*Z)
|
||||||
@ -119,9 +120,8 @@ c Complete the calculation of density
|
|||||||
Gbar = 1.d0
|
Gbar = 1.d0
|
||||||
dGbar = 0.d0
|
dGbar = 0.d0
|
||||||
else
|
else
|
||||||
call get_shpfcn(shpi,lattce_meam(elti,elti))
|
gam = (t_ave(1,i)*shp(1)+t_ave(2,i)*shp(2)
|
||||||
gam = (t_ave(1,i)*shpi(1)+t_ave(2,i)*shpi(2)
|
$ +t_ave(3,i)*shp(3))/(Z*Z)
|
||||||
$ +t_ave(3,i)*shpi(3))/(Z*Z)
|
|
||||||
call dG_gam(gam,ibar_meam(elti),gsmooth_factor,
|
call dG_gam(gam,ibar_meam(elti),gsmooth_factor,
|
||||||
$ Gbar,dGbar)
|
$ Gbar,dGbar)
|
||||||
endif
|
endif
|
||||||
|
|||||||
2
src/.gitignore
vendored
2
src/.gitignore
vendored
@ -740,8 +740,6 @@
|
|||||||
/pair_lj_sdk_coul_long.h
|
/pair_lj_sdk_coul_long.h
|
||||||
/pair_lj_sdk_coul_msm.cpp
|
/pair_lj_sdk_coul_msm.cpp
|
||||||
/pair_lj_sdk_coul_msm.h
|
/pair_lj_sdk_coul_msm.h
|
||||||
/pair_lj_sf.cpp
|
|
||||||
/pair_lj_sf.h
|
|
||||||
/pair_lj_sf_dipole_sf.cpp
|
/pair_lj_sf_dipole_sf.cpp
|
||||||
/pair_lj_sf_dipole_sf.h
|
/pair_lj_sf_dipole_sf.h
|
||||||
/pair_lubricateU.cpp
|
/pair_lubricateU.cpp
|
||||||
|
|||||||
@ -287,12 +287,12 @@ int NeighborKokkosExecute<DeviceType>::exclusion(const int &i,const int &j,
|
|||||||
|
|
||||||
if (nex_mol) {
|
if (nex_mol) {
|
||||||
for (m = 0; m < nex_mol; m++)
|
for (m = 0; m < nex_mol; m++)
|
||||||
if (ex_mol_intra[m]) { // intra-chain: exclude i-j pair if on same molecule
|
if (ex_mol_intra[m]) { // intra-chain: exclude i-j pair if on same molecule
|
||||||
if (mask[i] & ex_mol_bit[m] && mask[j] & ex_mol_bit[m] &&
|
if (mask[i] & ex_mol_bit[m] && mask[j] & ex_mol_bit[m] &&
|
||||||
molecule[i] == molecule[j]) return 1;
|
molecule[i] == molecule[j]) return 1;
|
||||||
} else // exclude i-j pair if on different molecules
|
} else // exclude i-j pair if on different molecules
|
||||||
if (mask[i] & ex_mol_bit[m] && mask[j] & ex_mol_bit[m] &&
|
if (mask[i] & ex_mol_bit[m] && mask[j] & ex_mol_bit[m] &&
|
||||||
molecule[i] != molecule[j]) return 1;
|
molecule[i] != molecule[j]) return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
@ -385,7 +385,7 @@ struct NPairKokkosBuildFunctor {
|
|||||||
}
|
}
|
||||||
#ifdef KOKKOS_HAVE_CUDA
|
#ifdef KOKKOS_HAVE_CUDA
|
||||||
__device__ inline
|
__device__ inline
|
||||||
|
|
||||||
void operator() (typename Kokkos::TeamPolicy<DeviceType>::member_type dev) const {
|
void operator() (typename Kokkos::TeamPolicy<DeviceType>::member_type dev) const {
|
||||||
c.template build_ItemCuda<HALF_NEIGH,GHOST_NEWTON,TRI>(dev);
|
c.template build_ItemCuda<HALF_NEIGH,GHOST_NEWTON,TRI>(dev);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -501,7 +501,7 @@ void FixGCMC::init()
|
|||||||
if (ifix < 0) error->all(FLERR,"Fix gcmc rigid fix does not exist");
|
if (ifix < 0) error->all(FLERR,"Fix gcmc rigid fix does not exist");
|
||||||
fixrigid = modify->fix[ifix];
|
fixrigid = modify->fix[ifix];
|
||||||
int tmp;
|
int tmp;
|
||||||
if (onemols != (Molecule **) fixrigid->extract("onemol",tmp))
|
if (&onemols[imol] != (Molecule **) fixrigid->extract("onemol",tmp))
|
||||||
error->all(FLERR,
|
error->all(FLERR,
|
||||||
"Fix gcmc and fix rigid/small not using "
|
"Fix gcmc and fix rigid/small not using "
|
||||||
"same molecule template ID");
|
"same molecule template ID");
|
||||||
@ -516,7 +516,7 @@ void FixGCMC::init()
|
|||||||
if (ifix < 0) error->all(FLERR,"Fix gcmc shake fix does not exist");
|
if (ifix < 0) error->all(FLERR,"Fix gcmc shake fix does not exist");
|
||||||
fixshake = modify->fix[ifix];
|
fixshake = modify->fix[ifix];
|
||||||
int tmp;
|
int tmp;
|
||||||
if (onemols != (Molecule **) fixshake->extract("onemol",tmp))
|
if (&onemols[imol] != (Molecule **) fixshake->extract("onemol",tmp))
|
||||||
error->all(FLERR,"Fix gcmc and fix shake not using "
|
error->all(FLERR,"Fix gcmc and fix shake not using "
|
||||||
"same molecule template ID");
|
"same molecule template ID");
|
||||||
}
|
}
|
||||||
@ -1397,12 +1397,13 @@ void FixGCMC::attempt_molecule_insertion()
|
|||||||
|
|
||||||
// FixRigidSmall::set_molecule stores rigid body attributes
|
// FixRigidSmall::set_molecule stores rigid body attributes
|
||||||
// FixShake::set_molecule stores shake info for molecule
|
// FixShake::set_molecule stores shake info for molecule
|
||||||
|
|
||||||
if (rigidflag)
|
|
||||||
fixrigid->set_molecule(nlocalprev,maxtag_all,imol,com_coord,vnew,quat);
|
|
||||||
else if (shakeflag)
|
|
||||||
fixshake->set_molecule(nlocalprev,maxtag_all,imol,com_coord,vnew,quat);
|
|
||||||
|
|
||||||
|
for (int submol = 0; submol < nmol; ++submol) {
|
||||||
|
if (rigidflag)
|
||||||
|
fixrigid->set_molecule(nlocalprev,maxtag_all,submol,com_coord,vnew,quat);
|
||||||
|
else if (shakeflag)
|
||||||
|
fixshake->set_molecule(nlocalprev,maxtag_all,submol,com_coord,vnew,quat);
|
||||||
|
}
|
||||||
atom->natoms += natoms_per_molecule;
|
atom->natoms += natoms_per_molecule;
|
||||||
if (atom->natoms < 0)
|
if (atom->natoms < 0)
|
||||||
error->all(FLERR,"Too many total atoms");
|
error->all(FLERR,"Too many total atoms");
|
||||||
@ -2058,11 +2059,12 @@ void FixGCMC::attempt_molecule_insertion_full()
|
|||||||
// FixRigidSmall::set_molecule stores rigid body attributes
|
// FixRigidSmall::set_molecule stores rigid body attributes
|
||||||
// FixShake::set_molecule stores shake info for molecule
|
// FixShake::set_molecule stores shake info for molecule
|
||||||
|
|
||||||
if (rigidflag)
|
for (int submol = 0; submol < nmol; ++submol) {
|
||||||
fixrigid->set_molecule(nlocalprev,maxtag_all,imol,com_coord,vnew,quat);
|
if (rigidflag)
|
||||||
else if (shakeflag)
|
fixrigid->set_molecule(nlocalprev,maxtag_all,submol,com_coord,vnew,quat);
|
||||||
fixshake->set_molecule(nlocalprev,maxtag_all,imol,com_coord,vnew,quat);
|
else if (shakeflag)
|
||||||
|
fixshake->set_molecule(nlocalprev,maxtag_all,submol,com_coord,vnew,quat);
|
||||||
|
}
|
||||||
atom->natoms += natoms_per_molecule;
|
atom->natoms += natoms_per_molecule;
|
||||||
if (atom->natoms < 0)
|
if (atom->natoms < 0)
|
||||||
error->all(FLERR,"Too many total atoms");
|
error->all(FLERR,"Too many total atoms");
|
||||||
|
|||||||
@ -16,6 +16,11 @@ style_region.h
|
|||||||
style_neigh_bin.h
|
style_neigh_bin.h
|
||||||
style_neigh_pair.h
|
style_neigh_pair.h
|
||||||
style_neigh_stencil.h
|
style_neigh_stencil.h
|
||||||
|
# deleted on 6 June 2017
|
||||||
|
pair_lj_sf.cpp
|
||||||
|
pair_lj_sf.h
|
||||||
|
pair_lj_sf_omp.cpp
|
||||||
|
pair_lj_sf_omp.h
|
||||||
# deleted on 4 May 2017
|
# deleted on 4 May 2017
|
||||||
dump_custom_vtk.cpp
|
dump_custom_vtk.cpp
|
||||||
dump_custom_vtk.h
|
dump_custom_vtk.h
|
||||||
|
|||||||
@ -50,7 +50,7 @@ enum{ISO,ANISO,TRICLINIC};
|
|||||||
#define EPSILON 1.0e-7
|
#define EPSILON 1.0e-7
|
||||||
|
|
||||||
#define SINERTIA 0.4 // moment of inertia prefactor for sphere
|
#define SINERTIA 0.4 // moment of inertia prefactor for sphere
|
||||||
#define EINERTIA 0.4 // moment of inertia prefactor for ellipsoid
|
#define EINERTIA 0.2 // moment of inertia prefactor for ellipsoid
|
||||||
#define LINERTIA (1.0/12.0) // moment of inertia prefactor for line segment
|
#define LINERTIA (1.0/12.0) // moment of inertia prefactor for line segment
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|||||||
@ -54,7 +54,7 @@ FixRigidSmall *FixRigidSmall::frsptr;
|
|||||||
#define BIG 1.0e20
|
#define BIG 1.0e20
|
||||||
|
|
||||||
#define SINERTIA 0.4 // moment of inertia prefactor for sphere
|
#define SINERTIA 0.4 // moment of inertia prefactor for sphere
|
||||||
#define EINERTIA 0.4 // moment of inertia prefactor for ellipsoid
|
#define EINERTIA 0.2 // moment of inertia prefactor for ellipsoid
|
||||||
#define LINERTIA (1.0/12.0) // moment of inertia prefactor for line segment
|
#define LINERTIA (1.0/12.0) // moment of inertia prefactor for line segment
|
||||||
|
|
||||||
#define DELTA_BODY 10000
|
#define DELTA_BODY 10000
|
||||||
@ -1047,7 +1047,7 @@ int FixRigidSmall::dof(int tgroup)
|
|||||||
j = atom2body[i];
|
j = atom2body[i];
|
||||||
counts[j][2]++;
|
counts[j][2]++;
|
||||||
if (mask[i] & tgroupbit) {
|
if (mask[i] & tgroupbit) {
|
||||||
if (extended && eflags[i]) counts[j][1]++;
|
if (extended && (eflags[i] & ~(POINT | DIPOLE))) counts[j][1]++;
|
||||||
else counts[j][0]++;
|
else counts[j][0]++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -55,7 +55,7 @@ NBinIntel::~NBinIntel() {
|
|||||||
nocopy(binhead,bins,_atombin,_binpacked:alloc_if(0) free_if(1))
|
nocopy(binhead,bins,_atombin,_binpacked:alloc_if(0) free_if(1))
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
/* ----------------------------------------------------------------------
|
||||||
setup for bin_atoms()
|
setup for bin_atoms()
|
||||||
@ -71,7 +71,7 @@ void NBinIntel::bin_atoms_setup(int nall)
|
|||||||
if (_offload_alloc) {
|
if (_offload_alloc) {
|
||||||
const int * binhead = this->binhead;
|
const int * binhead = this->binhead;
|
||||||
#pragma offload_transfer target(mic:_cop) \
|
#pragma offload_transfer target(mic:_cop) \
|
||||||
nocopy(binhead:alloc_if(0) free_if(1))
|
nocopy(binhead:alloc_if(0) free_if(1))
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -99,7 +99,7 @@ void NBinIntel::bin_atoms_setup(int nall)
|
|||||||
const int * _atombin = this->_atombin;
|
const int * _atombin = this->_atombin;
|
||||||
const int * _binpacked = this->_binpacked;
|
const int * _binpacked = this->_binpacked;
|
||||||
#pragma offload_transfer target(mic:_cop) \
|
#pragma offload_transfer target(mic:_cop) \
|
||||||
nocopy(bins,_atombin,_binpacked:alloc_if(0) free_if(1))
|
nocopy(bins,_atombin,_binpacked:alloc_if(0) free_if(1))
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
memory->destroy(bins);
|
memory->destroy(bins);
|
||||||
@ -157,10 +157,10 @@ void NBinIntel::bin_atoms(IntelBuffers<flt_t,acc_t> * buffers) {
|
|||||||
const flt_t dx = (INTEL_BIGP - bboxhi[0]);
|
const flt_t dx = (INTEL_BIGP - bboxhi[0]);
|
||||||
const flt_t dy = (INTEL_BIGP - bboxhi[1]);
|
const flt_t dy = (INTEL_BIGP - bboxhi[1]);
|
||||||
const flt_t dz = (INTEL_BIGP - bboxhi[2]);
|
const flt_t dz = (INTEL_BIGP - bboxhi[2]);
|
||||||
if (dx * dx + dy * dy + dz * dz <
|
if (dx * dx + dy * dy + dz * dz <
|
||||||
static_cast<flt_t>(neighbor->cutneighmaxsq))
|
static_cast<flt_t>(neighbor->cutneighmaxsq))
|
||||||
error->one(FLERR,
|
error->one(FLERR,
|
||||||
"Intel package expects no atoms within cutoff of {1e15,1e15,1e15}.");
|
"Intel package expects no atoms within cutoff of {1e15,1e15,1e15}.");
|
||||||
}
|
}
|
||||||
|
|
||||||
// ---------- Grow and cast/pack buffers -------------
|
// ---------- Grow and cast/pack buffers -------------
|
||||||
@ -181,7 +181,7 @@ void NBinIntel::bin_atoms(IntelBuffers<flt_t,acc_t> * buffers) {
|
|||||||
{
|
{
|
||||||
int ifrom, ito, tid;
|
int ifrom, ito, tid;
|
||||||
IP_PRE_omp_range_id_align(ifrom, ito, tid, nall, nthreads,
|
IP_PRE_omp_range_id_align(ifrom, ito, tid, nall, nthreads,
|
||||||
sizeof(ATOM_T));
|
sizeof(ATOM_T));
|
||||||
buffers->thr_pack(ifrom, ito, 0);
|
buffers->thr_pack(ifrom, ito, 0);
|
||||||
}
|
}
|
||||||
_fix->stop_watch(TIME_PACK);
|
_fix->stop_watch(TIME_PACK);
|
||||||
|
|||||||
@ -70,12 +70,12 @@ fbi(NeighList *list, IntelBuffers<flt_t,acc_t> *buffers) {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
buffers->grow_list(list, atom->nlocal, comm->nthreads, off_end,
|
buffers->grow_list(list, atom->nlocal, comm->nthreads, off_end,
|
||||||
_fix->nbor_pack_width());
|
_fix->nbor_pack_width());
|
||||||
|
|
||||||
int need_ic = 0;
|
int need_ic = 0;
|
||||||
if (atom->molecular)
|
if (atom->molecular)
|
||||||
dminimum_image_check(need_ic, neighbor->cutneighmax, neighbor->cutneighmax,
|
dminimum_image_check(need_ic, neighbor->cutneighmax, neighbor->cutneighmax,
|
||||||
neighbor->cutneighmax);
|
neighbor->cutneighmax);
|
||||||
|
|
||||||
#ifdef _LMP_INTEL_OFFLOAD
|
#ifdef _LMP_INTEL_OFFLOAD
|
||||||
if (need_ic) {
|
if (need_ic) {
|
||||||
@ -167,7 +167,7 @@ fbi(const int offload, NeighList *list, IntelBuffers<flt_t,acc_t> *buffers,
|
|||||||
overflow = _fix->get_off_overflow_flag();
|
overflow = _fix->get_off_overflow_flag();
|
||||||
_fix->stop_watch(TIME_HOST_NEIGHBOR);
|
_fix->stop_watch(TIME_HOST_NEIGHBOR);
|
||||||
_fix->start_watch(TIME_OFFLOAD_LATENCY);
|
_fix->start_watch(TIME_OFFLOAD_LATENCY);
|
||||||
} else
|
} else
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
tnum = comm->nthreads;
|
tnum = comm->nthreads;
|
||||||
@ -255,8 +255,8 @@ fbi(const int offload, NeighList *list, IntelBuffers<flt_t,acc_t> *buffers,
|
|||||||
ito += astart;
|
ito += astart;
|
||||||
int e_ito = ito;
|
int e_ito = ito;
|
||||||
if (ito == num) {
|
if (ito == num) {
|
||||||
int imod = ito % pack_width;
|
int imod = ito % pack_width;
|
||||||
if (imod) e_ito += pack_width - imod;
|
if (imod) e_ito += pack_width - imod;
|
||||||
}
|
}
|
||||||
const int list_size = (e_ito + tid * 2 + 2) * maxnbors;
|
const int list_size = (e_ito + tid * 2 + 2) * maxnbors;
|
||||||
int which;
|
int which;
|
||||||
@ -276,91 +276,91 @@ fbi(const int offload, NeighList *list, IntelBuffers<flt_t,acc_t> *buffers,
|
|||||||
const int ioffset = ntypes * itype;
|
const int ioffset = ntypes * itype;
|
||||||
|
|
||||||
const int ibin = atombin[i];
|
const int ibin = atombin[i];
|
||||||
int raw_count = pack_offset;
|
int raw_count = pack_offset;
|
||||||
|
|
||||||
// loop over all atoms in surrounding bins in stencil including self
|
// loop over all atoms in surrounding bins in stencil including self
|
||||||
// skip i = j
|
// skip i = j
|
||||||
if (exclude) {
|
if (exclude) {
|
||||||
for (int k = 0; k < nstencilp; k++) {
|
for (int k = 0; k < nstencilp; k++) {
|
||||||
const int bstart = binhead[ibin + binstart[k]];
|
const int bstart = binhead[ibin + binstart[k]];
|
||||||
const int bend = binhead[ibin + binend[k]];
|
const int bend = binhead[ibin + binend[k]];
|
||||||
#ifndef _LMP_INTEL_OFFLOAD
|
#ifndef _LMP_INTEL_OFFLOAD
|
||||||
#ifdef INTEL_VMASK
|
#ifdef INTEL_VMASK
|
||||||
#pragma simd
|
#pragma simd
|
||||||
#endif
|
|
||||||
#endif
|
#endif
|
||||||
for (int jj = bstart; jj < bend; jj++) {
|
#endif
|
||||||
int j = binpacked[jj];
|
for (int jj = bstart; jj < bend; jj++) {
|
||||||
|
int j = binpacked[jj];
|
||||||
|
|
||||||
|
if (i == j) j=e_nall;
|
||||||
|
|
||||||
if (i == j) j=e_nall;
|
|
||||||
|
|
||||||
#ifdef _LMP_INTEL_OFFLOAD
|
#ifdef _LMP_INTEL_OFFLOAD
|
||||||
if (offload_noghost) {
|
if (offload_noghost) {
|
||||||
if (j < nlocal) {
|
if (j < nlocal) {
|
||||||
if (i < offload_end) continue;
|
if (i < offload_end) continue;
|
||||||
} else if (offload) continue;
|
} else if (offload) continue;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef _LMP_INTEL_OFFLOAD
|
#ifndef _LMP_INTEL_OFFLOAD
|
||||||
const int jtype = x[j].w;
|
const int jtype = x[j].w;
|
||||||
if (exclusion(i,j,itype,jtype,mask,molecule)) continue;
|
if (exclusion(i,j,itype,jtype,mask,molecule)) continue;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
neighptr[raw_count++] = j;
|
neighptr[raw_count++] = j;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
for (int k = 0; k < nstencilp; k++) {
|
for (int k = 0; k < nstencilp; k++) {
|
||||||
const int bstart = binhead[ibin + binstart[k]];
|
const int bstart = binhead[ibin + binstart[k]];
|
||||||
const int bend = binhead[ibin + binend[k]];
|
const int bend = binhead[ibin + binend[k]];
|
||||||
#ifndef _LMP_INTEL_OFFLOAD
|
#ifndef _LMP_INTEL_OFFLOAD
|
||||||
#ifdef INTEL_VMASK
|
#ifdef INTEL_VMASK
|
||||||
#pragma simd
|
#pragma simd
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
for (int jj = bstart; jj < bend; jj++) {
|
for (int jj = bstart; jj < bend; jj++) {
|
||||||
int j = binpacked[jj];
|
int j = binpacked[jj];
|
||||||
|
|
||||||
|
if (i == j) j=e_nall;
|
||||||
|
|
||||||
if (i == j) j=e_nall;
|
|
||||||
|
|
||||||
#ifdef _LMP_INTEL_OFFLOAD
|
#ifdef _LMP_INTEL_OFFLOAD
|
||||||
if (offload_noghost) {
|
if (offload_noghost) {
|
||||||
if (j < nlocal) {
|
if (j < nlocal) {
|
||||||
if (i < offload_end) continue;
|
if (i < offload_end) continue;
|
||||||
} else if (offload) continue;
|
} else if (offload) continue;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
neighptr[raw_count++] = j;
|
neighptr[raw_count++] = j;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (raw_count > obound) *overflow = 1;
|
if (raw_count > obound) *overflow = 1;
|
||||||
|
|
||||||
#if defined(LMP_SIMD_COMPILER)
|
#if defined(LMP_SIMD_COMPILER)
|
||||||
#ifdef _LMP_INTEL_OFFLOAD
|
#ifdef _LMP_INTEL_OFFLOAD
|
||||||
int vlmin = lmin, vlmax = lmax, vgmin = gmin, vgmax = gmax;
|
int vlmin = lmin, vlmax = lmax, vgmin = gmin, vgmax = gmax;
|
||||||
#if __INTEL_COMPILER+0 > 1499
|
#if __INTEL_COMPILER+0 > 1499
|
||||||
#pragma vector aligned
|
#pragma vector aligned
|
||||||
#pragma simd reduction(max:vlmax,vgmax) reduction(min:vlmin, vgmin)
|
#pragma simd reduction(max:vlmax,vgmax) reduction(min:vlmin, vgmin)
|
||||||
#endif
|
#endif
|
||||||
#else
|
#else
|
||||||
#pragma vector aligned
|
#pragma vector aligned
|
||||||
#pragma simd
|
#pragma simd
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
for (int u = pack_offset; u < raw_count; u++) {
|
for (int u = pack_offset; u < raw_count; u++) {
|
||||||
int j = neighptr[u];
|
int j = neighptr[u];
|
||||||
const flt_t delx = xtmp - x[j].x;
|
const flt_t delx = xtmp - x[j].x;
|
||||||
const flt_t dely = ytmp - x[j].y;
|
const flt_t dely = ytmp - x[j].y;
|
||||||
const flt_t delz = ztmp - x[j].z;
|
const flt_t delz = ztmp - x[j].z;
|
||||||
const int jtype = x[j].w;
|
const int jtype = x[j].w;
|
||||||
const flt_t rsq = delx * delx + dely * dely + delz * delz;
|
const flt_t rsq = delx * delx + dely * dely + delz * delz;
|
||||||
if (rsq > cutneighsq[ioffset + jtype])
|
if (rsq > cutneighsq[ioffset + jtype])
|
||||||
neighptr[u] = e_nall;
|
neighptr[u] = e_nall;
|
||||||
else {
|
else {
|
||||||
if (need_ic) {
|
if (need_ic) {
|
||||||
int no_special;
|
int no_special;
|
||||||
ominimum_image_check(no_special, delx, dely, delz);
|
ominimum_image_check(no_special, delx, dely, delz);
|
||||||
@ -376,73 +376,73 @@ fbi(const int offload, NeighList *list, IntelBuffers<flt_t,acc_t> *buffers,
|
|||||||
if (j > vgmax) vgmax = j;
|
if (j > vgmax) vgmax = j;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#ifdef _LMP_INTEL_OFFLOAD
|
#ifdef _LMP_INTEL_OFFLOAD
|
||||||
lmin = MIN(lmin,vlmin);
|
lmin = MIN(lmin,vlmin);
|
||||||
gmin = MIN(gmin,vgmin);
|
gmin = MIN(gmin,vgmin);
|
||||||
lmax = MAX(lmax,vlmax);
|
lmax = MAX(lmax,vlmax);
|
||||||
gmax = MAX(gmax,vgmax);
|
gmax = MAX(gmax,vgmax);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int n = lane, n2 = pack_offset;
|
int n = lane, n2 = pack_offset;
|
||||||
for (int u = pack_offset; u < raw_count; u++) {
|
for (int u = pack_offset; u < raw_count; u++) {
|
||||||
const int j = neighptr[u];
|
const int j = neighptr[u];
|
||||||
int pj = j;
|
int pj = j;
|
||||||
if (pj < e_nall) {
|
if (pj < e_nall) {
|
||||||
if (need_ic)
|
if (need_ic)
|
||||||
if (pj < 0) pj = -pj - 1;
|
if (pj < 0) pj = -pj - 1;
|
||||||
|
|
||||||
const int jtag = tag[pj];
|
const int jtag = tag[pj];
|
||||||
int flist = 0;
|
int flist = 0;
|
||||||
if (itag > jtag) {
|
if (itag > jtag) {
|
||||||
if ((itag+jtag) % 2 == 0) flist = 1;
|
if ((itag+jtag) % 2 == 0) flist = 1;
|
||||||
} else if (itag < jtag) {
|
} else if (itag < jtag) {
|
||||||
if ((itag+jtag) % 2 == 1) flist = 1;
|
if ((itag+jtag) % 2 == 1) flist = 1;
|
||||||
} else {
|
} else {
|
||||||
if (x[pj].z < ztmp) flist = 1;
|
if (x[pj].z < ztmp) flist = 1;
|
||||||
else if (x[pj].z == ztmp && x[pj].y < ytmp) flist = 1;
|
else if (x[pj].z == ztmp && x[pj].y < ytmp) flist = 1;
|
||||||
else if (x[pj].z == ztmp && x[pj].y == ytmp && x[pj].x < xtmp)
|
else if (x[pj].z == ztmp && x[pj].y == ytmp && x[pj].x < xtmp)
|
||||||
flist = 1;
|
flist = 1;
|
||||||
}
|
}
|
||||||
if (flist) {
|
if (flist) {
|
||||||
neighptr[n2++] = j;
|
neighptr[n2++] = j;
|
||||||
} else {
|
} else {
|
||||||
neighptr[n] = j;
|
neighptr[n] = j;
|
||||||
n += pack_width;
|
n += pack_width;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
int ns = (n - lane) / pack_width;
|
int ns = (n - lane) / pack_width;
|
||||||
atombin[i] = ns;
|
atombin[i] = ns;
|
||||||
for (int u = pack_offset; u < n2; u++) {
|
for (int u = pack_offset; u < n2; u++) {
|
||||||
neighptr[n] = neighptr[u];
|
neighptr[n] = neighptr[u];
|
||||||
n += pack_width;
|
n += pack_width;
|
||||||
}
|
}
|
||||||
|
|
||||||
ilist[i] = i;
|
ilist[i] = i;
|
||||||
cnumneigh[i] = ct + lane;
|
cnumneigh[i] = ct + lane;
|
||||||
ns += n2 - pack_offset;
|
ns += n2 - pack_offset;
|
||||||
numneigh[i] = ns;
|
numneigh[i] = ns;
|
||||||
|
|
||||||
if (ns > max_chunk) max_chunk = ns;
|
if (ns > max_chunk) max_chunk = ns;
|
||||||
lane++;
|
lane++;
|
||||||
if (lane == pack_width) {
|
if (lane == pack_width) {
|
||||||
ct += max_chunk * pack_width;
|
ct += max_chunk * pack_width;
|
||||||
const int alignb = (INTEL_DATA_ALIGN / sizeof(int));
|
const int alignb = (INTEL_DATA_ALIGN / sizeof(int));
|
||||||
const int edge = (ct % alignb);
|
const int edge = (ct % alignb);
|
||||||
if (edge) ct += alignb - edge;
|
if (edge) ct += alignb - edge;
|
||||||
neighptr = firstneigh + ct;
|
neighptr = firstneigh + ct;
|
||||||
max_chunk = 0;
|
max_chunk = 0;
|
||||||
pack_offset = maxnbors * pack_width;
|
pack_offset = maxnbors * pack_width;
|
||||||
lane = 0;
|
lane = 0;
|
||||||
if (ct + obound > list_size) {
|
if (ct + obound > list_size) {
|
||||||
if (i < ito - 1) {
|
if (i < ito - 1) {
|
||||||
*overflow = 1;
|
*overflow = 1;
|
||||||
ct = (ifrom + tid * 2) * maxnbors;
|
ct = (ifrom + tid * 2) * maxnbors;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (*overflow == 1)
|
if (*overflow == 1)
|
||||||
@ -482,13 +482,13 @@ fbi(const int offload, NeighList *list, IntelBuffers<flt_t,acc_t> *buffers,
|
|||||||
int * _noalias jlist = firstneigh + cnumneigh[i];
|
int * _noalias jlist = firstneigh + cnumneigh[i];
|
||||||
const int jnum = numneigh[i];
|
const int jnum = numneigh[i];
|
||||||
|
|
||||||
const int trip = jnum * pack_width;
|
const int trip = jnum * pack_width;
|
||||||
for (int jj = 0; jj < trip; jj+=pack_width) {
|
for (int jj = 0; jj < trip; jj+=pack_width) {
|
||||||
const int j = jlist[jj];
|
const int j = jlist[jj];
|
||||||
if (need_ic && j < 0) {
|
if (need_ic && j < 0) {
|
||||||
which = 0;
|
which = 0;
|
||||||
jlist[jj] = -j - 1;
|
jlist[jj] = -j - 1;
|
||||||
} else
|
} else
|
||||||
ofind_special(which, special, nspecial, i, tag[j]);
|
ofind_special(which, special, nspecial, i, tag[j]);
|
||||||
#ifdef _LMP_INTEL_OFFLOAD
|
#ifdef _LMP_INTEL_OFFLOAD
|
||||||
if (j >= nlocal) {
|
if (j >= nlocal) {
|
||||||
@ -511,9 +511,9 @@ fbi(const int offload, NeighList *list, IntelBuffers<flt_t,acc_t> *buffers,
|
|||||||
int jj = 0;
|
int jj = 0;
|
||||||
for (jj = 0; jj < jnum; jj++) {
|
for (jj = 0; jj < jnum; jj++) {
|
||||||
if (jlist[jj] >= nlocal) {
|
if (jlist[jj] >= nlocal) {
|
||||||
if (jlist[jj] == e_nall) jlist[jj] = nall_offset;
|
if (jlist[jj] == e_nall) jlist[jj] = nall_offset;
|
||||||
else jlist[jj] -= ghost_offset;
|
else jlist[jj] -= ghost_offset;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -15,7 +15,7 @@
|
|||||||
|
|
||||||
NPairStyle(full/bin/intel,
|
NPairStyle(full/bin/intel,
|
||||||
NPairFullBinIntel,
|
NPairFullBinIntel,
|
||||||
NP_FULL | NP_BIN | NP_NEWTON | NP_NEWTOFF | NP_ORTHO | NP_TRI |
|
NP_FULL | NP_BIN | NP_NEWTON | NP_NEWTOFF | NP_ORTHO | NP_TRI |
|
||||||
NP_INTEL)
|
NP_INTEL)
|
||||||
#else
|
#else
|
||||||
|
|
||||||
@ -38,7 +38,7 @@ class NPairFullBinIntel : public NPairIntel {
|
|||||||
void fbi(NeighList *, IntelBuffers<flt_t,acc_t> *);
|
void fbi(NeighList *, IntelBuffers<flt_t,acc_t> *);
|
||||||
template <class flt_t, class acc_t, int, int>
|
template <class flt_t, class acc_t, int, int>
|
||||||
void fbi(const int, NeighList *, IntelBuffers<flt_t,acc_t> *, const int,
|
void fbi(const int, NeighList *, IntelBuffers<flt_t,acc_t> *, const int,
|
||||||
const int, const int offload_end = 0);
|
const int, const int offload_end = 0);
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -26,7 +26,7 @@ using namespace LAMMPS_NS;
|
|||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
NPairHalfBinNewtoffIntel::NPairHalfBinNewtoffIntel(LAMMPS *lmp) :
|
NPairHalfBinNewtoffIntel::NPairHalfBinNewtoffIntel(LAMMPS *lmp) :
|
||||||
NPairIntel(lmp) {}
|
NPairIntel(lmp) {}
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
/* ----------------------------------------------------------------------
|
||||||
@ -75,7 +75,7 @@ hbnni(NeighList *list, IntelBuffers<flt_t,acc_t> *buffers) {
|
|||||||
int need_ic = 0;
|
int need_ic = 0;
|
||||||
if (atom->molecular)
|
if (atom->molecular)
|
||||||
dminimum_image_check(need_ic, neighbor->cutneighmax, neighbor->cutneighmax,
|
dminimum_image_check(need_ic, neighbor->cutneighmax, neighbor->cutneighmax,
|
||||||
neighbor->cutneighmax);
|
neighbor->cutneighmax);
|
||||||
|
|
||||||
#ifdef _LMP_INTEL_OFFLOAD
|
#ifdef _LMP_INTEL_OFFLOAD
|
||||||
if (need_ic) {
|
if (need_ic) {
|
||||||
@ -159,7 +159,7 @@ hbnni(const int offload, NeighList *list, IntelBuffers<flt_t,acc_t> *buffers,
|
|||||||
overflow = _fix->get_off_overflow_flag();
|
overflow = _fix->get_off_overflow_flag();
|
||||||
_fix->stop_watch(TIME_HOST_NEIGHBOR);
|
_fix->stop_watch(TIME_HOST_NEIGHBOR);
|
||||||
_fix->start_watch(TIME_OFFLOAD_LATENCY);
|
_fix->start_watch(TIME_OFFLOAD_LATENCY);
|
||||||
} else
|
} else
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
tnum = comm->nthreads;
|
tnum = comm->nthreads;
|
||||||
@ -294,13 +294,13 @@ hbnni(const int offload, NeighList *list, IntelBuffers<flt_t,acc_t> *buffers,
|
|||||||
ominimum_image_check(no_special, delx, dely, delz);
|
ominimum_image_check(no_special, delx, dely, delz);
|
||||||
if (no_special)
|
if (no_special)
|
||||||
neighptr[n++] = -j - 1;
|
neighptr[n++] = -j - 1;
|
||||||
else
|
else
|
||||||
neighptr[n++] = j;
|
neighptr[n++] = j;
|
||||||
} else
|
} else
|
||||||
neighptr[n++] = j;
|
neighptr[n++] = j;
|
||||||
#ifdef _LMP_INTEL_OFFLOAD
|
#ifdef _LMP_INTEL_OFFLOAD
|
||||||
if (j < lmin) lmin = j;
|
if (j < lmin) lmin = j;
|
||||||
if (j > lmax) lmax = j;
|
if (j > lmax) lmax = j;
|
||||||
#endif
|
#endif
|
||||||
} else {
|
} else {
|
||||||
if (need_ic) {
|
if (need_ic) {
|
||||||
@ -308,16 +308,16 @@ hbnni(const int offload, NeighList *list, IntelBuffers<flt_t,acc_t> *buffers,
|
|||||||
ominimum_image_check(no_special, delx, dely, delz);
|
ominimum_image_check(no_special, delx, dely, delz);
|
||||||
if (no_special)
|
if (no_special)
|
||||||
neighptr[n2++] = -j - 1;
|
neighptr[n2++] = -j - 1;
|
||||||
else
|
else
|
||||||
neighptr[n2++] = j;
|
neighptr[n2++] = j;
|
||||||
} else
|
} else
|
||||||
neighptr[n2++] = j;
|
neighptr[n2++] = j;
|
||||||
#ifdef _LMP_INTEL_OFFLOAD
|
#ifdef _LMP_INTEL_OFFLOAD
|
||||||
if (j < gmin) gmin = j;
|
if (j < gmin) gmin = j;
|
||||||
if (j > gmax) gmax = j;
|
if (j > gmax) gmax = j;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ilist[i] = i;
|
ilist[i] = i;
|
||||||
@ -341,13 +341,13 @@ hbnni(const int offload, NeighList *list, IntelBuffers<flt_t,acc_t> *buffers,
|
|||||||
neighptr += n;
|
neighptr += n;
|
||||||
if (ct + n + maxnbors > list_size) {
|
if (ct + n + maxnbors > list_size) {
|
||||||
*overflow = 1;
|
*overflow = 1;
|
||||||
ct = (ifrom + tid) * maxnbors;
|
ct = (ifrom + tid) * maxnbors;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (*overflow == 1)
|
if (*overflow == 1)
|
||||||
for (int i = ifrom; i < ito; i++)
|
for (int i = ifrom; i < ito; i++)
|
||||||
numneigh[i] = 0;
|
numneigh[i] = 0;
|
||||||
|
|
||||||
#ifdef _LMP_INTEL_OFFLOAD
|
#ifdef _LMP_INTEL_OFFLOAD
|
||||||
if (separate_buffers) {
|
if (separate_buffers) {
|
||||||
@ -370,7 +370,7 @@ hbnni(const int offload, NeighList *list, IntelBuffers<flt_t,acc_t> *buffers,
|
|||||||
if (offload) {
|
if (offload) {
|
||||||
ghost_offset = overflow[LMP_GHOST_MIN] - overflow[LMP_LOCAL_MAX] - 1;
|
ghost_offset = overflow[LMP_GHOST_MIN] - overflow[LMP_LOCAL_MAX] - 1;
|
||||||
nall_offset = overflow[LMP_LOCAL_MAX] + 1 + nghost;
|
nall_offset = overflow[LMP_LOCAL_MAX] + 1 + nghost;
|
||||||
} else {
|
} else {
|
||||||
ghost_offset = overflow[LMP_GHOST_MIN] - nlocal;
|
ghost_offset = overflow[LMP_GHOST_MIN] - nlocal;
|
||||||
nall_offset = nlocal + nghost;
|
nall_offset = nlocal + nghost;
|
||||||
}
|
}
|
||||||
@ -383,38 +383,38 @@ hbnni(const int offload, NeighList *list, IntelBuffers<flt_t,acc_t> *buffers,
|
|||||||
const int jnum = numneigh[i];
|
const int jnum = numneigh[i];
|
||||||
for (int jj = 0; jj < jnum; jj++) {
|
for (int jj = 0; jj < jnum; jj++) {
|
||||||
const int j = jlist[jj];
|
const int j = jlist[jj];
|
||||||
if (need_ic && j < 0) {
|
if (need_ic && j < 0) {
|
||||||
which = 0;
|
which = 0;
|
||||||
jlist[jj] = -j - 1;
|
jlist[jj] = -j - 1;
|
||||||
} else
|
} else
|
||||||
ofind_special(which, special, nspecial, i, tag[j]);
|
ofind_special(which, special, nspecial, i, tag[j]);
|
||||||
#ifdef _LMP_INTEL_OFFLOAD
|
#ifdef _LMP_INTEL_OFFLOAD
|
||||||
if (j >= nlocal) {
|
if (j >= nlocal) {
|
||||||
if (j == nall)
|
if (j == nall)
|
||||||
jlist[jj] = nall_offset;
|
jlist[jj] = nall_offset;
|
||||||
else if (which)
|
else if (which)
|
||||||
jlist[jj] = (j-ghost_offset) ^ (which << SBBITS);
|
jlist[jj] = (j-ghost_offset) ^ (which << SBBITS);
|
||||||
else jlist[jj]-=ghost_offset;
|
else jlist[jj]-=ghost_offset;
|
||||||
} else
|
} else
|
||||||
#endif
|
#endif
|
||||||
if (which) jlist[jj] = j ^ (which << SBBITS);
|
if (which) jlist[jj] = j ^ (which << SBBITS);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#ifdef _LMP_INTEL_OFFLOAD
|
#ifdef _LMP_INTEL_OFFLOAD
|
||||||
else if (separate_buffers) {
|
else if (separate_buffers) {
|
||||||
for (int i = ifrom; i < ito; ++i) {
|
for (int i = ifrom; i < ito; ++i) {
|
||||||
int * _noalias jlist = firstneigh + cnumneigh[i];
|
int * _noalias jlist = firstneigh + cnumneigh[i];
|
||||||
const int jnum = numneigh[i];
|
const int jnum = numneigh[i];
|
||||||
int jj = 0;
|
int jj = 0;
|
||||||
for (jj = 0; jj < jnum; jj++)
|
for (jj = 0; jj < jnum; jj++)
|
||||||
if (jlist[jj] >= nlocal) break;
|
if (jlist[jj] >= nlocal) break;
|
||||||
while (jj < jnum) {
|
while (jj < jnum) {
|
||||||
if (jlist[jj] == nall) jlist[jj] = nall_offset;
|
if (jlist[jj] == nall) jlist[jj] = nall_offset;
|
||||||
else jlist[jj] -= ghost_offset;
|
else jlist[jj] -= ghost_offset;
|
||||||
jj++;
|
jj++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
} // end omp
|
} // end omp
|
||||||
@ -438,9 +438,9 @@ hbnni(const int offload, NeighList *list, IntelBuffers<flt_t,acc_t> *buffers,
|
|||||||
_fix->start_watch(TIME_PACK);
|
_fix->start_watch(TIME_PACK);
|
||||||
_fix->set_neighbor_host_sizes();
|
_fix->set_neighbor_host_sizes();
|
||||||
buffers->pack_sep_from_single(_fix->host_min_local(),
|
buffers->pack_sep_from_single(_fix->host_min_local(),
|
||||||
_fix->host_used_local(),
|
_fix->host_used_local(),
|
||||||
_fix->host_min_ghost(),
|
_fix->host_min_ghost(),
|
||||||
_fix->host_used_ghost());
|
_fix->host_used_ghost());
|
||||||
_fix->stop_watch(TIME_PACK);
|
_fix->stop_watch(TIME_PACK);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -38,7 +38,7 @@ class NPairHalfBinNewtoffIntel : public NPairIntel {
|
|||||||
void hbnni(NeighList *, IntelBuffers<flt_t,acc_t> *);
|
void hbnni(NeighList *, IntelBuffers<flt_t,acc_t> *);
|
||||||
template <class flt_t, class acc_t, int>
|
template <class flt_t, class acc_t, int>
|
||||||
void hbnni(const int, NeighList *, IntelBuffers<flt_t,acc_t> *, const int,
|
void hbnni(const int, NeighList *, IntelBuffers<flt_t,acc_t> *, const int,
|
||||||
const int);
|
const int);
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -26,7 +26,7 @@ using namespace LAMMPS_NS;
|
|||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
NPairHalfBinNewtonIntel::NPairHalfBinNewtonIntel(LAMMPS *lmp) :
|
NPairHalfBinNewtonIntel::NPairHalfBinNewtonIntel(LAMMPS *lmp) :
|
||||||
NPairIntel(lmp) {}
|
NPairIntel(lmp) {}
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
/* ----------------------------------------------------------------------
|
||||||
@ -75,7 +75,7 @@ hbni(NeighList *list, IntelBuffers<flt_t,acc_t> *buffers) {
|
|||||||
int need_ic = 0;
|
int need_ic = 0;
|
||||||
if (atom->molecular)
|
if (atom->molecular)
|
||||||
dminimum_image_check(need_ic, neighbor->cutneighmax, neighbor->cutneighmax,
|
dminimum_image_check(need_ic, neighbor->cutneighmax, neighbor->cutneighmax,
|
||||||
neighbor->cutneighmax);
|
neighbor->cutneighmax);
|
||||||
|
|
||||||
#ifdef _LMP_INTEL_OFFLOAD
|
#ifdef _LMP_INTEL_OFFLOAD
|
||||||
if (need_ic) {
|
if (need_ic) {
|
||||||
@ -96,7 +96,7 @@ hbni(NeighList *list, IntelBuffers<flt_t,acc_t> *buffers) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
if (need_ic)
|
if (need_ic)
|
||||||
hbni<flt_t,acc_t,0,1>(0, list, buffers, host_start, nlocal);
|
hbni<flt_t,acc_t,0,1>(0, list, buffers, host_start, nlocal);
|
||||||
else
|
else
|
||||||
hbni<flt_t,acc_t,0,0>(0, list, buffers, host_start, nlocal);
|
hbni<flt_t,acc_t,0,0>(0, list, buffers, host_start, nlocal);
|
||||||
@ -119,7 +119,7 @@ hbni(const int offload, NeighList *list, IntelBuffers<flt_t,acc_t> *buffers,
|
|||||||
if (offload) {
|
if (offload) {
|
||||||
if (INTEL_MIC_NBOR_PAD > 1)
|
if (INTEL_MIC_NBOR_PAD > 1)
|
||||||
pad = INTEL_MIC_NBOR_PAD * sizeof(float) / sizeof(flt_t);
|
pad = INTEL_MIC_NBOR_PAD * sizeof(float) / sizeof(flt_t);
|
||||||
} else
|
} else
|
||||||
#endif
|
#endif
|
||||||
if (INTEL_NBOR_PAD > 1)
|
if (INTEL_NBOR_PAD > 1)
|
||||||
pad = INTEL_NBOR_PAD * sizeof(float) / sizeof(flt_t);
|
pad = INTEL_NBOR_PAD * sizeof(float) / sizeof(flt_t);
|
||||||
@ -172,7 +172,7 @@ hbni(const int offload, NeighList *list, IntelBuffers<flt_t,acc_t> *buffers,
|
|||||||
overflow = _fix->get_off_overflow_flag();
|
overflow = _fix->get_off_overflow_flag();
|
||||||
_fix->stop_watch(TIME_HOST_NEIGHBOR);
|
_fix->stop_watch(TIME_HOST_NEIGHBOR);
|
||||||
_fix->start_watch(TIME_OFFLOAD_LATENCY);
|
_fix->start_watch(TIME_OFFLOAD_LATENCY);
|
||||||
} else
|
} else
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
tnum = comm->nthreads;
|
tnum = comm->nthreads;
|
||||||
@ -235,8 +235,8 @@ hbni(const int offload, NeighList *list, IntelBuffers<flt_t,acc_t> *buffers,
|
|||||||
int end = stencil[k] + 1;
|
int end = stencil[k] + 1;
|
||||||
for (int kk = k + 1; kk < nstencil; kk++) {
|
for (int kk = k + 1; kk < nstencil; kk++) {
|
||||||
if (stencil[kk-1]+1 == stencil[kk]) {
|
if (stencil[kk-1]+1 == stencil[kk]) {
|
||||||
end++;
|
end++;
|
||||||
k++;
|
k++;
|
||||||
} else break;
|
} else break;
|
||||||
}
|
}
|
||||||
binend[nstencilp] = end;
|
binend[nstencilp] = end;
|
||||||
@ -262,8 +262,8 @@ hbni(const int offload, NeighList *list, IntelBuffers<flt_t,acc_t> *buffers,
|
|||||||
ito += astart;
|
ito += astart;
|
||||||
int e_ito = ito;
|
int e_ito = ito;
|
||||||
if (ito == num) {
|
if (ito == num) {
|
||||||
int imod = ito % swidth;
|
int imod = ito % swidth;
|
||||||
if (imod) e_ito += swidth - imod;
|
if (imod) e_ito += swidth - imod;
|
||||||
}
|
}
|
||||||
const int list_size = (e_ito + tid * 2 + 2) * maxnbors;
|
const int list_size = (e_ito + tid * 2 + 2) * maxnbors;
|
||||||
#else
|
#else
|
||||||
@ -294,118 +294,118 @@ hbni(const int offload, NeighList *list, IntelBuffers<flt_t,acc_t> *buffers,
|
|||||||
// if j is owned atom, store it, since j is beyond i in linked list
|
// if j is owned atom, store it, since j is beyond i in linked list
|
||||||
// if j is ghost, only store if j coords are "above/to the right" of i
|
// if j is ghost, only store if j coords are "above/to the right" of i
|
||||||
|
|
||||||
int raw_count = pack_offset;
|
int raw_count = pack_offset;
|
||||||
for (int j = bins[i]; j >= 0; j = bins[j]) {
|
for (int j = bins[i]; j >= 0; j = bins[j]) {
|
||||||
if (j >= nlocal) {
|
if (j >= nlocal) {
|
||||||
#ifdef _LMP_INTEL_OFFLOAD
|
#ifdef _LMP_INTEL_OFFLOAD
|
||||||
if (offload_noghost && offload) continue;
|
if (offload_noghost && offload) continue;
|
||||||
#endif
|
#endif
|
||||||
if (x[j].z < ztmp) continue;
|
if (x[j].z < ztmp) continue;
|
||||||
if (x[j].z == ztmp) {
|
if (x[j].z == ztmp) {
|
||||||
if (x[j].y < ytmp) continue;
|
if (x[j].y < ytmp) continue;
|
||||||
if (x[j].y == ytmp && x[j].x < xtmp) continue;
|
if (x[j].y == ytmp && x[j].x < xtmp) continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#ifdef _LMP_INTEL_OFFLOAD
|
#ifdef _LMP_INTEL_OFFLOAD
|
||||||
else if (offload_noghost && i < offload_end) continue;
|
else if (offload_noghost && i < offload_end) continue;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef _LMP_INTEL_OFFLOAD
|
#ifndef _LMP_INTEL_OFFLOAD
|
||||||
if (exclude) {
|
if (exclude) {
|
||||||
const int jtype = x[j].w;
|
const int jtype = x[j].w;
|
||||||
if (exclusion(i,j,itype,jtype,mask,molecule)) continue;
|
if (exclusion(i,j,itype,jtype,mask,molecule)) continue;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
neighptr[raw_count++] = j;
|
neighptr[raw_count++] = j;
|
||||||
}
|
}
|
||||||
|
|
||||||
// loop over all atoms in other bins in stencil, store every pair
|
// loop over all atoms in other bins in stencil, store every pair
|
||||||
|
|
||||||
const int ibin = atombin[i];
|
const int ibin = atombin[i];
|
||||||
if (exclude) {
|
if (exclude) {
|
||||||
for (int k = 0; k < nstencilp; k++) {
|
for (int k = 0; k < nstencilp; k++) {
|
||||||
const int bstart = binhead[ibin + binstart[k]];
|
const int bstart = binhead[ibin + binstart[k]];
|
||||||
const int bend = binhead[ibin + binend[k]];
|
const int bend = binhead[ibin + binend[k]];
|
||||||
#ifndef _LMP_INTEL_OFFLOAD
|
#ifndef _LMP_INTEL_OFFLOAD
|
||||||
#ifdef INTEL_VMASK
|
#ifdef INTEL_VMASK
|
||||||
#pragma simd
|
#pragma simd
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
for (int jj = bstart; jj < bend; jj++) {
|
for (int jj = bstart; jj < bend; jj++) {
|
||||||
const int j = binpacked[jj];
|
const int j = binpacked[jj];
|
||||||
|
|
||||||
#ifdef _LMP_INTEL_OFFLOAD
|
#ifdef _LMP_INTEL_OFFLOAD
|
||||||
if (offload_noghost) {
|
if (offload_noghost) {
|
||||||
if (j < nlocal) {
|
if (j < nlocal) {
|
||||||
if (i < offload_end) continue;
|
if (i < offload_end) continue;
|
||||||
} else if (offload) continue;
|
} else if (offload) continue;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef _LMP_INTEL_OFFLOAD
|
#ifndef _LMP_INTEL_OFFLOAD
|
||||||
const int jtype = x[j].w;
|
const int jtype = x[j].w;
|
||||||
if (exclusion(i,j,itype,jtype,mask,molecule)) continue;
|
if (exclusion(i,j,itype,jtype,mask,molecule)) continue;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
neighptr[raw_count++] = j;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for (int k = 0; k < nstencilp; k++) {
|
||||||
|
const int bstart = binhead[ibin + binstart[k]];
|
||||||
|
const int bend = binhead[ibin + binend[k]];
|
||||||
|
#ifndef _LMP_INTEL_OFFLOAD
|
||||||
|
#ifdef INTEL_VMASK
|
||||||
|
#pragma simd
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
for (int jj = bstart; jj < bend; jj++) {
|
||||||
|
const int j = binpacked[jj];
|
||||||
|
|
||||||
neighptr[raw_count++] = j;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
for (int k = 0; k < nstencilp; k++) {
|
|
||||||
const int bstart = binhead[ibin + binstart[k]];
|
|
||||||
const int bend = binhead[ibin + binend[k]];
|
|
||||||
#ifndef _LMP_INTEL_OFFLOAD
|
|
||||||
#ifdef INTEL_VMASK
|
|
||||||
#pragma simd
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
for (int jj = bstart; jj < bend; jj++) {
|
|
||||||
const int j = binpacked[jj];
|
|
||||||
|
|
||||||
#ifdef _LMP_INTEL_OFFLOAD
|
#ifdef _LMP_INTEL_OFFLOAD
|
||||||
if (offload_noghost) {
|
if (offload_noghost) {
|
||||||
if (j < nlocal) {
|
if (j < nlocal) {
|
||||||
if (i < offload_end) continue;
|
if (i < offload_end) continue;
|
||||||
} else if (offload) continue;
|
} else if (offload) continue;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
neighptr[raw_count++] = j;
|
neighptr[raw_count++] = j;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (raw_count > obound) *overflow = 1;
|
if (raw_count > obound) *overflow = 1;
|
||||||
|
|
||||||
#if defined(LMP_SIMD_COMPILER)
|
#if defined(LMP_SIMD_COMPILER)
|
||||||
#ifdef _LMP_INTEL_OFFLOAD
|
#ifdef _LMP_INTEL_OFFLOAD
|
||||||
int vlmin = lmin, vlmax = lmax, vgmin = gmin, vgmax = gmax;
|
int vlmin = lmin, vlmax = lmax, vgmin = gmin, vgmax = gmax;
|
||||||
#if __INTEL_COMPILER+0 > 1499
|
#if __INTEL_COMPILER+0 > 1499
|
||||||
#pragma vector aligned
|
#pragma vector aligned
|
||||||
#pragma simd reduction(max:vlmax,vgmax) reduction(min:vlmin, vgmin)
|
#pragma simd reduction(max:vlmax,vgmax) reduction(min:vlmin, vgmin)
|
||||||
#endif
|
#endif
|
||||||
#else
|
#else
|
||||||
#pragma vector aligned
|
#pragma vector aligned
|
||||||
#pragma simd
|
#pragma simd
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
for (int u = pack_offset; u < raw_count; u++) {
|
for (int u = pack_offset; u < raw_count; u++) {
|
||||||
int j = neighptr[u];
|
int j = neighptr[u];
|
||||||
const flt_t delx = xtmp - x[j].x;
|
const flt_t delx = xtmp - x[j].x;
|
||||||
const flt_t dely = ytmp - x[j].y;
|
const flt_t dely = ytmp - x[j].y;
|
||||||
const flt_t delz = ztmp - x[j].z;
|
const flt_t delz = ztmp - x[j].z;
|
||||||
const int jtype = x[j].w;
|
const int jtype = x[j].w;
|
||||||
const flt_t rsq = delx * delx + dely * dely + delz * delz;
|
const flt_t rsq = delx * delx + dely * dely + delz * delz;
|
||||||
if (rsq > cutneighsq[ioffset + jtype])
|
if (rsq > cutneighsq[ioffset + jtype])
|
||||||
neighptr[u] = e_nall;
|
neighptr[u] = e_nall;
|
||||||
else {
|
else {
|
||||||
if (need_ic) {
|
if (need_ic) {
|
||||||
int no_special;
|
int no_special;
|
||||||
ominimum_image_check(no_special, delx, dely, delz);
|
ominimum_image_check(no_special, delx, dely, delz);
|
||||||
if (no_special)
|
if (no_special)
|
||||||
neighptr[u] = -j - 1;
|
neighptr[u] = -j - 1;
|
||||||
}
|
}
|
||||||
#ifdef _LMP_INTEL_OFFLOAD
|
#ifdef _LMP_INTEL_OFFLOAD
|
||||||
if (j < nlocal) {
|
if (j < nlocal) {
|
||||||
if (j < vlmin) vlmin = j;
|
if (j < vlmin) vlmin = j;
|
||||||
@ -415,40 +415,40 @@ hbni(const int offload, NeighList *list, IntelBuffers<flt_t,acc_t> *buffers,
|
|||||||
if (j > vgmax) vgmax = j;
|
if (j > vgmax) vgmax = j;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#ifdef _LMP_INTEL_OFFLOAD
|
#ifdef _LMP_INTEL_OFFLOAD
|
||||||
lmin = MIN(lmin,vlmin);
|
lmin = MIN(lmin,vlmin);
|
||||||
gmin = MIN(gmin,vgmin);
|
gmin = MIN(gmin,vgmin);
|
||||||
lmax = MAX(lmax,vlmax);
|
lmax = MAX(lmax,vlmax);
|
||||||
gmax = MAX(gmax,vgmax);
|
gmax = MAX(gmax,vgmax);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int n = lane, n2 = pack_offset;
|
int n = lane, n2 = pack_offset;
|
||||||
for (int u = pack_offset; u < raw_count; u++) {
|
for (int u = pack_offset; u < raw_count; u++) {
|
||||||
const int j = neighptr[u];
|
const int j = neighptr[u];
|
||||||
int pj = j;
|
int pj = j;
|
||||||
if (pj < e_nall) {
|
if (pj < e_nall) {
|
||||||
if (need_ic)
|
if (need_ic)
|
||||||
if (pj < 0) pj = -pj - 1;
|
if (pj < 0) pj = -pj - 1;
|
||||||
|
|
||||||
if (pj < nlocal) {
|
if (pj < nlocal) {
|
||||||
neighptr[n] = j;
|
neighptr[n] = j;
|
||||||
n += swidth;
|
n += swidth;
|
||||||
} else
|
} else
|
||||||
neighptr[n2++] = j;
|
neighptr[n2++] = j;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
int ns = (n - lane) / swidth;
|
int ns = (n - lane) / swidth;
|
||||||
for (int u = pack_offset; u < n2; u++) {
|
for (int u = pack_offset; u < n2; u++) {
|
||||||
neighptr[n] = neighptr[u];
|
neighptr[n] = neighptr[u];
|
||||||
n += swidth;
|
n += swidth;
|
||||||
}
|
}
|
||||||
|
|
||||||
ilist[i] = i;
|
ilist[i] = i;
|
||||||
cnumneigh[i] = ct + lane;
|
cnumneigh[i] = ct + lane;
|
||||||
ns += n2 - pack_offset;
|
ns += n2 - pack_offset;
|
||||||
#ifndef OUTER_CHUNK
|
#ifndef OUTER_CHUNK
|
||||||
int edge = (ns % pad_width);
|
int edge = (ns % pad_width);
|
||||||
if (edge) {
|
if (edge) {
|
||||||
const int pad_end = ns + (pad_width - edge);
|
const int pad_end = ns + (pad_width - edge);
|
||||||
@ -458,41 +458,41 @@ hbni(const int offload, NeighList *list, IntelBuffers<flt_t,acc_t> *buffers,
|
|||||||
for ( ; ns < pad_end; ns++)
|
for ( ; ns < pad_end; ns++)
|
||||||
neighptr[ns] = e_nall;
|
neighptr[ns] = e_nall;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
numneigh[i] = ns;
|
numneigh[i] = ns;
|
||||||
|
|
||||||
#ifdef OUTER_CHUNK
|
#ifdef OUTER_CHUNK
|
||||||
if (ns > max_chunk) max_chunk = ns;
|
if (ns > max_chunk) max_chunk = ns;
|
||||||
lane++;
|
lane++;
|
||||||
if (lane == swidth) {
|
if (lane == swidth) {
|
||||||
ct += max_chunk * swidth;
|
ct += max_chunk * swidth;
|
||||||
const int alignb = (INTEL_DATA_ALIGN / sizeof(int));
|
const int alignb = (INTEL_DATA_ALIGN / sizeof(int));
|
||||||
int edge = (ct % alignb);
|
int edge = (ct % alignb);
|
||||||
if (edge) ct += alignb - edge;
|
if (edge) ct += alignb - edge;
|
||||||
neighptr = firstneigh + ct;
|
neighptr = firstneigh + ct;
|
||||||
max_chunk = 0;
|
max_chunk = 0;
|
||||||
pack_offset = maxnbors * swidth;
|
pack_offset = maxnbors * swidth;
|
||||||
lane = 0;
|
lane = 0;
|
||||||
if (ct + obound > list_size) {
|
if (ct + obound > list_size) {
|
||||||
if (i < ito - 1) {
|
if (i < ito - 1) {
|
||||||
*overflow = 1;
|
*overflow = 1;
|
||||||
ct = (ifrom + tid * 2) * maxnbors;
|
ct = (ifrom + tid * 2) * maxnbors;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
ct += ns;
|
ct += ns;
|
||||||
const int alignb = (INTEL_DATA_ALIGN / sizeof(int));
|
const int alignb = (INTEL_DATA_ALIGN / sizeof(int));
|
||||||
edge = (ct % alignb);
|
edge = (ct % alignb);
|
||||||
if (edge) ct += alignb - edge;
|
if (edge) ct += alignb - edge;
|
||||||
neighptr = firstneigh + ct;
|
neighptr = firstneigh + ct;
|
||||||
if (ct + obound > list_size) {
|
if (ct + obound > list_size) {
|
||||||
if (i < ito - 1) {
|
if (i < ito - 1) {
|
||||||
*overflow = 1;
|
*overflow = 1;
|
||||||
ct = (ifrom + tid * 2) * maxnbors;
|
ct = (ifrom + tid * 2) * maxnbors;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
if (*overflow == 1)
|
if (*overflow == 1)
|
||||||
@ -505,25 +505,25 @@ hbni(const int offload, NeighList *list, IntelBuffers<flt_t,acc_t> *buffers,
|
|||||||
#pragma omp critical
|
#pragma omp critical
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
if (lmin < overflow[LMP_LOCAL_MIN]) overflow[LMP_LOCAL_MIN] = lmin;
|
if (lmin < overflow[LMP_LOCAL_MIN]) overflow[LMP_LOCAL_MIN] = lmin;
|
||||||
if (lmax > overflow[LMP_LOCAL_MAX]) overflow[LMP_LOCAL_MAX] = lmax;
|
if (lmax > overflow[LMP_LOCAL_MAX]) overflow[LMP_LOCAL_MAX] = lmax;
|
||||||
if (gmin < overflow[LMP_GHOST_MIN]) overflow[LMP_GHOST_MIN] = gmin;
|
if (gmin < overflow[LMP_GHOST_MIN]) overflow[LMP_GHOST_MIN] = gmin;
|
||||||
if (gmax > overflow[LMP_GHOST_MAX]) overflow[LMP_GHOST_MAX] = gmax;
|
if (gmax > overflow[LMP_GHOST_MAX]) overflow[LMP_GHOST_MAX] = gmax;
|
||||||
}
|
}
|
||||||
#pragma omp barrier
|
#pragma omp barrier
|
||||||
}
|
}
|
||||||
|
|
||||||
int ghost_offset = 0, nall_offset = e_nall;
|
int ghost_offset = 0, nall_offset = e_nall;
|
||||||
if (separate_buffers) {
|
if (separate_buffers) {
|
||||||
int nghost = overflow[LMP_GHOST_MAX] + 1 - overflow[LMP_GHOST_MIN];
|
int nghost = overflow[LMP_GHOST_MAX] + 1 - overflow[LMP_GHOST_MIN];
|
||||||
if (nghost < 0) nghost = 0;
|
if (nghost < 0) nghost = 0;
|
||||||
if (offload) {
|
if (offload) {
|
||||||
ghost_offset = overflow[LMP_GHOST_MIN] - overflow[LMP_LOCAL_MAX] - 1;
|
ghost_offset = overflow[LMP_GHOST_MIN] - overflow[LMP_LOCAL_MAX] - 1;
|
||||||
nall_offset = overflow[LMP_LOCAL_MAX] + 1 + nghost;
|
nall_offset = overflow[LMP_LOCAL_MAX] + 1 + nghost;
|
||||||
} else {
|
} else {
|
||||||
ghost_offset = overflow[LMP_GHOST_MIN] - nlocal;
|
ghost_offset = overflow[LMP_GHOST_MIN] - nlocal;
|
||||||
nall_offset = nlocal + nghost;
|
nall_offset = nlocal + nghost;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -531,49 +531,49 @@ hbni(const int offload, NeighList *list, IntelBuffers<flt_t,acc_t> *buffers,
|
|||||||
for (int i = ifrom; i < ito; ++i) {
|
for (int i = ifrom; i < ito; ++i) {
|
||||||
int * _noalias jlist = firstneigh + cnumneigh[i];
|
int * _noalias jlist = firstneigh + cnumneigh[i];
|
||||||
const int jnum = numneigh[i];
|
const int jnum = numneigh[i];
|
||||||
#ifndef OUTER_CHUNK
|
#ifndef OUTER_CHUNK
|
||||||
#if defined(LMP_SIMD_COMPILER)
|
#if defined(LMP_SIMD_COMPILER)
|
||||||
#pragma vector aligned
|
#pragma vector aligned
|
||||||
#pragma simd
|
#pragma simd
|
||||||
#endif
|
#endif
|
||||||
for (int jj = 0; jj < jnum; jj++) {
|
for (int jj = 0; jj < jnum; jj++) {
|
||||||
#else
|
#else
|
||||||
const int trip = jnum * swidth;
|
const int trip = jnum * swidth;
|
||||||
for (int jj = 0; jj < trip; jj+= swidth) {
|
for (int jj = 0; jj < trip; jj+= swidth) {
|
||||||
#endif
|
#endif
|
||||||
const int j = jlist[jj];
|
const int j = jlist[jj];
|
||||||
if (need_ic && j < 0) {
|
if (need_ic && j < 0) {
|
||||||
which = 0;
|
which = 0;
|
||||||
jlist[jj] = -j - 1;
|
jlist[jj] = -j - 1;
|
||||||
} else
|
} else
|
||||||
ofind_special(which, special, nspecial, i, tag[j]);
|
ofind_special(which, special, nspecial, i, tag[j]);
|
||||||
#ifdef _LMP_INTEL_OFFLOAD
|
#ifdef _LMP_INTEL_OFFLOAD
|
||||||
if (j >= nlocal) {
|
if (j >= nlocal) {
|
||||||
if (j == e_nall)
|
if (j == e_nall)
|
||||||
jlist[jj] = nall_offset;
|
jlist[jj] = nall_offset;
|
||||||
else if (which)
|
else if (which)
|
||||||
jlist[jj] = (j-ghost_offset) ^ (which << SBBITS);
|
jlist[jj] = (j-ghost_offset) ^ (which << SBBITS);
|
||||||
else jlist[jj]-=ghost_offset;
|
else jlist[jj]-=ghost_offset;
|
||||||
} else
|
} else
|
||||||
#endif
|
#endif
|
||||||
if (which) jlist[jj] = j ^ (which << SBBITS);
|
if (which) jlist[jj] = j ^ (which << SBBITS);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#ifdef _LMP_INTEL_OFFLOAD
|
#ifdef _LMP_INTEL_OFFLOAD
|
||||||
else if (separate_buffers) {
|
else if (separate_buffers) {
|
||||||
for (int i = ifrom; i < ito; ++i) {
|
for (int i = ifrom; i < ito; ++i) {
|
||||||
int * _noalias jlist = firstneigh + cnumneigh[i];
|
int * _noalias jlist = firstneigh + cnumneigh[i];
|
||||||
const int jnum = numneigh[i];
|
const int jnum = numneigh[i];
|
||||||
int jj = 0;
|
int jj = 0;
|
||||||
for (jj = 0; jj < jnum; jj++)
|
for (jj = 0; jj < jnum; jj++)
|
||||||
if (jlist[jj] >= nlocal) break;
|
if (jlist[jj] >= nlocal) break;
|
||||||
while (jj < jnum) {
|
while (jj < jnum) {
|
||||||
if (jlist[jj] == e_nall) jlist[jj] = nall_offset;
|
if (jlist[jj] == e_nall) jlist[jj] = nall_offset;
|
||||||
else jlist[jj] -= ghost_offset;
|
else jlist[jj] -= ghost_offset;
|
||||||
jj++;
|
jj++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
} // end omp
|
} // end omp
|
||||||
@ -597,9 +597,9 @@ hbni(const int offload, NeighList *list, IntelBuffers<flt_t,acc_t> *buffers,
|
|||||||
_fix->start_watch(TIME_PACK);
|
_fix->start_watch(TIME_PACK);
|
||||||
_fix->set_neighbor_host_sizes();
|
_fix->set_neighbor_host_sizes();
|
||||||
buffers->pack_sep_from_single(_fix->host_min_local(),
|
buffers->pack_sep_from_single(_fix->host_min_local(),
|
||||||
_fix->host_used_local(),
|
_fix->host_used_local(),
|
||||||
_fix->host_min_ghost(),
|
_fix->host_min_ghost(),
|
||||||
_fix->host_used_ghost());
|
_fix->host_used_ghost());
|
||||||
_fix->stop_watch(TIME_PACK);
|
_fix->stop_watch(TIME_PACK);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -37,8 +37,8 @@ class NPairHalfBinNewtonIntel : public NPairIntel {
|
|||||||
template <class flt_t, class acc_t>
|
template <class flt_t, class acc_t>
|
||||||
void hbni(NeighList *, IntelBuffers<flt_t,acc_t> *);
|
void hbni(NeighList *, IntelBuffers<flt_t,acc_t> *);
|
||||||
template <class flt_t, class acc_t, int, int>
|
template <class flt_t, class acc_t, int, int>
|
||||||
void hbni(const int, NeighList *, IntelBuffers<flt_t,acc_t> *, const int,
|
void hbni(const int, NeighList *, IntelBuffers<flt_t,acc_t> *, const int,
|
||||||
const int, const int offload_end = 0);
|
const int, const int offload_end = 0);
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -26,7 +26,7 @@ using namespace LAMMPS_NS;
|
|||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
NPairHalfBinNewtonTriIntel::NPairHalfBinNewtonTriIntel(LAMMPS *lmp) :
|
NPairHalfBinNewtonTriIntel::NPairHalfBinNewtonTriIntel(LAMMPS *lmp) :
|
||||||
NPairIntel(lmp) {}
|
NPairIntel(lmp) {}
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
/* ----------------------------------------------------------------------
|
||||||
@ -75,7 +75,7 @@ hbnti(NeighList *list, IntelBuffers<flt_t,acc_t> *buffers) {
|
|||||||
int need_ic = 0;
|
int need_ic = 0;
|
||||||
if (atom->molecular)
|
if (atom->molecular)
|
||||||
dminimum_image_check(need_ic, neighbor->cutneighmax, neighbor->cutneighmax,
|
dminimum_image_check(need_ic, neighbor->cutneighmax, neighbor->cutneighmax,
|
||||||
neighbor->cutneighmax);
|
neighbor->cutneighmax);
|
||||||
|
|
||||||
#ifdef _LMP_INTEL_OFFLOAD
|
#ifdef _LMP_INTEL_OFFLOAD
|
||||||
if (need_ic) {
|
if (need_ic) {
|
||||||
@ -171,7 +171,7 @@ hbnti(const int offload, NeighList *list, IntelBuffers<flt_t,acc_t> *buffers,
|
|||||||
overflow = _fix->get_off_overflow_flag();
|
overflow = _fix->get_off_overflow_flag();
|
||||||
_fix->stop_watch(TIME_HOST_NEIGHBOR);
|
_fix->stop_watch(TIME_HOST_NEIGHBOR);
|
||||||
_fix->start_watch(TIME_OFFLOAD_LATENCY);
|
_fix->start_watch(TIME_OFFLOAD_LATENCY);
|
||||||
} else
|
} else
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
tnum = comm->nthreads;
|
tnum = comm->nthreads;
|
||||||
@ -279,20 +279,20 @@ hbnti(const int offload, NeighList *list, IntelBuffers<flt_t,acc_t> *buffers,
|
|||||||
|
|
||||||
const int ibin = atombin[i];
|
const int ibin = atombin[i];
|
||||||
|
|
||||||
int raw_count = maxnbors;
|
int raw_count = maxnbors;
|
||||||
for (int k = 0; k < nstencilp; k++) {
|
for (int k = 0; k < nstencilp; k++) {
|
||||||
const int bstart = binhead[ibin + binstart[k]];
|
const int bstart = binhead[ibin + binstart[k]];
|
||||||
const int bend = binhead[ibin + binend[k]];
|
const int bend = binhead[ibin + binend[k]];
|
||||||
for (int jj = bstart; jj < bend; jj++) {
|
for (int jj = bstart; jj < bend; jj++) {
|
||||||
const int j = binpacked[jj];
|
const int j = binpacked[jj];
|
||||||
|
|
||||||
#ifdef _LMP_INTEL_OFFLOAD
|
#ifdef _LMP_INTEL_OFFLOAD
|
||||||
if (offload_noghost) {
|
if (offload_noghost) {
|
||||||
if (j < nlocal) {
|
if (j < nlocal) {
|
||||||
if (i < offload_end) continue;
|
if (i < offload_end) continue;
|
||||||
} else if (offload) continue;
|
} else if (offload) continue;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (x[j].z < ztmp) continue;
|
if (x[j].z < ztmp) continue;
|
||||||
if (x[j].z == ztmp) {
|
if (x[j].z == ztmp) {
|
||||||
@ -305,45 +305,45 @@ hbnti(const int offload, NeighList *list, IntelBuffers<flt_t,acc_t> *buffers,
|
|||||||
|
|
||||||
#ifndef _LMP_INTEL_OFFLOAD
|
#ifndef _LMP_INTEL_OFFLOAD
|
||||||
if (exclude) {
|
if (exclude) {
|
||||||
const int jtype = x[j].w;
|
const int jtype = x[j].w;
|
||||||
if (exclusion(i,j,itype,jtype,mask,molecule)) continue;
|
if (exclusion(i,j,itype,jtype,mask,molecule)) continue;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
neighptr[raw_count++] = j;
|
neighptr[raw_count++] = j;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (raw_count > obound)
|
if (raw_count > obound)
|
||||||
*overflow = 1;
|
*overflow = 1;
|
||||||
|
|
||||||
#if defined(LMP_SIMD_COMPILER)
|
#if defined(LMP_SIMD_COMPILER)
|
||||||
#ifdef _LMP_INTEL_OFFLOAD
|
#ifdef _LMP_INTEL_OFFLOAD
|
||||||
int vlmin = lmin, vlmax = lmax, vgmin = gmin, vgmax = gmax;
|
int vlmin = lmin, vlmax = lmax, vgmin = gmin, vgmax = gmax;
|
||||||
#if __INTEL_COMPILER+0 > 1499
|
#if __INTEL_COMPILER+0 > 1499
|
||||||
#pragma vector aligned
|
#pragma vector aligned
|
||||||
#pragma simd reduction(max:vlmax,vgmax) reduction(min:vlmin, vgmin)
|
#pragma simd reduction(max:vlmax,vgmax) reduction(min:vlmin, vgmin)
|
||||||
#endif
|
#endif
|
||||||
#else
|
#else
|
||||||
#pragma vector aligned
|
#pragma vector aligned
|
||||||
#pragma simd
|
#pragma simd
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
for (int u = maxnbors; u < raw_count; u++) {
|
for (int u = maxnbors; u < raw_count; u++) {
|
||||||
int j = neighptr[u];
|
int j = neighptr[u];
|
||||||
const flt_t delx = xtmp - x[j].x;
|
const flt_t delx = xtmp - x[j].x;
|
||||||
const flt_t dely = ytmp - x[j].y;
|
const flt_t dely = ytmp - x[j].y;
|
||||||
const flt_t delz = ztmp - x[j].z;
|
const flt_t delz = ztmp - x[j].z;
|
||||||
const int jtype = x[j].w;
|
const int jtype = x[j].w;
|
||||||
const flt_t rsq = delx * delx + dely * dely + delz * delz;
|
const flt_t rsq = delx * delx + dely * dely + delz * delz;
|
||||||
if (rsq > cutneighsq[ioffset + jtype])
|
if (rsq > cutneighsq[ioffset + jtype])
|
||||||
neighptr[u] = e_nall;
|
neighptr[u] = e_nall;
|
||||||
else {
|
else {
|
||||||
if (need_ic) {
|
if (need_ic) {
|
||||||
int no_special;
|
int no_special;
|
||||||
ominimum_image_check(no_special, delx, dely, delz);
|
ominimum_image_check(no_special, delx, dely, delz);
|
||||||
if (no_special)
|
if (no_special)
|
||||||
neighptr[u] = -j - 1;
|
neighptr[u] = -j - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef _LMP_INTEL_OFFLOAD
|
#ifdef _LMP_INTEL_OFFLOAD
|
||||||
if (j < nlocal) {
|
if (j < nlocal) {
|
||||||
@ -358,26 +358,26 @@ hbnti(const int offload, NeighList *list, IntelBuffers<flt_t,acc_t> *buffers,
|
|||||||
}
|
}
|
||||||
|
|
||||||
int n = 0, n2 = maxnbors;
|
int n = 0, n2 = maxnbors;
|
||||||
for (int u = maxnbors; u < raw_count; u++) {
|
for (int u = maxnbors; u < raw_count; u++) {
|
||||||
const int j = neighptr[u];
|
const int j = neighptr[u];
|
||||||
int pj = j;
|
int pj = j;
|
||||||
if (pj < e_nall) {
|
if (pj < e_nall) {
|
||||||
if (need_ic)
|
if (need_ic)
|
||||||
if (pj < 0) pj = -pj - 1;
|
if (pj < 0) pj = -pj - 1;
|
||||||
|
|
||||||
if (pj < nlocal)
|
if (pj < nlocal)
|
||||||
neighptr[n++] = j;
|
neighptr[n++] = j;
|
||||||
else
|
else
|
||||||
neighptr[n2++] = j;
|
neighptr[n2++] = j;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
int ns = n;
|
int ns = n;
|
||||||
for (int u = maxnbors; u < n2; u++)
|
for (int u = maxnbors; u < n2; u++)
|
||||||
neighptr[n++] = neighptr[u];
|
neighptr[n++] = neighptr[u];
|
||||||
|
|
||||||
ilist[i] = i;
|
ilist[i] = i;
|
||||||
cnumneigh[i] = ct;
|
cnumneigh[i] = ct;
|
||||||
ns += n2 - maxnbors;
|
ns += n2 - maxnbors;
|
||||||
|
|
||||||
int edge = (ns % pad_width);
|
int edge = (ns % pad_width);
|
||||||
if (edge) {
|
if (edge) {
|
||||||
@ -390,17 +390,17 @@ hbnti(const int offload, NeighList *list, IntelBuffers<flt_t,acc_t> *buffers,
|
|||||||
}
|
}
|
||||||
numneigh[i] = ns;
|
numneigh[i] = ns;
|
||||||
|
|
||||||
ct += ns;
|
ct += ns;
|
||||||
const int alignb = (INTEL_DATA_ALIGN / sizeof(int));
|
const int alignb = (INTEL_DATA_ALIGN / sizeof(int));
|
||||||
edge = (ct % alignb);
|
edge = (ct % alignb);
|
||||||
if (edge) ct += alignb - edge;
|
if (edge) ct += alignb - edge;
|
||||||
neighptr = firstneigh + ct;
|
neighptr = firstneigh + ct;
|
||||||
if (ct + obound > list_size) {
|
if (ct + obound > list_size) {
|
||||||
if (i < ito - 1) {
|
if (i < ito - 1) {
|
||||||
*overflow = 1;
|
*overflow = 1;
|
||||||
ct = (ifrom + tid * 2) * maxnbors;
|
ct = (ifrom + tid * 2) * maxnbors;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (*overflow == 1)
|
if (*overflow == 1)
|
||||||
@ -428,7 +428,7 @@ hbnti(const int offload, NeighList *list, IntelBuffers<flt_t,acc_t> *buffers,
|
|||||||
if (offload) {
|
if (offload) {
|
||||||
ghost_offset = overflow[LMP_GHOST_MIN] - overflow[LMP_LOCAL_MAX] - 1;
|
ghost_offset = overflow[LMP_GHOST_MIN] - overflow[LMP_LOCAL_MAX] - 1;
|
||||||
nall_offset = overflow[LMP_LOCAL_MAX] + 1 + nghost;
|
nall_offset = overflow[LMP_LOCAL_MAX] + 1 + nghost;
|
||||||
} else {
|
} else {
|
||||||
ghost_offset = overflow[LMP_GHOST_MIN] - nlocal;
|
ghost_offset = overflow[LMP_GHOST_MIN] - nlocal;
|
||||||
nall_offset = nlocal + nghost;
|
nall_offset = nlocal + nghost;
|
||||||
}
|
}
|
||||||
@ -440,43 +440,43 @@ hbnti(const int offload, NeighList *list, IntelBuffers<flt_t,acc_t> *buffers,
|
|||||||
int * _noalias jlist = firstneigh + cnumneigh[i];
|
int * _noalias jlist = firstneigh + cnumneigh[i];
|
||||||
const int jnum = numneigh[i];
|
const int jnum = numneigh[i];
|
||||||
#if defined(LMP_SIMD_COMPILER)
|
#if defined(LMP_SIMD_COMPILER)
|
||||||
#pragma vector aligned
|
#pragma vector aligned
|
||||||
#pragma simd
|
#pragma simd
|
||||||
#endif
|
#endif
|
||||||
for (int jj = 0; jj < jnum; jj++) {
|
for (int jj = 0; jj < jnum; jj++) {
|
||||||
const int j = jlist[jj];
|
const int j = jlist[jj];
|
||||||
if (need_ic && j < 0) {
|
if (need_ic && j < 0) {
|
||||||
which = 0;
|
which = 0;
|
||||||
jlist[jj] = -j - 1;
|
jlist[jj] = -j - 1;
|
||||||
} else
|
} else
|
||||||
ofind_special(which, special, nspecial, i, tag[j]);
|
ofind_special(which, special, nspecial, i, tag[j]);
|
||||||
#ifdef _LMP_INTEL_OFFLOAD
|
#ifdef _LMP_INTEL_OFFLOAD
|
||||||
if (j >= nlocal) {
|
if (j >= nlocal) {
|
||||||
if (j == e_nall)
|
if (j == e_nall)
|
||||||
jlist[jj] = nall_offset;
|
jlist[jj] = nall_offset;
|
||||||
else if (which)
|
else if (which)
|
||||||
jlist[jj] = (j-ghost_offset) ^ (which << SBBITS);
|
jlist[jj] = (j-ghost_offset) ^ (which << SBBITS);
|
||||||
else jlist[jj]-=ghost_offset;
|
else jlist[jj]-=ghost_offset;
|
||||||
} else
|
} else
|
||||||
#endif
|
#endif
|
||||||
if (which) jlist[jj] = j ^ (which << SBBITS);
|
if (which) jlist[jj] = j ^ (which << SBBITS);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#ifdef _LMP_INTEL_OFFLOAD
|
#ifdef _LMP_INTEL_OFFLOAD
|
||||||
else if (separate_buffers) {
|
else if (separate_buffers) {
|
||||||
for (int i = ifrom; i < ito; ++i) {
|
for (int i = ifrom; i < ito; ++i) {
|
||||||
int * _noalias jlist = firstneigh + cnumneigh[i];
|
int * _noalias jlist = firstneigh + cnumneigh[i];
|
||||||
const int jnum = numneigh[i];
|
const int jnum = numneigh[i];
|
||||||
int jj = 0;
|
int jj = 0;
|
||||||
for (jj = 0; jj < jnum; jj++)
|
for (jj = 0; jj < jnum; jj++)
|
||||||
if (jlist[jj] >= nlocal) break;
|
if (jlist[jj] >= nlocal) break;
|
||||||
while (jj < jnum) {
|
while (jj < jnum) {
|
||||||
if (jlist[jj] == e_nall) jlist[jj] = nall_offset;
|
if (jlist[jj] == e_nall) jlist[jj] = nall_offset;
|
||||||
else jlist[jj] -= ghost_offset;
|
else jlist[jj] -= ghost_offset;
|
||||||
jj++;
|
jj++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
} // end omp
|
} // end omp
|
||||||
@ -500,9 +500,9 @@ hbnti(const int offload, NeighList *list, IntelBuffers<flt_t,acc_t> *buffers,
|
|||||||
_fix->start_watch(TIME_PACK);
|
_fix->start_watch(TIME_PACK);
|
||||||
_fix->set_neighbor_host_sizes();
|
_fix->set_neighbor_host_sizes();
|
||||||
buffers->pack_sep_from_single(_fix->host_min_local(),
|
buffers->pack_sep_from_single(_fix->host_min_local(),
|
||||||
_fix->host_used_local(),
|
_fix->host_used_local(),
|
||||||
_fix->host_min_ghost(),
|
_fix->host_min_ghost(),
|
||||||
_fix->host_used_ghost());
|
_fix->host_used_ghost());
|
||||||
_fix->stop_watch(TIME_PACK);
|
_fix->stop_watch(TIME_PACK);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -38,7 +38,7 @@ class NPairHalfBinNewtonTriIntel : public NPairIntel {
|
|||||||
void hbnti(NeighList *, IntelBuffers<flt_t,acc_t> *);
|
void hbnti(NeighList *, IntelBuffers<flt_t,acc_t> *);
|
||||||
template <class flt_t, class acc_t, int, int>
|
template <class flt_t, class acc_t, int, int>
|
||||||
void hbnti(const int, NeighList *, IntelBuffers<flt_t,acc_t> *, const int,
|
void hbnti(const int, NeighList *, IntelBuffers<flt_t,acc_t> *, const int,
|
||||||
const int, const int offload_end = 0);
|
const int, const int offload_end = 0);
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -62,6 +62,6 @@ void NPairIntel::grow_stencil()
|
|||||||
const int maxstencil = ns->get_maxstencil();
|
const int maxstencil = ns->get_maxstencil();
|
||||||
#pragma offload_transfer target(mic:_cop) \
|
#pragma offload_transfer target(mic:_cop) \
|
||||||
in(stencil:length(maxstencil) alloc_if(1) free_if(0))
|
in(stencil:length(maxstencil) alloc_if(1) free_if(0))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@ -7,10 +7,14 @@ box). It achieves this using the RATTLE constraint algorithm applied
|
|||||||
to single-particle constraint functions g(xi,yi,zi) = 0 and their
|
to single-particle constraint functions g(xi,yi,zi) = 0 and their
|
||||||
derivative (i.e. the normal of the manifold) n = grad(g).
|
derivative (i.e. the normal of the manifold) n = grad(g).
|
||||||
|
|
||||||
Stefan Paquay, s.paquay@tue.nl
|
Stefan Paquay, stefanpaquay@gmail.com
|
||||||
Applied Physics/Theory of Polymers and Soft Matter,
|
|
||||||
|
until 2017: Applied Physics/Theory of Polymers and Soft Matter,
|
||||||
Eindhoven University of Technology (TU/e), The Netherlands
|
Eindhoven University of Technology (TU/e), The Netherlands
|
||||||
|
|
||||||
|
since 2017: Brandeis University, Waltham, MA, USA.
|
||||||
|
|
||||||
|
|
||||||
Thanks to Remy Kusters at TU/e for testing.
|
Thanks to Remy Kusters at TU/e for testing.
|
||||||
|
|
||||||
This software is distributed under the GNU General Public License.
|
This software is distributed under the GNU General Public License.
|
||||||
|
|||||||
@ -64,7 +64,6 @@ pair_style gauss/cut, Axel Kohlmeyer, akohlmey at gmail.com, 1 Dec 11
|
|||||||
pair_style lennard/mdf, Paolo Raiteri, p.raiteri at curtin.edu.au, 2 Dec 15
|
pair_style lennard/mdf, Paolo Raiteri, p.raiteri at curtin.edu.au, 2 Dec 15
|
||||||
pair_style list, Axel Kohlmeyer (Temple U), akohlmey at gmail.com, 1 Jun 13
|
pair_style list, Axel Kohlmeyer (Temple U), akohlmey at gmail.com, 1 Jun 13
|
||||||
pair_style lj/mdf, Paolo Raiteri, p.raiteri at curtin.edu.au, 2 Dec 15
|
pair_style lj/mdf, Paolo Raiteri, p.raiteri at curtin.edu.au, 2 Dec 15
|
||||||
pair_style lj/sf, Laurent Joly (U Lyon), ljoly.ulyon at gmail.com, 8 Aug 11
|
|
||||||
pair_style kolmogorov/crespi/z, Jaap Kroes (Radboud U), jaapkroes at gmail dot com, 28 Feb 17
|
pair_style kolmogorov/crespi/z, Jaap Kroes (Radboud U), jaapkroes at gmail dot com, 28 Feb 17
|
||||||
pair_style meam/spline, Alexander Stukowski (LLNL), alex at stukowski.com, 1 Feb 12
|
pair_style meam/spline, Alexander Stukowski (LLNL), alex at stukowski.com, 1 Feb 12
|
||||||
pair_style meam/sw/spline, Robert Rudd (LLNL), robert.rudd at llnl.gov, 1 Oct 12
|
pair_style meam/sw/spline, Robert Rudd (LLNL), robert.rudd at llnl.gov, 1 Oct 12
|
||||||
|
|||||||
@ -456,11 +456,11 @@ void PairCDEAM::read_h_coeff(char *filename)
|
|||||||
{
|
{
|
||||||
if(comm->me == 0) {
|
if(comm->me == 0) {
|
||||||
// Open potential file
|
// Open potential file
|
||||||
FILE *fp;
|
FILE *fptr;
|
||||||
char line[MAXLINE];
|
char line[MAXLINE];
|
||||||
char nextline[MAXLINE];
|
char nextline[MAXLINE];
|
||||||
fp = force->open_potential(filename);
|
fptr = force->open_potential(filename);
|
||||||
if (fp == NULL) {
|
if (fptr == NULL) {
|
||||||
char str[128];
|
char str[128];
|
||||||
sprintf(str,"Cannot open EAM potential file %s", filename);
|
sprintf(str,"Cannot open EAM potential file %s", filename);
|
||||||
error->one(FLERR,str);
|
error->one(FLERR,str);
|
||||||
@ -468,7 +468,7 @@ void PairCDEAM::read_h_coeff(char *filename)
|
|||||||
|
|
||||||
// h coefficients are stored at the end of the file.
|
// h coefficients are stored at the end of the file.
|
||||||
// Skip to last line of file.
|
// Skip to last line of file.
|
||||||
while(fgets(nextline, MAXLINE, fp) != NULL) {
|
while(fgets(nextline, MAXLINE, fptr) != NULL) {
|
||||||
strcpy(line, nextline);
|
strcpy(line, nextline);
|
||||||
}
|
}
|
||||||
char* ptr = strtok(line, " \t\n\r\f");
|
char* ptr = strtok(line, " \t\n\r\f");
|
||||||
@ -483,7 +483,7 @@ void PairCDEAM::read_h_coeff(char *filename)
|
|||||||
error->one(FLERR,"Failed to read h(x) function coefficients from EAM file.");
|
error->one(FLERR,"Failed to read h(x) function coefficients from EAM file.");
|
||||||
|
|
||||||
// Close the potential file.
|
// Close the potential file.
|
||||||
fclose(fp);
|
fclose(fptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
MPI_Bcast(&nhcoeff, 1, MPI_INT, 0, world);
|
MPI_Bcast(&nhcoeff, 1, MPI_INT, 0, world);
|
||||||
|
|||||||
@ -1,355 +0,0 @@
|
|||||||
/* ----------------------------------------------------------------------
|
|
||||||
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 author: Laurent Joly (U Lyon), ljoly.ulyon@gmail.com
|
|
||||||
------------------------------------------------------------------------- */
|
|
||||||
|
|
||||||
#include <math.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include "pair_lj_sf.h"
|
|
||||||
#include "atom.h"
|
|
||||||
#include "comm.h"
|
|
||||||
#include "force.h"
|
|
||||||
#include "neigh_list.h"
|
|
||||||
#include "memory.h"
|
|
||||||
#include "error.h"
|
|
||||||
|
|
||||||
using namespace LAMMPS_NS;
|
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
|
||||||
|
|
||||||
PairLJShiftedForce::PairLJShiftedForce(LAMMPS *lmp) : Pair(lmp)
|
|
||||||
{
|
|
||||||
respa_enable = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
|
||||||
|
|
||||||
PairLJShiftedForce::~PairLJShiftedForce()
|
|
||||||
{
|
|
||||||
if (allocated) {
|
|
||||||
memory->destroy(setflag);
|
|
||||||
memory->destroy(cutsq);
|
|
||||||
|
|
||||||
memory->destroy(cut);
|
|
||||||
memory->destroy(epsilon);
|
|
||||||
memory->destroy(sigma);
|
|
||||||
memory->destroy(lj1);
|
|
||||||
memory->destroy(lj2);
|
|
||||||
memory->destroy(lj3);
|
|
||||||
memory->destroy(lj4);
|
|
||||||
memory->destroy(foffset);
|
|
||||||
memory->destroy(offset);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
|
||||||
|
|
||||||
void PairLJShiftedForce::compute(int eflag, int vflag)
|
|
||||||
{
|
|
||||||
int i,j,ii,jj,inum,jnum,itype,jtype;
|
|
||||||
double xtmp,ytmp,ztmp,delx,dely,delz,evdwl,fpair;
|
|
||||||
double rsq,r2inv,r6inv,forcelj,factor_lj;
|
|
||||||
double r,t;
|
|
||||||
int *ilist,*jlist,*numneigh,**firstneigh;
|
|
||||||
|
|
||||||
evdwl = 0.0;
|
|
||||||
if (eflag || vflag) ev_setup(eflag,vflag);
|
|
||||||
else evflag = vflag_fdotr = 0;
|
|
||||||
|
|
||||||
double **x = atom->x;
|
|
||||||
double **f = atom->f;
|
|
||||||
int *type = atom->type;
|
|
||||||
int nlocal = atom->nlocal;
|
|
||||||
double *special_lj = force->special_lj;
|
|
||||||
int newton_pair = force->newton_pair;
|
|
||||||
|
|
||||||
inum = list->inum;
|
|
||||||
ilist = list->ilist;
|
|
||||||
numneigh = list->numneigh;
|
|
||||||
firstneigh = list->firstneigh;
|
|
||||||
|
|
||||||
// loop over neighbors of my atoms
|
|
||||||
|
|
||||||
for (ii = 0; ii < inum; ii++) {
|
|
||||||
i = ilist[ii];
|
|
||||||
xtmp = x[i][0];
|
|
||||||
ytmp = x[i][1];
|
|
||||||
ztmp = x[i][2];
|
|
||||||
itype = type[i];
|
|
||||||
jlist = firstneigh[i];
|
|
||||||
jnum = numneigh[i];
|
|
||||||
|
|
||||||
for (jj = 0; jj < jnum; jj++) {
|
|
||||||
j = jlist[jj];
|
|
||||||
factor_lj = special_lj[sbmask(j)];
|
|
||||||
j &= NEIGHMASK;
|
|
||||||
|
|
||||||
delx = xtmp - x[j][0];
|
|
||||||
dely = ytmp - x[j][1];
|
|
||||||
delz = ztmp - x[j][2];
|
|
||||||
rsq = delx*delx + dely*dely + delz*delz;
|
|
||||||
jtype = type[j];
|
|
||||||
|
|
||||||
if (rsq < cutsq[itype][jtype]) {
|
|
||||||
r2inv = 1.0/rsq;
|
|
||||||
r6inv = r2inv*r2inv*r2inv;
|
|
||||||
r = sqrt(rsq);
|
|
||||||
t = r/cut[itype][jtype];
|
|
||||||
forcelj = r6inv * (lj1[itype][jtype]*r6inv - lj2[itype][jtype]) -
|
|
||||||
t*foffset[itype][jtype];
|
|
||||||
fpair = factor_lj*forcelj*r2inv;
|
|
||||||
|
|
||||||
f[i][0] += delx*fpair;
|
|
||||||
f[i][1] += dely*fpair;
|
|
||||||
f[i][2] += delz*fpair;
|
|
||||||
if (newton_pair || j < nlocal) {
|
|
||||||
f[j][0] -= delx*fpair;
|
|
||||||
f[j][1] -= dely*fpair;
|
|
||||||
f[j][2] -= delz*fpair;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (eflag) {
|
|
||||||
evdwl = r6inv*(lj3[itype][jtype]*r6inv-lj4[itype][jtype]) +
|
|
||||||
(t-1.0)*foffset[itype][jtype] - offset[itype][jtype];
|
|
||||||
evdwl *= factor_lj;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (evflag) ev_tally(i,j,nlocal,newton_pair,
|
|
||||||
evdwl,0.0,fpair,delx,dely,delz);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (vflag_fdotr) virial_fdotr_compute();
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
|
||||||
allocate all arrays
|
|
||||||
------------------------------------------------------------------------- */
|
|
||||||
|
|
||||||
void PairLJShiftedForce::allocate()
|
|
||||||
{
|
|
||||||
allocated = 1;
|
|
||||||
int n = atom->ntypes;
|
|
||||||
|
|
||||||
memory->create(setflag,n+1,n+1,"pair:setflag");
|
|
||||||
for (int i = 1; i <= n; i++)
|
|
||||||
for (int j = i; j <= n; j++)
|
|
||||||
setflag[i][j] = 0;
|
|
||||||
|
|
||||||
memory->create(cutsq,n+1,n+1,"pair:cutsq");
|
|
||||||
|
|
||||||
memory->create(cut,n+1,n+1,"pair:cut");
|
|
||||||
memory->create(epsilon,n+1,n+1,"pair:epsilon");
|
|
||||||
memory->create(sigma,n+1,n+1,"pair:sigma");
|
|
||||||
memory->create(lj1,n+1,n+1,"pair:lj1");
|
|
||||||
memory->create(lj2,n+1,n+1,"pair:lj2");
|
|
||||||
memory->create(lj3,n+1,n+1,"pair:lj3");
|
|
||||||
memory->create(lj4,n+1,n+1,"pair:lj4");
|
|
||||||
memory->create(foffset,n+1,n+1,"pair:foffset");
|
|
||||||
memory->create(offset,n+1,n+1,"pair:offset");
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
|
||||||
global settings
|
|
||||||
------------------------------------------------------------------------- */
|
|
||||||
|
|
||||||
void PairLJShiftedForce::settings(int narg, char **arg)
|
|
||||||
{
|
|
||||||
if (narg != 1) error->all(FLERR,"Illegal pair_style command");
|
|
||||||
|
|
||||||
cut_global = force->numeric(FLERR,arg[0]);
|
|
||||||
|
|
||||||
if (cut_global <= 0.0)
|
|
||||||
error->all(FLERR,"Illegal pair_style command");
|
|
||||||
|
|
||||||
// reset cutoffs that have been explicitly set
|
|
||||||
|
|
||||||
if (allocated) {
|
|
||||||
int i,j;
|
|
||||||
for (i = 1; i <= atom->ntypes; i++)
|
|
||||||
for (j = i; j <= atom->ntypes; j++)
|
|
||||||
if (setflag[i][j]) cut[i][j] = cut_global;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
|
||||||
set coeffs for one or more type pairs
|
|
||||||
------------------------------------------------------------------------- */
|
|
||||||
|
|
||||||
void PairLJShiftedForce::coeff(int narg, char **arg)
|
|
||||||
{
|
|
||||||
if (narg < 4 || narg > 5)
|
|
||||||
error->all(FLERR,"Incorrect args for pair coefficients");
|
|
||||||
if (!allocated) allocate();
|
|
||||||
|
|
||||||
int ilo,ihi,jlo,jhi;
|
|
||||||
force->bounds(FLERR,arg[0],atom->ntypes,ilo,ihi);
|
|
||||||
force->bounds(FLERR,arg[1],atom->ntypes,jlo,jhi);
|
|
||||||
|
|
||||||
double epsilon_one = force->numeric(FLERR,arg[2]);
|
|
||||||
double sigma_one = force->numeric(FLERR,arg[3]);
|
|
||||||
|
|
||||||
double cut_one = cut_global;
|
|
||||||
if (narg == 5) cut_one = force->numeric(FLERR,arg[4]);
|
|
||||||
|
|
||||||
if (cut_one <= 0.0)
|
|
||||||
error->all(FLERR,"Incorrect args for pair coefficients");
|
|
||||||
|
|
||||||
int count = 0;
|
|
||||||
for (int i = ilo; i <= ihi; i++) {
|
|
||||||
for (int j = MAX(jlo,i); j <= jhi; j++) {
|
|
||||||
epsilon[i][j] = epsilon_one;
|
|
||||||
sigma[i][j] = sigma_one;
|
|
||||||
cut[i][j] = cut_one;
|
|
||||||
setflag[i][j] = 1;
|
|
||||||
count++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (count == 0) error->all(FLERR,"Incorrect args for pair coefficients");
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
|
||||||
init for one type pair i,j and corresponding j,i
|
|
||||||
------------------------------------------------------------------------- */
|
|
||||||
|
|
||||||
double PairLJShiftedForce::init_one(int i, int j)
|
|
||||||
{
|
|
||||||
if (setflag[i][j] == 0) {
|
|
||||||
epsilon[i][j] = mix_energy(epsilon[i][i],epsilon[j][j],
|
|
||||||
sigma[i][i],sigma[j][j]);
|
|
||||||
sigma[i][j] = mix_distance(sigma[i][i],sigma[j][j]);
|
|
||||||
cut[i][j] = mix_distance(cut[i][i],cut[j][j]);
|
|
||||||
}
|
|
||||||
|
|
||||||
lj1[i][j] = 48.0 * epsilon[i][j] * pow(sigma[i][j],12.0);
|
|
||||||
lj2[i][j] = 24.0 * epsilon[i][j] * pow(sigma[i][j],6.0);
|
|
||||||
lj3[i][j] = 4.0 * epsilon[i][j] * pow(sigma[i][j],12.0);
|
|
||||||
lj4[i][j] = 4.0 * epsilon[i][j] * pow(sigma[i][j],6.0);
|
|
||||||
|
|
||||||
double ratio = sigma[i][j] / cut[i][j];
|
|
||||||
foffset[i][j] = 4.0 * epsilon[i][j] * (12.0 * pow(ratio,12.0) -
|
|
||||||
6.0 * pow(ratio,6.0));
|
|
||||||
offset[i][j] = 4.0 * epsilon[i][j] * (pow(ratio,12.0) - pow(ratio,6.0));
|
|
||||||
|
|
||||||
cut[j][i] = cut[i][j];
|
|
||||||
lj1[j][i] = lj1[i][j];
|
|
||||||
lj2[j][i] = lj2[i][j];
|
|
||||||
lj3[j][i] = lj3[i][j];
|
|
||||||
lj4[j][i] = lj4[i][j];
|
|
||||||
foffset[j][i] = foffset[i][j];
|
|
||||||
offset[j][i] = offset[i][j];
|
|
||||||
|
|
||||||
return cut[i][j];
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
|
||||||
proc 0 writes to restart file
|
|
||||||
------------------------------------------------------------------------- */
|
|
||||||
|
|
||||||
void PairLJShiftedForce::write_restart(FILE *fp)
|
|
||||||
{
|
|
||||||
write_restart_settings(fp);
|
|
||||||
|
|
||||||
int i,j;
|
|
||||||
for (i = 1; i <= atom->ntypes; i++)
|
|
||||||
for (j = i; j <= atom->ntypes; j++) {
|
|
||||||
fwrite(&setflag[i][j],sizeof(int),1,fp);
|
|
||||||
if (setflag[i][j]) {
|
|
||||||
fwrite(&epsilon[i][j],sizeof(double),1,fp);
|
|
||||||
fwrite(&sigma[i][j],sizeof(double),1,fp);
|
|
||||||
fwrite(&cut[i][j],sizeof(double),1,fp);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
|
||||||
proc 0 reads from restart file, bcasts
|
|
||||||
------------------------------------------------------------------------- */
|
|
||||||
|
|
||||||
void PairLJShiftedForce::read_restart(FILE *fp)
|
|
||||||
{
|
|
||||||
read_restart_settings(fp);
|
|
||||||
allocate();
|
|
||||||
|
|
||||||
int i,j;
|
|
||||||
int me = comm->me;
|
|
||||||
for (i = 1; i <= atom->ntypes; i++)
|
|
||||||
for (j = i; j <= atom->ntypes; j++) {
|
|
||||||
if (me == 0) fread(&setflag[i][j],sizeof(int),1,fp);
|
|
||||||
MPI_Bcast(&setflag[i][j],1,MPI_INT,0,world);
|
|
||||||
if (setflag[i][j]) {
|
|
||||||
if (me == 0) {
|
|
||||||
fread(&epsilon[i][j],sizeof(double),1,fp);
|
|
||||||
fread(&sigma[i][j],sizeof(double),1,fp);
|
|
||||||
fread(&cut[i][j],sizeof(double),1,fp);
|
|
||||||
}
|
|
||||||
MPI_Bcast(&epsilon[i][j],1,MPI_DOUBLE,0,world);
|
|
||||||
MPI_Bcast(&sigma[i][j],1,MPI_DOUBLE,0,world);
|
|
||||||
MPI_Bcast(&cut[i][j],1,MPI_DOUBLE,0,world);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
|
||||||
proc 0 writes to restart file
|
|
||||||
------------------------------------------------------------------------- */
|
|
||||||
|
|
||||||
void PairLJShiftedForce::write_restart_settings(FILE *fp)
|
|
||||||
{
|
|
||||||
fwrite(&cut_global,sizeof(double),1,fp);
|
|
||||||
fwrite(&offset_flag,sizeof(int),1,fp);
|
|
||||||
fwrite(&mix_flag,sizeof(int),1,fp);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
|
||||||
proc 0 reads from restart file, bcasts
|
|
||||||
------------------------------------------------------------------------- */
|
|
||||||
|
|
||||||
void PairLJShiftedForce::read_restart_settings(FILE *fp)
|
|
||||||
{
|
|
||||||
int me = comm->me;
|
|
||||||
if (me == 0) {
|
|
||||||
fread(&cut_global,sizeof(double),1,fp);
|
|
||||||
fread(&offset_flag,sizeof(int),1,fp);
|
|
||||||
fread(&mix_flag,sizeof(int),1,fp);
|
|
||||||
}
|
|
||||||
MPI_Bcast(&cut_global,1,MPI_DOUBLE,0,world);
|
|
||||||
MPI_Bcast(&offset_flag,1,MPI_INT,0,world);
|
|
||||||
MPI_Bcast(&mix_flag,1,MPI_INT,0,world);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
|
||||||
|
|
||||||
double PairLJShiftedForce::single(int i, int j, int itype, int jtype, double rsq,
|
|
||||||
double factor_coul, double factor_lj,
|
|
||||||
double &fforce)
|
|
||||||
{
|
|
||||||
double r2inv,r6inv,forcelj,philj,r,t;
|
|
||||||
|
|
||||||
r2inv = 1.0/rsq;
|
|
||||||
r6inv = r2inv*r2inv*r2inv;
|
|
||||||
r = sqrt(rsq);
|
|
||||||
t = r/cut[itype][jtype];
|
|
||||||
forcelj = r6inv * (lj1[itype][jtype]*r6inv - lj2[itype][jtype]) -
|
|
||||||
t*foffset[itype][jtype];
|
|
||||||
fforce = factor_lj*forcelj*r2inv;
|
|
||||||
|
|
||||||
philj = r6inv*(lj3[itype][jtype]*r6inv-lj4[itype][jtype]) +
|
|
||||||
(t-1.0)*foffset[itype][jtype] - offset[itype][jtype];
|
|
||||||
return factor_lj*philj;
|
|
||||||
}
|
|
||||||
@ -1,53 +0,0 @@
|
|||||||
/* -*- 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 PAIR_CLASS
|
|
||||||
|
|
||||||
PairStyle(lj/sf,PairLJShiftedForce)
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
#ifndef LMP_PAIR_LJ_SF_H
|
|
||||||
#define LMP_PAIR_LJ_SF_H
|
|
||||||
|
|
||||||
#include "pair.h"
|
|
||||||
|
|
||||||
namespace LAMMPS_NS {
|
|
||||||
|
|
||||||
class PairLJShiftedForce : public Pair {
|
|
||||||
public:
|
|
||||||
PairLJShiftedForce(class LAMMPS *);
|
|
||||||
virtual ~PairLJShiftedForce();
|
|
||||||
virtual void compute(int, int);
|
|
||||||
void settings(int, char **);
|
|
||||||
void coeff(int, char **);
|
|
||||||
double init_one(int, int);
|
|
||||||
void write_restart(FILE *);
|
|
||||||
void read_restart(FILE *);
|
|
||||||
void write_restart_settings(FILE *);
|
|
||||||
void read_restart_settings(FILE *);
|
|
||||||
double single(int, int, int, int, double, double, double, double &);
|
|
||||||
|
|
||||||
protected:
|
|
||||||
double cut_global;
|
|
||||||
double **cut;
|
|
||||||
double **epsilon,**sigma;
|
|
||||||
double **lj1,**lj2,**lj3,**lj4,**foffset,**offset;
|
|
||||||
|
|
||||||
void allocate();
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
@ -39,7 +39,7 @@ using namespace MathConst;
|
|||||||
|
|
||||||
enum{SINGLE,MOLECULE,GROUP}; // same as in FixRigid
|
enum{SINGLE,MOLECULE,GROUP}; // same as in FixRigid
|
||||||
|
|
||||||
#define EINERTIA 0.4 // moment of inertia prefactor for ellipsoid
|
#define EINERTIA 0.2 // moment of inertia prefactor for ellipsoid
|
||||||
|
|
||||||
typedef struct { double x,y,z; } dbl3_t;
|
typedef struct { double x,y,z; } dbl3_t;
|
||||||
|
|
||||||
|
|||||||
@ -37,7 +37,7 @@ using namespace LAMMPS_NS;
|
|||||||
using namespace FixConst;
|
using namespace FixConst;
|
||||||
using namespace MathConst;
|
using namespace MathConst;
|
||||||
|
|
||||||
#define EINERTIA 0.4 // moment of inertia prefactor for ellipsoid
|
#define EINERTIA 0.2 // moment of inertia prefactor for ellipsoid
|
||||||
|
|
||||||
enum{FULL_BODY,INITIAL,FINAL,FORCE_TORQUE,VCM_ANGMOM,XCM_MASS,ITENSOR,DOF};
|
enum{FULL_BODY,INITIAL,FINAL,FORCE_TORQUE,VCM_ANGMOM,XCM_MASS,ITENSOR,DOF};
|
||||||
|
|
||||||
|
|||||||
@ -1,164 +0,0 @@
|
|||||||
/* ----------------------------------------------------------------------
|
|
||||||
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
|
|
||||||
http://lammps.sandia.gov, Sandia National Laboratories
|
|
||||||
Steve Plimpton, sjplimp@sandia.gov
|
|
||||||
|
|
||||||
This software is distributed under the GNU General Public License.
|
|
||||||
|
|
||||||
See the README file in the top-level LAMMPS directory.
|
|
||||||
------------------------------------------------------------------------- */
|
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
|
||||||
Contributing author: Axel Kohlmeyer (Temple U)
|
|
||||||
------------------------------------------------------------------------- */
|
|
||||||
|
|
||||||
#include <math.h>
|
|
||||||
#include "pair_lj_sf_omp.h"
|
|
||||||
#include "atom.h"
|
|
||||||
#include "comm.h"
|
|
||||||
#include "force.h"
|
|
||||||
#include "neighbor.h"
|
|
||||||
#include "neigh_list.h"
|
|
||||||
|
|
||||||
#include "suffix.h"
|
|
||||||
using namespace LAMMPS_NS;
|
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
|
||||||
|
|
||||||
PairLJShiftedForceOMP::PairLJShiftedForceOMP(LAMMPS *lmp) :
|
|
||||||
PairLJShiftedForce(lmp), ThrOMP(lmp, THR_PAIR)
|
|
||||||
{
|
|
||||||
suffix_flag |= Suffix::OMP;
|
|
||||||
respa_enable = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
|
||||||
|
|
||||||
void PairLJShiftedForceOMP::compute(int eflag, int vflag)
|
|
||||||
{
|
|
||||||
if (eflag || vflag) {
|
|
||||||
ev_setup(eflag,vflag);
|
|
||||||
} else evflag = vflag_fdotr = 0;
|
|
||||||
|
|
||||||
const int nall = atom->nlocal + atom->nghost;
|
|
||||||
const int nthreads = comm->nthreads;
|
|
||||||
const int inum = list->inum;
|
|
||||||
|
|
||||||
#if defined(_OPENMP)
|
|
||||||
#pragma omp parallel default(none) shared(eflag,vflag)
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
int ifrom, ito, tid;
|
|
||||||
|
|
||||||
loop_setup_thr(ifrom, ito, tid, inum, nthreads);
|
|
||||||
ThrData *thr = fix->get_thr(tid);
|
|
||||||
thr->timer(Timer::START);
|
|
||||||
ev_setup_thr(eflag, vflag, nall, eatom, vatom, thr);
|
|
||||||
|
|
||||||
if (evflag) {
|
|
||||||
if (eflag) {
|
|
||||||
if (force->newton_pair) eval<1,1,1>(ifrom, ito, thr);
|
|
||||||
else eval<1,1,0>(ifrom, ito, thr);
|
|
||||||
} else {
|
|
||||||
if (force->newton_pair) eval<1,0,1>(ifrom, ito, thr);
|
|
||||||
else eval<1,0,0>(ifrom, ito, thr);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (force->newton_pair) eval<0,0,1>(ifrom, ito, thr);
|
|
||||||
else eval<0,0,0>(ifrom, ito, thr);
|
|
||||||
}
|
|
||||||
|
|
||||||
thr->timer(Timer::PAIR);
|
|
||||||
reduce_thr(this, eflag, vflag, thr);
|
|
||||||
} // end of omp parallel region
|
|
||||||
}
|
|
||||||
|
|
||||||
template <int EVFLAG, int EFLAG, int NEWTON_PAIR>
|
|
||||||
void PairLJShiftedForceOMP::eval(int iifrom, int iito, ThrData * const thr)
|
|
||||||
{
|
|
||||||
int i,j,ii,jj,jnum,itype,jtype;
|
|
||||||
double xtmp,ytmp,ztmp,delx,dely,delz,evdwl,fpair;
|
|
||||||
double t,rsq,r2inv,r6inv,forcelj,factor_lj;
|
|
||||||
int *ilist,*jlist,*numneigh,**firstneigh;
|
|
||||||
|
|
||||||
evdwl = 0.0;
|
|
||||||
|
|
||||||
const dbl3_t * _noalias const x = (dbl3_t *) atom->x[0];
|
|
||||||
dbl3_t * _noalias const f = (dbl3_t *) thr->get_f()[0];
|
|
||||||
const int * _noalias const type = atom->type;
|
|
||||||
const int nlocal = atom->nlocal;
|
|
||||||
const double * _noalias const special_lj = force->special_lj;
|
|
||||||
double fxtmp,fytmp,fztmp;
|
|
||||||
|
|
||||||
ilist = list->ilist;
|
|
||||||
numneigh = list->numneigh;
|
|
||||||
firstneigh = list->firstneigh;
|
|
||||||
|
|
||||||
// loop over neighbors of my atoms
|
|
||||||
|
|
||||||
for (ii = iifrom; ii < iito; ++ii) {
|
|
||||||
|
|
||||||
i = ilist[ii];
|
|
||||||
xtmp = x[i].x;
|
|
||||||
ytmp = x[i].y;
|
|
||||||
ztmp = x[i].z;
|
|
||||||
itype = type[i];
|
|
||||||
jlist = firstneigh[i];
|
|
||||||
jnum = numneigh[i];
|
|
||||||
fxtmp=fytmp=fztmp=0.0;
|
|
||||||
|
|
||||||
for (jj = 0; jj < jnum; jj++) {
|
|
||||||
j = jlist[jj];
|
|
||||||
factor_lj = special_lj[sbmask(j)];
|
|
||||||
j &= NEIGHMASK;
|
|
||||||
|
|
||||||
delx = xtmp - x[j].x;
|
|
||||||
dely = ytmp - x[j].y;
|
|
||||||
delz = ztmp - x[j].z;
|
|
||||||
rsq = delx*delx + dely*dely + delz*delz;
|
|
||||||
jtype = type[j];
|
|
||||||
|
|
||||||
if (rsq < cutsq[itype][jtype]) {
|
|
||||||
r2inv = 1.0/rsq;
|
|
||||||
r6inv = r2inv*r2inv*r2inv;
|
|
||||||
t = sqrt(rsq)/cut[itype][jtype];
|
|
||||||
|
|
||||||
forcelj = r6inv * (lj1[itype][jtype]*r6inv - lj2[itype][jtype]) -
|
|
||||||
t*foffset[itype][jtype];
|
|
||||||
|
|
||||||
fpair = factor_lj*forcelj*r2inv;
|
|
||||||
|
|
||||||
fxtmp += delx*fpair;
|
|
||||||
fytmp += dely*fpair;
|
|
||||||
fztmp += delz*fpair;
|
|
||||||
if (NEWTON_PAIR || j < nlocal) {
|
|
||||||
f[j].x -= delx*fpair;
|
|
||||||
f[j].y -= dely*fpair;
|
|
||||||
f[j].z -= delz*fpair;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (EFLAG) {
|
|
||||||
evdwl = r6inv*(lj3[itype][jtype]*r6inv-lj4[itype][jtype]) +
|
|
||||||
(t-1.0)*foffset[itype][jtype] - offset[itype][jtype];
|
|
||||||
evdwl *= factor_lj;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (EVFLAG) ev_tally_thr(this,i,j,nlocal,NEWTON_PAIR,
|
|
||||||
evdwl,0.0,fpair,delx,dely,delz,thr);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
f[i].x += fxtmp;
|
|
||||||
f[i].y += fytmp;
|
|
||||||
f[i].z += fztmp;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
|
||||||
|
|
||||||
double PairLJShiftedForceOMP::memory_usage()
|
|
||||||
{
|
|
||||||
double bytes = memory_usage_thr();
|
|
||||||
bytes += PairLJShiftedForce::memory_usage();
|
|
||||||
|
|
||||||
return bytes;
|
|
||||||
}
|
|
||||||
@ -1,48 +0,0 @@
|
|||||||
/* -*- 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.
|
|
||||||
------------------------------------------------------------------------- */
|
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
|
||||||
Contributing author: Axel Kohlmeyer (Temple U)
|
|
||||||
------------------------------------------------------------------------- */
|
|
||||||
|
|
||||||
#ifdef PAIR_CLASS
|
|
||||||
|
|
||||||
PairStyle(lj/sf/omp,PairLJShiftedForceOMP)
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
#ifndef LMP_PAIR_LJ_SF_OMP_H
|
|
||||||
#define LMP_PAIR_LJ_SF_OMP_H
|
|
||||||
|
|
||||||
#include "pair_lj_sf.h"
|
|
||||||
#include "thr_omp.h"
|
|
||||||
|
|
||||||
namespace LAMMPS_NS {
|
|
||||||
|
|
||||||
class PairLJShiftedForceOMP : public PairLJShiftedForce, public ThrOMP {
|
|
||||||
|
|
||||||
public:
|
|
||||||
PairLJShiftedForceOMP(class LAMMPS *);
|
|
||||||
|
|
||||||
virtual void compute(int, int);
|
|
||||||
virtual double memory_usage();
|
|
||||||
|
|
||||||
private:
|
|
||||||
template <int EVFLAG, int EFLAG, int NEWTON_PAIR>
|
|
||||||
void eval(int ifrom, int ito, ThrData * const thr);
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
@ -18,6 +18,7 @@
|
|||||||
#ifdef PAIR_CLASS
|
#ifdef PAIR_CLASS
|
||||||
|
|
||||||
PairStyle(lj/smooth/linear/omp,PairLJSmoothLinearOMP)
|
PairStyle(lj/smooth/linear/omp,PairLJSmoothLinearOMP)
|
||||||
|
PairStyle(lj/sf/omp,PairLJSmoothLinearOMP)
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
|
|||||||
@ -153,7 +153,7 @@ class Compute : protected Pointers {
|
|||||||
double **vbiasall; // stored velocity bias for all atoms
|
double **vbiasall; // stored velocity bias for all atoms
|
||||||
int maxbias; // size of vbiasall array
|
int maxbias; // size of vbiasall array
|
||||||
|
|
||||||
inline int sbmask(int j) {
|
inline int sbmask(int j) const {
|
||||||
return j >> SBBITS & 3;
|
return j >> SBBITS & 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -102,23 +102,22 @@ ComputeOrientOrderAtom::ComputeOrientOrderAtom(LAMMPS *lmp, int narg, char **arg
|
|||||||
if (qlist[iw] > qmax) qmax = qlist[iw];
|
if (qlist[iw] > qmax) qmax = qlist[iw];
|
||||||
}
|
}
|
||||||
iarg += nqlist;
|
iarg += nqlist;
|
||||||
if (strcmp(arg[iarg],"components") == 0) {
|
} else if (strcmp(arg[iarg],"components") == 0) {
|
||||||
qlcompflag = 1;
|
qlcompflag = 1;
|
||||||
if (iarg+2 > narg)
|
if (iarg+2 > narg)
|
||||||
error->all(FLERR,"Illegal compute orientorder/atom command");
|
error->all(FLERR,"Illegal compute orientorder/atom command");
|
||||||
qlcomp = force->numeric(FLERR,arg[iarg+1]);
|
qlcomp = force->numeric(FLERR,arg[iarg+1]);
|
||||||
if (qlcomp <= 0)
|
if (qlcomp <= 0)
|
||||||
error->all(FLERR,"Illegal compute orientorder/atom command");
|
error->all(FLERR,"Illegal compute orientorder/atom command");
|
||||||
iqlcomp = -1;
|
iqlcomp = -1;
|
||||||
for (int iw = 0; iw < nqlist; iw++)
|
for (int iw = 0; iw < nqlist; iw++)
|
||||||
if (qlcomp == qlist[iw]) {
|
if (qlcomp == qlist[iw]) {
|
||||||
iqlcomp = iw;
|
iqlcomp = iw;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (iqlcomp < 0)
|
if (iqlcomp < 0)
|
||||||
error->all(FLERR,"Illegal compute orientorder/atom command");
|
error->all(FLERR,"Illegal compute orientorder/atom command");
|
||||||
iarg += 2;
|
iarg += 2;
|
||||||
}
|
|
||||||
} else if (strcmp(arg[iarg],"cutoff") == 0) {
|
} else if (strcmp(arg[iarg],"cutoff") == 0) {
|
||||||
if (iarg+2 > narg)
|
if (iarg+2 > narg)
|
||||||
error->all(FLERR,"Illegal compute orientorder/atom command");
|
error->all(FLERR,"Illegal compute orientorder/atom command");
|
||||||
|
|||||||
@ -30,7 +30,7 @@ class CreateBonds : protected Pointers {
|
|||||||
void command(int, char **);
|
void command(int, char **);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
inline int sbmask(int j) {
|
inline int sbmask(int j) const {
|
||||||
return j >> SBBITS & 3;
|
return j >> SBBITS & 3;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@ -45,7 +45,7 @@ class DeleteAtoms : protected Pointers {
|
|||||||
void recount_topology();
|
void recount_topology();
|
||||||
void options(int, char **);
|
void options(int, char **);
|
||||||
|
|
||||||
inline int sbmask(int j) {
|
inline int sbmask(int j) const {
|
||||||
return j >> SBBITS & 3;
|
return j >> SBBITS & 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -60,6 +60,7 @@ enum{LAYOUT_UNIFORM,LAYOUT_NONUNIFORM,LAYOUT_TILED}; // several files
|
|||||||
Domain::Domain(LAMMPS *lmp) : Pointers(lmp)
|
Domain::Domain(LAMMPS *lmp) : Pointers(lmp)
|
||||||
{
|
{
|
||||||
box_exist = 0;
|
box_exist = 0;
|
||||||
|
box_change = 0;
|
||||||
|
|
||||||
dimension = 3;
|
dimension = 3;
|
||||||
nonperiodic = 0;
|
nonperiodic = 0;
|
||||||
@ -1697,6 +1698,7 @@ int Domain::ownatom(int id, double *x, imageint *image, int shrinkexceed)
|
|||||||
void Domain::set_lattice(int narg, char **arg)
|
void Domain::set_lattice(int narg, char **arg)
|
||||||
{
|
{
|
||||||
if (lattice) delete lattice;
|
if (lattice) delete lattice;
|
||||||
|
lattice = NULL;
|
||||||
lattice = new Lattice(lmp,narg,arg);
|
lattice = new Lattice(lmp,narg,arg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -37,7 +37,7 @@ using namespace LAMMPS_NS;
|
|||||||
using namespace FixConst;
|
using namespace FixConst;
|
||||||
using namespace MathConst;
|
using namespace MathConst;
|
||||||
|
|
||||||
enum{NONE,FINAL,DELTA,SCALE,VEL,ERATE,TRATE,VOLUME,WIGGLE,VARIABLE};
|
enum{NONE=0,FINAL,DELTA,SCALE,VEL,ERATE,TRATE,VOLUME,WIGGLE,VARIABLE};
|
||||||
enum{ONE_FROM_ONE,ONE_FROM_TWO,TWO_FROM_ONE};
|
enum{ONE_FROM_ONE,ONE_FROM_TWO,TWO_FROM_ONE};
|
||||||
|
|
||||||
// same as domain.cpp, fix_nvt_sllod.cpp, compute_temp_deform.cpp
|
// same as domain.cpp, fix_nvt_sllod.cpp, compute_temp_deform.cpp
|
||||||
@ -52,6 +52,7 @@ rfix(NULL), irregular(NULL), set(NULL)
|
|||||||
if (narg < 4) error->all(FLERR,"Illegal fix deform command");
|
if (narg < 4) error->all(FLERR,"Illegal fix deform command");
|
||||||
|
|
||||||
no_change_box = 1;
|
no_change_box = 1;
|
||||||
|
restart_global = 1;
|
||||||
|
|
||||||
nevery = force->inumeric(FLERR,arg[3]);
|
nevery = force->inumeric(FLERR,arg[3]);
|
||||||
if (nevery <= 0) error->all(FLERR,"Illegal fix deform command");
|
if (nevery <= 0) error->all(FLERR,"Illegal fix deform command");
|
||||||
@ -59,12 +60,7 @@ rfix(NULL), irregular(NULL), set(NULL)
|
|||||||
// set defaults
|
// set defaults
|
||||||
|
|
||||||
set = new Set[6];
|
set = new Set[6];
|
||||||
set[0].style = set[1].style = set[2].style =
|
memset(set,0,6*sizeof(Set));
|
||||||
set[3].style = set[4].style = set[5].style = NONE;
|
|
||||||
set[0].hstr = set[1].hstr = set[2].hstr =
|
|
||||||
set[3].hstr = set[4].hstr = set[5].hstr = NULL;
|
|
||||||
set[0].hratestr = set[1].hratestr = set[2].hratestr =
|
|
||||||
set[3].hratestr = set[4].hratestr = set[5].hratestr = NULL;
|
|
||||||
|
|
||||||
// parse arguments
|
// parse arguments
|
||||||
|
|
||||||
@ -343,11 +339,9 @@ rfix(NULL), irregular(NULL), set(NULL)
|
|||||||
set[i].hi_initial = domain->boxhi[i];
|
set[i].hi_initial = domain->boxhi[i];
|
||||||
set[i].vol_initial = domain->xprd * domain->yprd * domain->zprd;
|
set[i].vol_initial = domain->xprd * domain->yprd * domain->zprd;
|
||||||
}
|
}
|
||||||
for (int i = 3; i < 6; i++) {
|
set[3].tilt_initial = domain->yz;
|
||||||
if (i == 5) set[i].tilt_initial = domain->xy;
|
set[4].tilt_initial = domain->xz;
|
||||||
else if (i == 4) set[i].tilt_initial = domain->xz;
|
set[5].tilt_initial = domain->xy;
|
||||||
else if (i == 3) set[i].tilt_initial = domain->yz;
|
|
||||||
}
|
|
||||||
|
|
||||||
// reneighboring only forced if flips can occur due to shape changes
|
// reneighboring only forced if flips can occur due to shape changes
|
||||||
|
|
||||||
@ -955,6 +949,43 @@ void FixDeform::end_of_step()
|
|||||||
if (kspace_flag) force->kspace->setup();
|
if (kspace_flag) force->kspace->setup();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
write Set data to restart file
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void FixDeform::write_restart(FILE *fp)
|
||||||
|
{
|
||||||
|
if (comm->me == 0) {
|
||||||
|
int size = 6*sizeof(Set);
|
||||||
|
fwrite(&size,sizeof(int),1,fp);
|
||||||
|
fwrite(set,sizeof(Set),6,fp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
use selected state info from restart file to restart the Fix
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void FixDeform::restart(char *buf)
|
||||||
|
{
|
||||||
|
int samestyle = 1;
|
||||||
|
Set *set_restart = (Set *) buf;
|
||||||
|
for (int i=0; i<6; ++i) {
|
||||||
|
// restore data from initial state
|
||||||
|
set[i].lo_initial = set_restart[i].lo_initial;
|
||||||
|
set[i].hi_initial = set_restart[i].hi_initial;
|
||||||
|
set[i].vol_initial = set_restart[i].vol_initial;
|
||||||
|
set[i].tilt_initial = set_restart[i].tilt_initial;
|
||||||
|
// check if style settings are consitent (should do the whole set?)
|
||||||
|
if (set[i].style != set_restart[i].style)
|
||||||
|
samestyle = 0;
|
||||||
|
if (set[i].substyle != set_restart[i].substyle)
|
||||||
|
samestyle = 0;
|
||||||
|
}
|
||||||
|
if (!samestyle)
|
||||||
|
error->all(FLERR,"Fix deform settings not consistent with restart");
|
||||||
|
}
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
void FixDeform::options(int narg, char **arg)
|
void FixDeform::options(int narg, char **arg)
|
||||||
|
|||||||
@ -35,6 +35,8 @@ class FixDeform : public Fix {
|
|||||||
void init();
|
void init();
|
||||||
virtual void pre_exchange();
|
virtual void pre_exchange();
|
||||||
virtual void end_of_step();
|
virtual void end_of_step();
|
||||||
|
virtual void write_restart(FILE *);
|
||||||
|
virtual void restart(char *buf);
|
||||||
double memory_usage();
|
double memory_usage();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|||||||
@ -29,6 +29,8 @@ using namespace FixConst;
|
|||||||
FixLineForce::FixLineForce(LAMMPS *lmp, int narg, char **arg) :
|
FixLineForce::FixLineForce(LAMMPS *lmp, int narg, char **arg) :
|
||||||
Fix(lmp, narg, arg)
|
Fix(lmp, narg, arg)
|
||||||
{
|
{
|
||||||
|
dynamic_group_allow = 1;
|
||||||
|
|
||||||
if (narg != 6) error->all(FLERR,"Illegal fix lineforce command");
|
if (narg != 6) error->all(FLERR,"Illegal fix lineforce command");
|
||||||
xdir = force->numeric(FLERR,arg[3]);
|
xdir = force->numeric(FLERR,arg[3]);
|
||||||
ydir = force->numeric(FLERR,arg[4]);
|
ydir = force->numeric(FLERR,arg[4]);
|
||||||
|
|||||||
@ -29,6 +29,8 @@ using namespace FixConst;
|
|||||||
FixPlaneForce::FixPlaneForce(LAMMPS *lmp, int narg, char **arg) :
|
FixPlaneForce::FixPlaneForce(LAMMPS *lmp, int narg, char **arg) :
|
||||||
Fix(lmp, narg, arg)
|
Fix(lmp, narg, arg)
|
||||||
{
|
{
|
||||||
|
dynamic_group_allow = 1;
|
||||||
|
|
||||||
if (narg != 6) error->all(FLERR,"Illegal fix planeforce command");
|
if (narg != 6) error->all(FLERR,"Illegal fix planeforce command");
|
||||||
xdir = force->numeric(FLERR,arg[3]);
|
xdir = force->numeric(FLERR,arg[3]);
|
||||||
ydir = force->numeric(FLERR,arg[4]);
|
ydir = force->numeric(FLERR,arg[4]);
|
||||||
|
|||||||
@ -123,7 +123,7 @@ void NPair::copy_bin_info()
|
|||||||
mbinxlo = nb->mbinxlo;
|
mbinxlo = nb->mbinxlo;
|
||||||
mbinylo = nb->mbinylo;
|
mbinylo = nb->mbinylo;
|
||||||
mbinzlo = nb->mbinzlo;
|
mbinzlo = nb->mbinzlo;
|
||||||
|
|
||||||
bininvx = nb->bininvx;
|
bininvx = nb->bininvx;
|
||||||
bininvy = nb->bininvy;
|
bininvy = nb->bininvy;
|
||||||
bininvz = nb->bininvz;
|
bininvz = nb->bininvz;
|
||||||
@ -183,15 +183,15 @@ int NPair::exclusion(int i, int j, int itype, int jtype,
|
|||||||
if (nex_mol) {
|
if (nex_mol) {
|
||||||
for (m = 0; m < nex_mol; m++)
|
for (m = 0; m < nex_mol; m++)
|
||||||
|
|
||||||
// intra-chain: exclude i-j pair if in same molecule
|
// intra-chain: exclude i-j pair if in same molecule
|
||||||
// inter-chain: exclude i-j pair if in different molecules
|
// inter-chain: exclude i-j pair if in different molecules
|
||||||
|
|
||||||
if (ex_mol_intra[m]) {
|
if (ex_mol_intra[m]) {
|
||||||
if (mask[i] & ex_mol_bit[m] && mask[j] & ex_mol_bit[m] &&
|
if (mask[i] & ex_mol_bit[m] && mask[j] & ex_mol_bit[m] &&
|
||||||
molecule[i] == molecule[j]) return 1;
|
molecule[i] == molecule[j]) return 1;
|
||||||
} else {
|
} else {
|
||||||
if (mask[i] & ex_mol_bit[m] && mask[j] & ex_mol_bit[m] &&
|
if (mask[i] & ex_mol_bit[m] && mask[j] & ex_mol_bit[m] &&
|
||||||
molecule[i] != molecule[j]) return 1;
|
molecule[i] != molecule[j]) return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -79,7 +79,7 @@ class NPair : protected Pointers {
|
|||||||
double bininvx,bininvy,bininvz;
|
double bininvx,bininvy,bininvz;
|
||||||
int *atom2bin,*bins;
|
int *atom2bin,*bins;
|
||||||
int *binhead;
|
int *binhead;
|
||||||
|
|
||||||
// data from NStencil class
|
// data from NStencil class
|
||||||
|
|
||||||
int nstencil;
|
int nstencil;
|
||||||
|
|||||||
@ -15,7 +15,7 @@
|
|||||||
|
|
||||||
NPairStyle(full/bin,
|
NPairStyle(full/bin,
|
||||||
NPairFullBin,
|
NPairFullBin,
|
||||||
NP_FULL | NP_BIN | NP_MOLONLY |
|
NP_FULL | NP_BIN | NP_MOLONLY |
|
||||||
NP_NEWTON | NP_NEWTOFF | NP_ORTHO | NP_TRI)
|
NP_NEWTON | NP_NEWTOFF | NP_ORTHO | NP_TRI)
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|||||||
@ -16,7 +16,7 @@
|
|||||||
NPairStyle(full/bin/atomonly,
|
NPairStyle(full/bin/atomonly,
|
||||||
NPairFullBinAtomonly,
|
NPairFullBinAtomonly,
|
||||||
NP_FULL | NP_BIN | NP_ATOMONLY |
|
NP_FULL | NP_BIN | NP_ATOMONLY |
|
||||||
NP_NEWTON | NP_NEWTOFF | NP_ORTHO | NP_TRI)
|
NP_NEWTON | NP_NEWTOFF | NP_ORTHO | NP_TRI)
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
|
|||||||
@ -15,7 +15,7 @@
|
|||||||
|
|
||||||
NPairStyle(full/bin/ghost,
|
NPairStyle(full/bin/ghost,
|
||||||
NPairFullBinGhost,
|
NPairFullBinGhost,
|
||||||
NP_FULL | NP_BIN | NP_GHOST | NP_NEWTON | NP_NEWTOFF |
|
NP_FULL | NP_BIN | NP_GHOST | NP_NEWTON | NP_NEWTOFF |
|
||||||
NP_ORTHO | NP_TRI)
|
NP_ORTHO | NP_TRI)
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|||||||
@ -15,7 +15,7 @@
|
|||||||
|
|
||||||
NPairStyle(full/nsq/ghost,
|
NPairStyle(full/nsq/ghost,
|
||||||
NPairFullNsqGhost,
|
NPairFullNsqGhost,
|
||||||
NP_FULL | NP_NSQ | NP_GHOST | NP_NEWTON | NP_NEWTOFF |
|
NP_FULL | NP_NSQ | NP_GHOST | NP_NEWTON | NP_NEWTOFF |
|
||||||
NP_ORTHO | NP_TRI)
|
NP_ORTHO | NP_TRI)
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|||||||
@ -25,7 +25,7 @@ using namespace LAMMPS_NS;
|
|||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
NPairHalfBinAtomonlyNewton::NPairHalfBinAtomonlyNewton(LAMMPS *lmp) :
|
NPairHalfBinAtomonlyNewton::NPairHalfBinAtomonlyNewton(LAMMPS *lmp) :
|
||||||
NPair(lmp) {}
|
NPair(lmp) {}
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
/* ----------------------------------------------------------------------
|
||||||
|
|||||||
@ -25,7 +25,7 @@ using namespace LAMMPS_NS;
|
|||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
NPairHalfRespaBinNewtonTri::NPairHalfRespaBinNewtonTri(LAMMPS *lmp) :
|
NPairHalfRespaBinNewtonTri::NPairHalfRespaBinNewtonTri(LAMMPS *lmp) :
|
||||||
NPair(lmp) {}
|
NPair(lmp) {}
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
/* ----------------------------------------------------------------------
|
||||||
|
|||||||
@ -190,7 +190,7 @@ void NPairHalfSizeBinNewton::build(NeighList *list)
|
|||||||
nn += dnum;
|
nn += dnum;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
n++;
|
n++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -27,7 +27,7 @@ using namespace LAMMPS_NS;
|
|||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
NPairHalfSizeBinNewtonTri::NPairHalfSizeBinNewtonTri(LAMMPS *lmp) :
|
NPairHalfSizeBinNewtonTri::NPairHalfSizeBinNewtonTri(LAMMPS *lmp) :
|
||||||
NPair(lmp) {}
|
NPair(lmp) {}
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
/* ----------------------------------------------------------------------
|
||||||
|
|||||||
@ -15,8 +15,8 @@
|
|||||||
|
|
||||||
NPairStyle(skip/half/respa,
|
NPairStyle(skip/half/respa,
|
||||||
NPairSkipRespa,
|
NPairSkipRespa,
|
||||||
NP_SKIP | NP_RESPA | NP_HALF | NP_FULL |
|
NP_SKIP | NP_RESPA | NP_HALF | NP_FULL |
|
||||||
NP_NSQ | NP_BIN | NP_MULTI |
|
NP_NSQ | NP_BIN | NP_MULTI |
|
||||||
NP_NEWTON | NP_NEWTOFF | NP_ORTHO | NP_TRI)
|
NP_NEWTON | NP_NEWTOFF | NP_ORTHO | NP_TRI)
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|||||||
@ -32,7 +32,7 @@ NPairSkipSize::NPairSkipSize(LAMMPS *lmp) : NPair(lmp) {}
|
|||||||
/* ----------------------------------------------------------------------
|
/* ----------------------------------------------------------------------
|
||||||
build skip list for subset of types from parent list
|
build skip list for subset of types from parent list
|
||||||
iskip and ijskip flag which atom types and type pairs to skip
|
iskip and ijskip flag which atom types and type pairs to skip
|
||||||
if list requests it, preserve shear history via fix shear/history
|
if list requests it, preserve shear history via fix shear/history
|
||||||
------------------------------------------------------------------------- */
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
void NPairSkipSize::build(NeighList *list)
|
void NPairSkipSize::build(NeighList *list)
|
||||||
|
|||||||
@ -15,7 +15,7 @@
|
|||||||
|
|
||||||
NPairStyle(skip/half/size,
|
NPairStyle(skip/half/size,
|
||||||
NPairSkipSize,
|
NPairSkipSize,
|
||||||
NP_SKIP | NP_SIZE | NP_HALF | NP_FULL | NP_NSQ | NP_BIN | NP_MULTI |
|
NP_SKIP | NP_SIZE | NP_HALF | NP_FULL | NP_NSQ | NP_BIN | NP_MULTI |
|
||||||
NP_NEWTON | NP_NEWTOFF | NP_ORTHO | NP_TRI)
|
NP_NEWTON | NP_NEWTOFF | NP_ORTHO | NP_TRI)
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|||||||
@ -33,7 +33,7 @@ NPairSkipSizeOff2on::NPairSkipSizeOff2on(LAMMPS *lmp) : NPair(lmp) {}
|
|||||||
build skip list for subset of types from parent list
|
build skip list for subset of types from parent list
|
||||||
iskip and ijskip flag which atom types and type pairs to skip
|
iskip and ijskip flag which atom types and type pairs to skip
|
||||||
parent non-skip list used newton off, this skip list is newton on
|
parent non-skip list used newton off, this skip list is newton on
|
||||||
if list requests it, preserve shear history via fix shear/history
|
if list requests it, preserve shear history via fix shear/history
|
||||||
------------------------------------------------------------------------- */
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
void NPairSkipSizeOff2on::build(NeighList *list)
|
void NPairSkipSizeOff2on::build(NeighList *list)
|
||||||
|
|||||||
@ -15,8 +15,8 @@
|
|||||||
|
|
||||||
NPairStyle(skip/size/off2on,
|
NPairStyle(skip/size/off2on,
|
||||||
NPairSkipSizeOff2on,
|
NPairSkipSizeOff2on,
|
||||||
NP_SKIP | NP_SIZE | NP_OFF2ON | NP_HALF |
|
NP_SKIP | NP_SIZE | NP_OFF2ON | NP_HALF |
|
||||||
NP_NSQ | NP_BIN | NP_MULTI |
|
NP_NSQ | NP_BIN | NP_MULTI |
|
||||||
NP_NEWTON | NP_NEWTOFF | NP_ORTHO | NP_TRI)
|
NP_NEWTON | NP_NEWTOFF | NP_ORTHO | NP_TRI)
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|||||||
@ -27,7 +27,7 @@ using namespace LAMMPS_NS;
|
|||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
NPairSkipSizeOff2onOneside::NPairSkipSizeOff2onOneside(LAMMPS *lmp) :
|
NPairSkipSizeOff2onOneside::NPairSkipSizeOff2onOneside(LAMMPS *lmp) :
|
||||||
NPair(lmp) {}
|
NPair(lmp) {}
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
/* ----------------------------------------------------------------------
|
||||||
@ -35,7 +35,7 @@ NPairSkipSizeOff2onOneside::NPairSkipSizeOff2onOneside(LAMMPS *lmp) :
|
|||||||
iskip and ijskip flag which atom types and type pairs to skip
|
iskip and ijskip flag which atom types and type pairs to skip
|
||||||
parent non-skip list used newton off and was not onesided,
|
parent non-skip list used newton off and was not onesided,
|
||||||
this skip list is newton on and onesided
|
this skip list is newton on and onesided
|
||||||
if list requests it, preserve shear history via fix shear/history
|
if list requests it, preserve shear history via fix shear/history
|
||||||
------------------------------------------------------------------------- */
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
void NPairSkipSizeOff2onOneside::build(NeighList *list)
|
void NPairSkipSizeOff2onOneside::build(NeighList *list)
|
||||||
|
|||||||
@ -15,8 +15,8 @@
|
|||||||
|
|
||||||
NPairStyle(skip/size/off2on/oneside,
|
NPairStyle(skip/size/off2on/oneside,
|
||||||
NPairSkipSizeOff2onOneside,
|
NPairSkipSizeOff2onOneside,
|
||||||
NP_SKIP | NP_SIZE | NP_OFF2ON | NP_ONESIDE | NP_HALF |
|
NP_SKIP | NP_SIZE | NP_OFF2ON | NP_ONESIDE | NP_HALF |
|
||||||
NP_NSQ | NP_BIN | NP_MULTI | NP_NEWTON | NP_NEWTOFF |
|
NP_NSQ | NP_BIN | NP_MULTI | NP_NEWTON | NP_NEWTOFF |
|
||||||
NP_ORTHO | NP_TRI)
|
NP_ORTHO | NP_TRI)
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|||||||
@ -28,7 +28,7 @@ NStencilFullBin2d::NStencilFullBin2d(LAMMPS *lmp) : NStencil(lmp) {}
|
|||||||
void NStencilFullBin2d::create()
|
void NStencilFullBin2d::create()
|
||||||
{
|
{
|
||||||
int i,j;
|
int i,j;
|
||||||
|
|
||||||
nstencil = 0;
|
nstencil = 0;
|
||||||
|
|
||||||
for (j = -sy; j <= sy; j++)
|
for (j = -sy; j <= sy; j++)
|
||||||
|
|||||||
@ -15,7 +15,7 @@
|
|||||||
|
|
||||||
NStencilStyle(full/bin/2d,
|
NStencilStyle(full/bin/2d,
|
||||||
NStencilFullBin2d,
|
NStencilFullBin2d,
|
||||||
NS_FULL | NS_BIN | NS_2D |
|
NS_FULL | NS_BIN | NS_2D |
|
||||||
NS_NEWTON | NS_NEWTOFF | NS_ORTHO | NS_TRI)
|
NS_NEWTON | NS_NEWTOFF | NS_ORTHO | NS_TRI)
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|||||||
@ -15,7 +15,7 @@
|
|||||||
|
|
||||||
NStencilStyle(full/bin/3d,
|
NStencilStyle(full/bin/3d,
|
||||||
NStencilFullBin3d,
|
NStencilFullBin3d,
|
||||||
NS_FULL | NS_BIN | NS_3D |
|
NS_FULL | NS_BIN | NS_3D |
|
||||||
NS_NEWTON | NS_NEWTOFF | NS_ORTHO | NS_TRI)
|
NS_NEWTON | NS_NEWTOFF | NS_ORTHO | NS_TRI)
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|||||||
@ -15,7 +15,7 @@
|
|||||||
|
|
||||||
NStencilStyle(full/ghost/bin/2d,
|
NStencilStyle(full/ghost/bin/2d,
|
||||||
NStencilFullGhostBin2d,
|
NStencilFullGhostBin2d,
|
||||||
NS_FULL | NS_GHOST | NS_BIN | NS_2D |
|
NS_FULL | NS_GHOST | NS_BIN | NS_2D |
|
||||||
NS_NEWTON | NS_NEWTOFF | NS_ORTHO | NS_TRI)
|
NS_NEWTON | NS_NEWTOFF | NS_ORTHO | NS_TRI)
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|||||||
@ -15,7 +15,7 @@
|
|||||||
|
|
||||||
NStencilStyle(full/ghost/bin/3d,
|
NStencilStyle(full/ghost/bin/3d,
|
||||||
NStencilFullGhostBin3d,
|
NStencilFullGhostBin3d,
|
||||||
NS_FULL | NS_GHOST | NS_BIN | NS_3D |
|
NS_FULL | NS_GHOST | NS_BIN | NS_3D |
|
||||||
NS_NEWTON | NS_NEWTOFF | NS_ORTHO | NS_TRI)
|
NS_NEWTON | NS_NEWTOFF | NS_ORTHO | NS_TRI)
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|||||||
@ -15,7 +15,7 @@
|
|||||||
|
|
||||||
NStencilStyle(full/multi/2d,
|
NStencilStyle(full/multi/2d,
|
||||||
NStencilFullMulti2d,
|
NStencilFullMulti2d,
|
||||||
NS_FULL | NS_MULTI | NS_2D |
|
NS_FULL | NS_MULTI | NS_2D |
|
||||||
NS_NEWTON | NS_NEWTOFF | NS_ORTHO | NS_TRI)
|
NS_NEWTON | NS_NEWTOFF | NS_ORTHO | NS_TRI)
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|||||||
@ -19,7 +19,7 @@ using namespace LAMMPS_NS;
|
|||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
NStencilHalfBin2dNewtoff::NStencilHalfBin2dNewtoff(LAMMPS *lmp) :
|
NStencilHalfBin2dNewtoff::NStencilHalfBin2dNewtoff(LAMMPS *lmp) :
|
||||||
NStencil(lmp) {}
|
NStencil(lmp) {}
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
/* ----------------------------------------------------------------------
|
||||||
|
|||||||
@ -19,7 +19,7 @@ using namespace LAMMPS_NS;
|
|||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
NStencilHalfBin2dNewtonTri::NStencilHalfBin2dNewtonTri(LAMMPS *lmp) :
|
NStencilHalfBin2dNewtonTri::NStencilHalfBin2dNewtonTri(LAMMPS *lmp) :
|
||||||
NStencil(lmp) {}
|
NStencil(lmp) {}
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
/* ----------------------------------------------------------------------
|
||||||
|
|||||||
@ -19,7 +19,7 @@ using namespace LAMMPS_NS;
|
|||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
NStencilHalfBin3dNewtoff::NStencilHalfBin3dNewtoff(LAMMPS *lmp) :
|
NStencilHalfBin3dNewtoff::NStencilHalfBin3dNewtoff(LAMMPS *lmp) :
|
||||||
NStencil(lmp) {}
|
NStencil(lmp) {}
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
/* ----------------------------------------------------------------------
|
||||||
|
|||||||
@ -19,7 +19,7 @@ using namespace LAMMPS_NS;
|
|||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
NStencilHalfBin3dNewtonTri::NStencilHalfBin3dNewtonTri(LAMMPS *lmp) :
|
NStencilHalfBin3dNewtonTri::NStencilHalfBin3dNewtonTri(LAMMPS *lmp) :
|
||||||
NStencil(lmp) {}
|
NStencil(lmp) {}
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
/* ----------------------------------------------------------------------
|
||||||
|
|||||||
@ -15,7 +15,7 @@
|
|||||||
|
|
||||||
NStencilStyle(half/ghost/bin/2d/newtoff,
|
NStencilStyle(half/ghost/bin/2d/newtoff,
|
||||||
NStencilHalfGhostBin2dNewtoff,
|
NStencilHalfGhostBin2dNewtoff,
|
||||||
NS_HALF | NS_GHOST | NS_BIN | NS_2D |
|
NS_HALF | NS_GHOST | NS_BIN | NS_2D |
|
||||||
NS_NEWTOFF | NS_ORTHO | NS_TRI)
|
NS_NEWTOFF | NS_ORTHO | NS_TRI)
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|||||||
@ -245,7 +245,7 @@ class Pair : protected Pointers {
|
|||||||
ubuf(int arg) : i(arg) {}
|
ubuf(int arg) : i(arg) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
inline int sbmask(int j) {
|
inline int sbmask(int j) const {
|
||||||
return j >> SBBITS & 3;
|
return j >> SBBITS & 3;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@ -14,6 +14,7 @@
|
|||||||
#ifdef PAIR_CLASS
|
#ifdef PAIR_CLASS
|
||||||
|
|
||||||
PairStyle(lj/smooth/linear,PairLJSmoothLinear)
|
PairStyle(lj/smooth/linear,PairLJSmoothLinear)
|
||||||
|
PairStyle(lj/sf,PairLJSmoothLinear)
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
|
|||||||
12
src/set.cpp
12
src/set.cpp
@ -327,15 +327,18 @@ void Set::command(int narg, char **arg)
|
|||||||
ximageflag = yimageflag = zimageflag = 0;
|
ximageflag = yimageflag = zimageflag = 0;
|
||||||
if (strcmp(arg[iarg+1],"NULL") != 0) {
|
if (strcmp(arg[iarg+1],"NULL") != 0) {
|
||||||
ximageflag = 1;
|
ximageflag = 1;
|
||||||
ximage = force->inumeric(FLERR,arg[iarg+1]);
|
if (strstr(arg[iarg+1],"v_") == arg[iarg+1]) varparse(arg[iarg+1],1);
|
||||||
|
else ximage = force->inumeric(FLERR,arg[iarg+1]);
|
||||||
}
|
}
|
||||||
if (strcmp(arg[iarg+2],"NULL") != 0) {
|
if (strcmp(arg[iarg+2],"NULL") != 0) {
|
||||||
yimageflag = 1;
|
yimageflag = 1;
|
||||||
yimage = force->inumeric(FLERR,arg[iarg+2]);
|
if (strstr(arg[iarg+2],"v_") == arg[iarg+2]) varparse(arg[iarg+2],2);
|
||||||
|
else yimage = force->inumeric(FLERR,arg[iarg+2]);
|
||||||
}
|
}
|
||||||
if (strcmp(arg[iarg+3],"NULL") != 0) {
|
if (strcmp(arg[iarg+3],"NULL") != 0) {
|
||||||
zimageflag = 1;
|
zimageflag = 1;
|
||||||
zimage = force->inumeric(FLERR,arg[iarg+3]);
|
if (strstr(arg[iarg+3],"v_") == arg[iarg+3]) varparse(arg[iarg+3],3);
|
||||||
|
else zimage = force->inumeric(FLERR,arg[iarg+3]);
|
||||||
}
|
}
|
||||||
if (ximageflag && ximage && !domain->xperiodic)
|
if (ximageflag && ximage && !domain->xperiodic)
|
||||||
error->all(FLERR,
|
error->all(FLERR,
|
||||||
@ -811,6 +814,9 @@ void Set::set(int keyword)
|
|||||||
int xbox = (atom->image[i] & IMGMASK) - IMGMAX;
|
int xbox = (atom->image[i] & IMGMASK) - IMGMAX;
|
||||||
int ybox = (atom->image[i] >> IMGBITS & IMGMASK) - IMGMAX;
|
int ybox = (atom->image[i] >> IMGBITS & IMGMASK) - IMGMAX;
|
||||||
int zbox = (atom->image[i] >> IMG2BITS) - IMGMAX;
|
int zbox = (atom->image[i] >> IMG2BITS) - IMGMAX;
|
||||||
|
if (varflag1) ximage = static_cast<int>(xvalue);
|
||||||
|
if (varflag2) yimage = static_cast<int>(yvalue);
|
||||||
|
if (varflag3) zimage = static_cast<int>(zvalue);
|
||||||
if (ximageflag) xbox = ximage;
|
if (ximageflag) xbox = ximage;
|
||||||
if (yimageflag) ybox = yimage;
|
if (yimageflag) ybox = yimage;
|
||||||
if (zimageflag) zbox = zimage;
|
if (zimageflag) zbox = zimage;
|
||||||
|
|||||||
@ -185,7 +185,7 @@ void WriteRestart::multiproc_options(int multiproc_caller, int mpiioflag_caller,
|
|||||||
if (strcmp(arg[iarg],"fileper") == 0) {
|
if (strcmp(arg[iarg],"fileper") == 0) {
|
||||||
if (iarg+2 > narg) error->all(FLERR,"Illegal write_restart command");
|
if (iarg+2 > narg) error->all(FLERR,"Illegal write_restart command");
|
||||||
if (!multiproc)
|
if (!multiproc)
|
||||||
error->all(FLERR,"Cannot use write_restart fileper "
|
error->all(FLERR,"Cannot use write_restart fileper "
|
||||||
"without % in restart file name");
|
"without % in restart file name");
|
||||||
int nper = force->inumeric(FLERR,arg[iarg+1]);
|
int nper = force->inumeric(FLERR,arg[iarg+1]);
|
||||||
if (nper <= 0) error->all(FLERR,"Illegal write_restart command");
|
if (nper <= 0) error->all(FLERR,"Illegal write_restart command");
|
||||||
@ -203,7 +203,7 @@ void WriteRestart::multiproc_options(int multiproc_caller, int mpiioflag_caller,
|
|||||||
} else if (strcmp(arg[iarg],"nfile") == 0) {
|
} else if (strcmp(arg[iarg],"nfile") == 0) {
|
||||||
if (iarg+2 > narg) error->all(FLERR,"Illegal write_restart command");
|
if (iarg+2 > narg) error->all(FLERR,"Illegal write_restart command");
|
||||||
if (!multiproc)
|
if (!multiproc)
|
||||||
error->all(FLERR,"Cannot use write_restart nfile "
|
error->all(FLERR,"Cannot use write_restart nfile "
|
||||||
"without % in restart file name");
|
"without % in restart file name");
|
||||||
int nfile = force->inumeric(FLERR,arg[iarg+1]);
|
int nfile = force->inumeric(FLERR,arg[iarg+1]);
|
||||||
if (nfile <= 0) error->all(FLERR,"Illegal write_restart command");
|
if (nfile <= 0) error->all(FLERR,"Illegal write_restart command");
|
||||||
|
|||||||
Reference in New Issue
Block a user