new neigh_modify exclude option, other SNAP changes
This commit is contained in:
@ -217,6 +217,10 @@ This compute is part of the VORONOI 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.
|
||||
|
||||
It also requiers you have a copy of the Voro++ library built and
|
||||
installed on your system. See instructions on obtaining and
|
||||
installing the Voro++ software in the src/VORONOI/README file.
|
||||
|
||||
[Related commands:]
|
||||
|
||||
"dump custom"_dump.html, "dump local"_dump.html
|
||||
|
||||
@ -34,8 +34,10 @@ keyword = {delay} or {every} or {check} or {once} or {cluster} or {include} or {
|
||||
M,N = exclude if one atom in pair is type M, other is type N
|
||||
group group1-ID group2-ID
|
||||
group1-ID,group2-ID = exclude if one atom is in 1st group, other in 2nd
|
||||
molecule group-ID
|
||||
groupname = exclude if both atoms are in the same molecule and in the same group
|
||||
molecule/intra group-ID
|
||||
group-ID = exclude if both atoms are in the same molecule and in group
|
||||
molecule/inter group-ID
|
||||
group-ID = exclude if both atoms are in different molecules and in group
|
||||
none
|
||||
delete all exclude settings
|
||||
{page} value = N
|
||||
@ -52,7 +54,7 @@ neigh_modify every 2 delay 10 check yes page 100000
|
||||
neigh_modify exclude type 2 3
|
||||
neigh_modify exclude group frozen frozen check no
|
||||
neigh_modify exclude group residue1 chain3
|
||||
neigh_modify exclude molecule rigid :pre
|
||||
neigh_modify exclude molecule/intra rigid :pre
|
||||
|
||||
[Description:]
|
||||
|
||||
@ -130,9 +132,11 @@ The {exclude type} option turns off the pairwise interaction if one
|
||||
atom is of type M and the other of type N. M can equal N. The
|
||||
{exclude group} option turns off the interaction if one atom is in the
|
||||
first group and the other is the second. Group1-ID can equal
|
||||
group2-ID. The {exclude molecule} option turns off the interaction if
|
||||
both atoms are in the specified group and in the same molecule, as
|
||||
determined by their molecule ID.
|
||||
group2-ID. The {exclude molecule/intra} option turns off the
|
||||
interaction if both atoms are in the specified group and in the same
|
||||
molecule, as determined by their molecule ID. The {exclude
|
||||
molecule/inter} turns off the interaction between pairs of atoms that
|
||||
have different molecule IDs and are both in the specified group.
|
||||
|
||||
Each of the exclude options can be specified multiple times. The
|
||||
{exclude type} option is the most efficient option to use; it requires
|
||||
@ -195,8 +199,8 @@ binsize of 1/2 the cutoff.
|
||||
If the "delay" setting is non-zero, then it must be a multiple of the
|
||||
"every" setting.
|
||||
|
||||
The exclude molecule option can only be used with atom styles that
|
||||
define molecule IDs.
|
||||
The molecule/intra and molecule/inter exclude options can only be used
|
||||
with atom styles that define molecule IDs.
|
||||
|
||||
The value of the {page} setting must be at least 10x larger than the
|
||||
{one} setting. This insures neighbor pages are not mostly empty
|
||||
|
||||
@ -81,7 +81,7 @@ group sds subtract all cions
|
||||
velocity all create 1. 87287 dist gaussian
|
||||
|
||||
neighbor 1.5 multi
|
||||
neigh_modify exclude molecule sds
|
||||
neigh_modify exclude molecule/intra sds
|
||||
neigh_modify every 5 delay 0 check yes
|
||||
|
||||
fix 1 all nve/limit 0.2
|
||||
|
||||
@ -81,7 +81,7 @@ group sds subtract all cions
|
||||
velocity all create 1. 87287 dist gaussian
|
||||
|
||||
neighbor 1.5 multi
|
||||
neigh_modify exclude molecule sds
|
||||
neigh_modify exclude molecule/intra sds
|
||||
neigh_modify every 5 delay 0 check yes
|
||||
|
||||
fix 1 all nve/limit 0.2
|
||||
|
||||
@ -84,7 +84,7 @@ group sds subtract all cions
|
||||
velocity all create 1. 87287 dist gaussian
|
||||
|
||||
neighbor 1.5 multi
|
||||
neigh_modify exclude molecule sds
|
||||
neigh_modify exclude molecule/intra sds
|
||||
neigh_modify every 5 delay 0 check yes
|
||||
|
||||
fix 1 all nve/limit 0.2
|
||||
|
||||
@ -20,7 +20,7 @@ velocity all create 1.4 109345
|
||||
group rods type 2
|
||||
group tethers subtract all rods
|
||||
|
||||
neigh_modify exclude molecule rods delay 0 every 1
|
||||
neigh_modify exclude molecule/intra rods delay 0 every 1
|
||||
|
||||
# Specify the pair potentials
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
# DATE: 2017-02-20 CONTRIBUTOR: Mitchell Wood mitwood@sandia.gov CITATION: Wood, M. A. and Thompson, A. P. to appear in arxiv Feb2017
|
||||
# DATE: 2017-02-20 CONTRIBUTOR: Mitchell Wood mitwood@sandia.gov CITATION: Wood, M. A. and Thompson, A. P. "Quantum-Accurate Molecular Dynamics Potential for Tungsten" arXiv:1702.07042 [physics.comp-ph]
|
||||
#
|
||||
# Definition of SNAP+ZBL potential.
|
||||
variable zblcutinner equal 4
|
||||
@ -1,4 +1,4 @@
|
||||
# DATE: 2017-02-20 CONTRIBUTOR: Mitchell Wood mitwood@sandia.gov CITATION: Wood, M. A. and Thompson, A. P. to appear in arxiv Feb2017
|
||||
# DATE: 2017-02-20 CONTRIBUTOR: Mitchell Wood mitwood@sandia.gov CITATION: Wood, M. A. and Thompson, A. P. "Quantum-Accurate Molecular Dynamics Potential for Tungsten" arXiv:1702.07042 [physics.comp-ph]
|
||||
#
|
||||
# LAMMPS SNAP coefficients for W
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
# DATE: 2017-02-20 CONTRIBUTOR: Mitchell Wood mitwood@sandia.gov CITATION: Wood, M. A. and Thompson, A. P. to appear in arxiv Feb2017
|
||||
# DATE: 2017-02-20 CONTRIBUTOR: Mitchell Wood mitwood@sandia.gov CITATION: Wood, M. A. and Thompson, A. P. "Quantum-Accurate Molecular Dynamics Potential for Tungsten" arXiv:1702.07042 [physics.comp-ph]
|
||||
#
|
||||
# required
|
||||
rcutfac 4.73442
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
# DATE: 2017-02-20 CONTRIBUTOR: Mitchell Wood mitwood@sandia.gov CITATION: Wood, M. A. and Thompson, A. P. to appear in arxiv Feb2017, W-He and He-He from Juslin, N. and Wirth, B. D. Journal of Nuclear Materials, 423, (2013) p61-63
|
||||
# DATE: 2017-02-20 CONTRIBUTOR: Mitchell Wood mitwood@sandia.gov CITATION: Wood, M. A. and Thompson, A. P. "Quantum-Accurate Molecular Dynamics Potential for Tungsten" arXiv:1702.07042 [physics.comp-ph]
|
||||
#
|
||||
# Definition of SNAP+ZBL+Tabulated potential.
|
||||
variable zblcutinner equal 4
|
||||
@ -24,7 +24,7 @@ mass 1 180.88
|
||||
|
||||
# choose potential
|
||||
|
||||
include Ta06A_pot.snap
|
||||
include Ta06A.snap
|
||||
|
||||
# Setup output
|
||||
|
||||
|
||||
@ -24,7 +24,7 @@ mass 1 183.84
|
||||
|
||||
# choose potential
|
||||
|
||||
include W_2940_2017_2.pot.snap
|
||||
include W_2940_2017_2.snap
|
||||
|
||||
# Setup output
|
||||
|
||||
|
||||
@ -27,7 +27,7 @@ group tungsten type 1
|
||||
group helium type 2
|
||||
# choose potential
|
||||
|
||||
include W.SNAP_HePair.pot
|
||||
include W_2940_2017_2_He_JW2013.snap
|
||||
|
||||
# Setup output
|
||||
|
||||
|
||||
@ -9,9 +9,9 @@ variable zblz equal 73
|
||||
|
||||
# Specify hybrid with SNAP, ZBL
|
||||
|
||||
pair_style hybrid/overlay snap &
|
||||
zbl ${zblcutinner} ${zblcutouter}
|
||||
|
||||
pair_style hybrid/overlay &
|
||||
zbl ${zblcutinner} ${zblcutouter} &
|
||||
snap
|
||||
pair_coeff 1 1 zbl ${zblz} ${zblz}
|
||||
pair_coeff * * snap Ta06A.snapcoeff Ta Ta06A.snapparam Ta
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
# DATE: 2017-02-20 CONTRIBUTOR: Mitchell Wood mitwood@sandia.gov CITATION: Wood, M. A. and Thompson, A. P. to appear in arxiv Feb2017
|
||||
# DATE: 2017-02-20 CONTRIBUTOR: Mitchell Wood mitwood@sandia.gov CITATION: Wood, M. A. and Thompson, A. P. "Quantum-Accurate Molecular Dynamics Potential for Tungsten" arXiv:1702.07042 [physics.comp-ph]
|
||||
#
|
||||
# Definition of SNAP+ZBL potential.
|
||||
variable zblcutinner equal 4
|
||||
@ -1,4 +1,4 @@
|
||||
# DATE: 2017-02-20 CONTRIBUTOR: Mitchell Wood mitwood@sandia.gov CITATION: Wood, M. A. and Thompson, A. P. to appear in arxiv Feb2017
|
||||
# DATE: 2017-02-20 CONTRIBUTOR: Mitchell Wood mitwood@sandia.gov CITATION: Wood, M. A. and Thompson, A. P. "Quantum-Accurate Molecular Dynamics Potential for Tungsten" arXiv:1702.07042 [physics.comp-ph]
|
||||
#
|
||||
# LAMMPS SNAP coefficients for W
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
# DATE: 2017-02-20 CONTRIBUTOR: Mitchell Wood mitwood@sandia.gov CITATION: Wood, M. A. and Thompson, A. P. to appear in arxiv Feb2017
|
||||
# DATE: 2017-02-20 CONTRIBUTOR: Mitchell Wood mitwood@sandia.gov CITATION: Wood, M. A. and Thompson, A. P. "Quantum-Accurate Molecular Dynamics Potential for Tungsten" arXiv:1702.07042 [physics.comp-ph]
|
||||
#
|
||||
# required
|
||||
rcutfac 4.73442
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
# DATE: 2017-02-20 CONTRIBUTOR: Mitchell Wood mitwood@sandia.gov CITATION: Wood, M. A. and Thompson, A. P. to appear in arxiv Feb2017, W-He and He-He from Juslin, N. and Wirth, B. D. Journal of Nuclear Materials, 423, (2013) p61-63
|
||||
# DATE: 2017-02-20 CONTRIBUTOR: Mitchell Wood mitwood@sandia.gov CITATION: Wood, M. A. and Thompson, A. P. "Quantum-Accurate Molecular Dynamics Potential for Tungsten" arXiv:1702.07042 [physics.comp-ph]
|
||||
#
|
||||
# Definition of SNAP+ZBL+Tabulated potential.
|
||||
variable zblcutinner equal 4
|
||||
@ -1,11 +1,16 @@
|
||||
This package implements GPU optimizations of various LAMMPS styles.
|
||||
|
||||
This package uses an external library in lib/gpu which must be
|
||||
compiled before making LAMMPS. See the lib/gpu/README file and the
|
||||
Section 5.3.1 on the manual gives details of what hardware and Cuda
|
||||
software is required on your system, and full details on how to build
|
||||
and use this package. See the KOKKOS package, which also has
|
||||
GPU-enabled styles.
|
||||
|
||||
This package uses an external library provided in lib/gpu which must
|
||||
be compiled before making LAMMPS. See the lib/gpu/README file and the
|
||||
LAMMPS manual for information on building LAMMPS with external
|
||||
libraries. The settings in the Makefile.lammps file in that directory
|
||||
must be correct for LAMMPS to build correctly with this package
|
||||
installed.
|
||||
|
||||
The people who created this package are Mike Brown (while at Sandia
|
||||
and ORNL) and Trung Nguyen (while at ORNL).
|
||||
The GPU package and its associated library was created by Mike Brown
|
||||
while at Sandia and ORNL, and by Trung Nguyen while at ORNL.
|
||||
|
||||
@ -1,5 +1,3 @@
|
||||
-*- fill-column: 70; -*-
|
||||
|
||||
This package provides a pair_style kim command which is a wrapper on
|
||||
the Knowledge Base for Interatomic Models (KIM) repository of
|
||||
interatomic potentials, so that they can be used by LAMMPS scripts.
|
||||
|
||||
@ -64,6 +64,7 @@ NeighborKokkos::~NeighborKokkos()
|
||||
memory->destroy_kokkos(k_ex1_bit,ex1_bit);
|
||||
memory->destroy_kokkos(k_ex2_bit,ex2_bit);
|
||||
memory->destroy_kokkos(k_ex_mol_bit,ex_mol_bit);
|
||||
memory->destroy_kokkos(k_ex_mol_intra,ex_mol_intra);
|
||||
|
||||
memory->destroy_kokkos(k_bondlist,bondlist);
|
||||
memory->destroy_kokkos(k_anglelist,anglelist);
|
||||
@ -133,6 +134,14 @@ void NeighborKokkos::init_ex_mol_bit_kokkos()
|
||||
k_ex_mol_bit.modify<LMPHostType>();
|
||||
}
|
||||
|
||||
/* ---------------------------------------------------------------------- */
|
||||
|
||||
void NeighborKokkos::grow_ex_mol_intra_kokkos()
|
||||
{
|
||||
memory->grow_kokkos(k_ex_mol_intra, ex_mol_intra, maxex_mol, "neigh:ex_mol_intra");
|
||||
k_ex_mol_intra.modify<LMPHostType>();
|
||||
}
|
||||
|
||||
/* ----------------------------------------------------------------------
|
||||
if any atom moved trigger distance (half of neighbor skin) return 1
|
||||
shrink trigger distance if box size has changed
|
||||
@ -348,6 +357,12 @@ void NeighborKokkos::modify_mol_group_grow_kokkos(){
|
||||
k_ex_mol_group.modify<LMPHostType>();
|
||||
}
|
||||
|
||||
/* ---------------------------------------------------------------------- */
|
||||
void NeighborKokkos::modify_mol_intra_grow_kokkos(){
|
||||
memory->grow_kokkos(k_ex_mol_intra,ex_mol_intra,maxex_mol,"neigh:ex_mol_intra");
|
||||
k_ex_mol_intra.modify<LMPHostType>();
|
||||
}
|
||||
|
||||
/* ---------------------------------------------------------------------- */
|
||||
|
||||
void NeighborKokkos::init_topology() {
|
||||
|
||||
@ -54,6 +54,7 @@ class NeighborKokkos : public Neighbor {
|
||||
DAT::tdual_int_1d k_ex1_bit,k_ex2_bit;
|
||||
DAT::tdual_int_1d k_ex_mol_group;
|
||||
DAT::tdual_int_1d k_ex_mol_bit;
|
||||
DAT::tdual_int_1d k_ex_mol_intra;
|
||||
|
||||
NeighBondKokkos<LMPHostType> neighbond_host;
|
||||
NeighBondKokkos<LMPDeviceType> neighbond_device;
|
||||
@ -76,6 +77,7 @@ class NeighborKokkos : public Neighbor {
|
||||
void init_ex_type_kokkos(int);
|
||||
void init_ex_bit_kokkos();
|
||||
void init_ex_mol_bit_kokkos();
|
||||
void grow_ex_mol_intra_kokkos();
|
||||
virtual int check_distance();
|
||||
template<class DeviceType> int check_distance_kokkos();
|
||||
virtual void build(int);
|
||||
@ -84,6 +86,7 @@ class NeighborKokkos : public Neighbor {
|
||||
void modify_ex_type_grow_kokkos();
|
||||
void modify_ex_group_grow_kokkos();
|
||||
void modify_mol_group_grow_kokkos();
|
||||
void modify_mol_intra_grow_kokkos();
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@ -56,6 +56,7 @@ void NPairKokkos<DeviceType,HALF_NEIGH,GHOST,TRI>::copy_neighbor_info()
|
||||
k_ex2_bit = neighborKK->k_ex2_bit;
|
||||
k_ex_mol_group = neighborKK->k_ex_mol_group;
|
||||
k_ex_mol_bit = neighborKK->k_ex_mol_bit;
|
||||
k_ex_mol_intra = neighborKK->k_ex_mol_intra;
|
||||
}
|
||||
|
||||
/* ----------------------------------------------------------------------
|
||||
@ -147,6 +148,7 @@ void NPairKokkos<DeviceType,HALF_NEIGH,GHOST,TRI>::build(NeighList *list_)
|
||||
nex_mol,
|
||||
k_ex_mol_group.view<DeviceType>(),
|
||||
k_ex_mol_bit.view<DeviceType>(),
|
||||
k_ex_mol_intra.view<DeviceType>(),
|
||||
bboxhi,bboxlo,
|
||||
domain->xperiodic,domain->yperiodic,domain->zperiodic,
|
||||
domain->xprd_half,domain->yprd_half,domain->zprd_half);
|
||||
@ -161,6 +163,7 @@ void NPairKokkos<DeviceType,HALF_NEIGH,GHOST,TRI>::build(NeighList *list_)
|
||||
k_ex2_bit.sync<DeviceType>();
|
||||
k_ex_mol_group.sync<DeviceType>();
|
||||
k_ex_mol_bit.sync<DeviceType>();
|
||||
k_ex_mol_intra.sync<DeviceType>();
|
||||
k_bincount.sync<DeviceType>(),
|
||||
k_bins.sync<DeviceType>(),
|
||||
atomKK->sync(Device,X_MASK|TYPE_MASK|MASK_MASK|MOLECULE_MASK|TAG_MASK|SPECIAL_MASK);
|
||||
@ -284,8 +287,12 @@ int NeighborKokkosExecute<DeviceType>::exclusion(const int &i,const int &j,
|
||||
|
||||
if (nex_mol) {
|
||||
for (m = 0; m < nex_mol; m++)
|
||||
if (mask(i) & ex_mol_bit(m) && mask(j) & ex_mol_bit(m) &&
|
||||
molecule(i) == molecule(j)) return 1;
|
||||
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] &&
|
||||
molecule[i] == molecule[j]) return 1;
|
||||
} else // exclude i-j pair if on different molecules
|
||||
if (mask[i] & ex_mol_bit[m] && mask[j] & ex_mol_bit[m] &&
|
||||
molecule[i] != molecule[j]) return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
@ -98,6 +98,7 @@ class NPairKokkos : public NPair {
|
||||
DAT::tdual_int_1d k_ex1_bit,k_ex2_bit;
|
||||
DAT::tdual_int_1d k_ex_mol_group;
|
||||
DAT::tdual_int_1d k_ex_mol_bit;
|
||||
DAT::tdual_int_1d k_ex_mol_intra;
|
||||
|
||||
// data from NBin class
|
||||
|
||||
@ -139,6 +140,7 @@ class NeighborKokkosExecute
|
||||
const int nex_mol;
|
||||
const typename AT::t_int_1d_const ex_mol_group;
|
||||
const typename AT::t_int_1d_const ex_mol_bit;
|
||||
const typename AT::t_int_1d_const ex_mol_intra;
|
||||
|
||||
// data from NBin class
|
||||
|
||||
@ -216,6 +218,7 @@ class NeighborKokkosExecute
|
||||
const int & _nex_mol,
|
||||
const typename AT::t_int_1d_const & _ex_mol_group,
|
||||
const typename AT::t_int_1d_const & _ex_mol_bit,
|
||||
const typename AT::t_int_1d_const & _ex_mol_intra,
|
||||
const X_FLOAT *_bboxhi, const X_FLOAT* _bboxlo,
|
||||
const int & _xperiodic, const int & _yperiodic, const int & _zperiodic,
|
||||
const int & _xprd_half, const int & _yprd_half, const int & _zprd_half):
|
||||
@ -235,6 +238,7 @@ class NeighborKokkosExecute
|
||||
ex1_group(_ex1_group),ex2_group(_ex2_group),
|
||||
ex1_bit(_ex1_bit),ex2_bit(_ex2_bit),nex_mol(_nex_mol),
|
||||
ex_mol_group(_ex_mol_group),ex_mol_bit(_ex_mol_bit),
|
||||
ex_mol_intra(_ex_mol_intra),
|
||||
xperiodic(_xperiodic),yperiodic(_yperiodic),zperiodic(_zperiodic),
|
||||
xprd_half(_xprd_half),yprd_half(_yprd_half),zprd_half(_zprd_half) {
|
||||
|
||||
|
||||
@ -7,7 +7,7 @@ SHELL = /bin/sh
|
||||
# specify flags and libraries needed for your compiler
|
||||
|
||||
CC = mpicxx
|
||||
CCFLAGS = -g -O3 -fopenmp
|
||||
CCFLAGS = -g -O3 -restrict -fopenmp
|
||||
SHFLAGS = -fPIC
|
||||
DEPFLAGS = -M
|
||||
|
||||
|
||||
@ -447,7 +447,6 @@ void FixShake::setup(int vflag)
|
||||
next_output = (ntimestep/output_every)*output_every + output_every;
|
||||
} else next_output = -1;
|
||||
|
||||
|
||||
// set respa to 0 if verlet is used and to 1 otherwise
|
||||
|
||||
if (strstr(update->integrate_style,"verlet"))
|
||||
@ -476,7 +475,6 @@ void FixShake::setup(int vflag)
|
||||
// precalculate constraining forces for first integration step
|
||||
|
||||
shake_end_of_step(vflag);
|
||||
|
||||
}
|
||||
|
||||
/* ----------------------------------------------------------------------
|
||||
@ -592,6 +590,7 @@ void FixShake::post_force(int vflag)
|
||||
}
|
||||
|
||||
// store vflag for coordinate_constraints_end_of_step()
|
||||
|
||||
vflag_post_force = vflag;
|
||||
}
|
||||
|
||||
|
||||
@ -815,7 +815,7 @@ void SNA::compute_dbidrj()
|
||||
// for mb1 = 0,...,j1mid
|
||||
// for ma1 = 0,...,j1
|
||||
// zdb +=
|
||||
// Conj(dudr(j1,ma1,mb1))*z(j1,j2,j,ma1,mb1)
|
||||
// Conj(dudr(j1,ma1,mb1))*z(j,j2,j1,ma1,mb1)
|
||||
// dbdr(j1,j2,j) += 2*zdb*(j+1)/(j1+1)
|
||||
// zdb = 0
|
||||
// for mb2 = 0,...,j2mid
|
||||
|
||||
@ -166,7 +166,7 @@ pairclass(NULL), pairnames(NULL), pairmasks(NULL)
|
||||
ex1_group = ex2_group = ex1_bit = ex2_bit = NULL;
|
||||
|
||||
nex_mol = maxex_mol = 0;
|
||||
ex_mol_group = ex_mol_bit = NULL;
|
||||
ex_mol_group = ex_mol_bit = ex_mol_intra = NULL;
|
||||
|
||||
// Kokkos setting
|
||||
|
||||
@ -234,6 +234,7 @@ Neighbor::~Neighbor()
|
||||
|
||||
memory->destroy(ex_mol_group);
|
||||
delete [] ex_mol_bit;
|
||||
memory->destroy(ex_mol_intra);
|
||||
}
|
||||
|
||||
/* ---------------------------------------------------------------------- */
|
||||
@ -2323,7 +2324,8 @@ void Neighbor::modify_params(int narg, char **arg)
|
||||
nex_group++;
|
||||
iarg += 4;
|
||||
|
||||
} else if (strcmp(arg[iarg+1],"molecule") == 0) {
|
||||
} else if (strcmp(arg[iarg+1],"molecule/inter") == 0 ||
|
||||
strcmp(arg[iarg+1],"molecule/intra") == 0) {
|
||||
if (iarg+3 > narg) error->all(FLERR,"Illegal neigh_modify command");
|
||||
if (atom->molecule_flag == 0)
|
||||
error->all(FLERR,"Neigh_modify exclude molecule "
|
||||
@ -2331,10 +2333,18 @@ void Neighbor::modify_params(int narg, char **arg)
|
||||
if (nex_mol == maxex_mol) {
|
||||
maxex_mol += EXDELTA;
|
||||
memory->grow(ex_mol_group,maxex_mol,"neigh:ex_mol_group");
|
||||
if (lmp->kokkos)
|
||||
grow_ex_mol_intra_kokkos();
|
||||
else
|
||||
memory->grow(ex_mol_intra,maxex_mol,"neigh:ex_mol_intra");
|
||||
}
|
||||
ex_mol_group[nex_mol] = group->find(arg[iarg+2]);
|
||||
if (ex_mol_group[nex_mol] == -1)
|
||||
error->all(FLERR,"Invalid group ID in neigh_modify command");
|
||||
if (strcmp(arg[iarg+1],"molecule/intra") == 0)
|
||||
ex_mol_intra[nex_mol] = 1;
|
||||
else
|
||||
ex_mol_intra[nex_mol] = 0;
|
||||
nex_mol++;
|
||||
iarg += 3;
|
||||
|
||||
|
||||
@ -71,6 +71,8 @@ class Neighbor : protected Pointers {
|
||||
int nex_mol; // # of entries in molecule exclusion list
|
||||
int *ex_mol_group; // molecule group #'s to exclude
|
||||
int *ex_mol_bit; // molecule group bits to exclude
|
||||
int *ex_mol_intra; // 0 = exclude if in 2 molecules (inter)
|
||||
// 1 = exclude if in same molecule (intra)
|
||||
|
||||
// special info, used by NeighPair
|
||||
|
||||
@ -229,6 +231,7 @@ class Neighbor : protected Pointers {
|
||||
virtual void init_ex_type_kokkos(int) {}
|
||||
virtual void init_ex_bit_kokkos() {}
|
||||
virtual void init_ex_mol_bit_kokkos() {}
|
||||
virtual void grow_ex_mol_intra_kokkos() {}
|
||||
};
|
||||
|
||||
namespace NeighConst {
|
||||
|
||||
@ -86,6 +86,7 @@ void NPair::copy_neighbor_info()
|
||||
nex_mol = neighbor->nex_mol;
|
||||
ex_mol_group = neighbor->ex_mol_group;
|
||||
ex_mol_bit = neighbor->ex_mol_bit;
|
||||
ex_mol_intra = neighbor->ex_mol_intra;
|
||||
|
||||
// special info
|
||||
|
||||
@ -180,8 +181,17 @@ int NPair::exclusion(int i, int j, int itype, int jtype,
|
||||
|
||||
if (nex_mol) {
|
||||
for (m = 0; m < nex_mol; m++)
|
||||
|
||||
// intra-chain: exclude i-j pair if in same molecule
|
||||
// inter-chain: exclude i-j pair if in different molecules
|
||||
|
||||
if (ex_mol_intra[m]) {
|
||||
if (mask[i] & ex_mol_bit[m] && mask[j] & ex_mol_bit[m] &&
|
||||
molecule[i] == molecule[j]) return 1;
|
||||
} else {
|
||||
if (mask[i] & ex_mol_bit[m] && mask[j] & ex_mol_bit[m] &&
|
||||
molecule[i] != molecule[j]) return 1;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
@ -61,8 +61,10 @@ class NPair : protected Pointers {
|
||||
int *ex1_bit,*ex2_bit; // pairs of group bits to exclude
|
||||
|
||||
int nex_mol; // # of entries in molecule exclusion list
|
||||
int *ex_mol_group; // molecule group #'s to exclude
|
||||
int *ex_mol_bit; // molecule group bits to exclude
|
||||
int *ex_mol_group; // molecule group #'s to exclude
|
||||
int *ex_mol_intra; // 0 = exclude if in 2 molecules (inter)
|
||||
// 1 = exclude if in same molecule (intra)
|
||||
|
||||
// special data from Neighbor class
|
||||
|
||||
|
||||
Reference in New Issue
Block a user