Merging to stay up-to-date after patch 5Jun2019
This commit is contained in:
@ -322,7 +322,7 @@ find_package(OpenMP QUIET)
|
||||
# where we assume older GCC semantics. For the time being, we disable OpenMP by default
|
||||
# for GCC 9.x and beyond. People may manually turn it on, but need to run the script
|
||||
# src/USER-OMP/hack_openmp_for_pgi_gcc9.sh on all sources to make it compatible with gcc 9.
|
||||
if ((${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU") AND (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 9.0.0))
|
||||
if ((CMAKE_CXX_COMPILER_ID STREQUAL "GNU") AND (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 8.99.9))
|
||||
option(BUILD_OMP "Build with OpenMP support" OFF)
|
||||
else()
|
||||
option(BUILD_OMP "Build with OpenMP support" ${OpenMP_FOUND})
|
||||
@ -1134,6 +1134,12 @@ if(PKG_OPT)
|
||||
endif()
|
||||
|
||||
if(PKG_USER-INTEL)
|
||||
include(CheckIncludeFile)
|
||||
check_include_file(immintrin.h FOUND_IMMINTRIN)
|
||||
if(NOT FOUND_IMMINTRIN)
|
||||
message(FATAL_ERROR "immintrin.h header not found, Intel package won't work without it")
|
||||
endif()
|
||||
|
||||
add_definitions(-DLMP_USER_INTEL)
|
||||
|
||||
set(INTEL_ARCH "cpu" CACHE STRING "Architectures used by USER-INTEL (cpu or knl)")
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
.TH LAMMPS "31 May 2019" "2019-05-31"
|
||||
.TH LAMMPS "5 June 2019" "2019-06-05"
|
||||
.SH NAME
|
||||
.B LAMMPS
|
||||
\- Molecular Dynamics Simulator.
|
||||
|
||||
@ -33,6 +33,11 @@ commands in it are used to define a LAMMPS simulation.
|
||||
Commands_bond
|
||||
Commands_kspace
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
Commands_removed
|
||||
|
||||
END_RST -->
|
||||
|
||||
<!-- HTML_ONLY -->
|
||||
@ -49,5 +54,7 @@ END_RST -->
|
||||
"Bond, angle, dihedral, improper commands"_Commands_bond.html
|
||||
"KSpace solvers"_Commands_kspace.html :all(b)
|
||||
|
||||
"Removed commands and packages"_Commands_removed.html :all(b)
|
||||
|
||||
<!-- END_HTML_ONLY -->
|
||||
|
||||
|
||||
@ -28,8 +28,12 @@ OPT.
|
||||
|
||||
"none"_bond_none.html,
|
||||
"zero"_bond_zero.html,
|
||||
"hybrid"_bond_hybrid.html :tb(c=3,ea=c)
|
||||
|
||||
"hybrid"_bond_hybrid.html,
|
||||
,
|
||||
,
|
||||
,
|
||||
,
|
||||
,
|
||||
"class2 (ko)"_bond_class2.html,
|
||||
"fene (iko)"_bond_fene.html,
|
||||
"fene/expand (o)"_bond_fene_expand.html,
|
||||
@ -56,8 +60,12 @@ OPT.
|
||||
|
||||
"none"_angle_none.html,
|
||||
"zero"_angle_zero.html,
|
||||
"hybrid"_angle_hybrid.html :tb(c=3,ea=c)
|
||||
|
||||
"hybrid"_angle_hybrid.html,
|
||||
,
|
||||
,
|
||||
,
|
||||
,
|
||||
,
|
||||
"charmm (iko)"_angle_charmm.html,
|
||||
"class2 (ko)"_angle_class2.html,
|
||||
"class2/p6"_angle_class2.html,
|
||||
@ -89,8 +97,12 @@ OPT.
|
||||
|
||||
"none"_dihedral_none.html,
|
||||
"zero"_dihedral_zero.html,
|
||||
"hybrid"_dihedral_hybrid.html :tb(c=3,ea=c)
|
||||
|
||||
"hybrid"_dihedral_hybrid.html,
|
||||
,
|
||||
,
|
||||
,
|
||||
,
|
||||
,
|
||||
"charmm (iko)"_dihedral_charmm.html,
|
||||
"charmmfsw"_dihedral_charmm.html,
|
||||
"class2 (ko)"_dihedral_class2.html,
|
||||
@ -117,8 +129,12 @@ OPT.
|
||||
|
||||
"none"_improper_none.html,
|
||||
"zero"_improper_zero.html,
|
||||
"hybrid"_improper_hybrid.html :tb(c=3,ea=c)
|
||||
|
||||
"hybrid"_improper_hybrid.html,
|
||||
,
|
||||
,
|
||||
,
|
||||
,
|
||||
,
|
||||
"class2 (ko)"_improper_class2.html,
|
||||
"cossq (o)"_improper_cossq.html,
|
||||
"cvff (io)"_improper_cvff.html,
|
||||
|
||||
@ -27,8 +27,11 @@ OPT.
|
||||
"none"_pair_none.html,
|
||||
"zero"_pair_zero.html,
|
||||
"hybrid (k)"_pair_hybrid.html,
|
||||
"hybrid/overlay (k)"_pair_hybrid.html :tb(c=4,ea=c)
|
||||
|
||||
"hybrid/overlay (k)"_pair_hybrid.html,
|
||||
,
|
||||
,
|
||||
,
|
||||
,
|
||||
"adp (o)"_pair_adp.html,
|
||||
"agni (o)"_pair_agni.html,
|
||||
"airebo (io)"_pair_airebo.html,
|
||||
|
||||
66
doc/src/Commands_removed.txt
Normal file
66
doc/src/Commands_removed.txt
Normal file
@ -0,0 +1,66 @@
|
||||
"Higher level section"_Commands.html - "LAMMPS WWW Site"_lws - "LAMMPS
|
||||
Documentation"_ld - "LAMMPS Commands"_lc :c
|
||||
|
||||
:link(lws,http://lammps.sandia.gov)
|
||||
:link(ld,Manual.html)
|
||||
:link(lc,Commands.html)
|
||||
|
||||
:line
|
||||
|
||||
Removed commands and packages :h3
|
||||
|
||||
This page lists LAMMPS commands and packages that have been removed from
|
||||
the distribution and provides suggestions for alternatives or replacements.
|
||||
LAMMPS has special dummy styles implemented, that will stop LAMMPS and
|
||||
print a suitable error message in most cases, when a style/command is used
|
||||
that has been removed.
|
||||
|
||||
Fix ave/spatial and fix ave/spatial/sphere :h4
|
||||
|
||||
The fixes ave/spatial and ave/spatial/sphere have been removed from LAMMPS
|
||||
since they were superseded by the more general and extensible "chunk
|
||||
infrastructure". Here the system is partitioned in one of many possible
|
||||
ways through the "compute chunk/atom"_compute_chunk_atom.html command
|
||||
and then averaging is done using "fix ave/chunk"_fix_ave_chunk.html.
|
||||
Please refer to the "chunk HOWTO"_Howto_chunk.html section for an overview.
|
||||
|
||||
MEAM package :h4
|
||||
|
||||
The MEAM package has been removed since it was superseded by the
|
||||
"USER-MEAMC package"_Package_details.html#PKG-USER-MEAMC. The code in
|
||||
the USER-MEAMC package is a translation of the Fortran code of MEAM into C++,
|
||||
which removes several restrictions (e.g. there can be multiple instances
|
||||
in hybrid pair styles) and allows for some optimizations leading
|
||||
to better performance. The new pair style "meam/c"_pair_meamc.html has
|
||||
the exact same syntax as the old "meam" pair style and thus pair style
|
||||
"meam"_pair_meamc.html is an alias to the new style and backward
|
||||
compatibility of old inputs is preserved.
|
||||
|
||||
REAX package :h4
|
||||
|
||||
The REAX package has been removed since it was superseded by the
|
||||
"USER-REAXC package"_Package_details.html#PKG-USER-REAXC. The USER-REAXC
|
||||
package has been tested to yield equivalent results to the REAX package,
|
||||
offers better performance, supports OpenMP multi-threading via USER-OMP,
|
||||
and GPU and threading parallelization through KOKKOS. The new pair styles
|
||||
are not syntax compatible with the removed reax pair style, so input
|
||||
files will have to be adapted.
|
||||
|
||||
USER-CUDA package :h4
|
||||
|
||||
The USER-CUDA package had been removed, since it had been unmaintained
|
||||
for a long time and had known bugs and problems. Significant parts of
|
||||
the design were transferred to the
|
||||
"KOKKOS package"_Package_details.html#PKG-KOKKOS, which has similar
|
||||
performance characteristics on Nvidia GPUs. Both, the KOKKOS
|
||||
and the "GPU package"_Package_details.html#PKG-GPU are maintained
|
||||
and allow running LAMMPS with GPU acceleration.
|
||||
|
||||
restart2data tool :h4
|
||||
|
||||
The functionality of the restart2data tool has been folded into the
|
||||
LAMMPS executable directly instead of having a separate tool. A
|
||||
combination of the commands "read_restart"_read_restart.html and
|
||||
"write_data"_write_data.html can be used to the same effect. For added
|
||||
convenience this conversion can also be triggered by "command line
|
||||
flags"_Run_options.html
|
||||
@ -610,6 +610,62 @@ This means there is something invalid about the topology definitions. :dd
|
||||
|
||||
The data file header lists bonds but no bond types. :dd
|
||||
|
||||
{Bond/react: Cannot use fix bond/react with non-molecular systems} :dt
|
||||
|
||||
Only systems with bonds that can be changed can be used. Atom_style
|
||||
template does not qualify. :dd
|
||||
|
||||
{Bond/react: Rmax cutoff is longer than pairwise cutoff} :dt
|
||||
|
||||
This is not allowed because bond creation is done using the pairwise
|
||||
neighbor list. :dd
|
||||
|
||||
{Bond/react: Molecule template ID for fix bond/react does not exist} :dt
|
||||
|
||||
A valid molecule template must have been created with the molecule
|
||||
command. :dd
|
||||
|
||||
{Bond/react: Reaction templates must contain the same number of atoms} :dt
|
||||
|
||||
There should be a one-to-one correspondence between atoms in the
|
||||
pre-reacted and post-reacted templates, as specified by the map file. :dd
|
||||
|
||||
{Bond/react: Unknown section in map file} :dt
|
||||
|
||||
Please ensure reaction map files are properly formatted. :dd
|
||||
|
||||
{Bond/react: Atom affected by reaction too close to template edge} :dt
|
||||
|
||||
This means an atom which changes type during the reaction is too close
|
||||
to an 'edge' atom defined in the superimpose file. This could cause
|
||||
incorrect assignment of bonds, angle, etc. Generally, this means you
|
||||
must include more atoms in your templates, such that there are at
|
||||
least two atoms between each atom involved in the reaction and an edge
|
||||
atom. :dd
|
||||
|
||||
{Bond/react: Fix bond/react needs ghost atoms from farther away} :dt
|
||||
|
||||
This is because a processor needs to superimpose the entire unreacted
|
||||
molecule template onto simulation atoms it knows about. The
|
||||
comm_modify cutoff command can be used to extend the communication
|
||||
range. :dd
|
||||
|
||||
{Bond/react: A deleted atom cannot remain bonded to an atom that is not deleted} :dt
|
||||
|
||||
Self-explanatory. :dd
|
||||
|
||||
{Bond/react special bond generation overflow} :dt
|
||||
|
||||
The number of special bonds per-atom created by a reaction exceeds the
|
||||
system setting. See the read_data or create_box command for how to
|
||||
specify this value. :dd
|
||||
|
||||
{Bond/react topology/atom exceed system topology/atom} :dt
|
||||
|
||||
The number of bonds, angles etc per-atom created by a reaction exceeds
|
||||
the system setting. See the read_data or create_box command for how to
|
||||
specify this value. :dd
|
||||
|
||||
{Both restart files must use % or neither} :dt
|
||||
|
||||
Self-explanatory. :dd
|
||||
@ -7041,6 +7097,18 @@ Self-explanatory. :dd
|
||||
|
||||
One or more GPUs must be used when Kokkos is compiled for CUDA. :dd
|
||||
|
||||
{Kspace_modify mesh parameter must be all zero or all positive} :dt
|
||||
|
||||
Valid kspace mesh parameters are >0. The code will try to auto-detect
|
||||
suitable values when all three mesh sizes are set to zero (the default). :dd
|
||||
|
||||
{Kspace_modify mesh/disp parameter must be all zero or all positive} :dt
|
||||
|
||||
Valid kspace mesh/disp parameters are >0. The code will try to auto-detect
|
||||
suitable values when all three mesh sizes are set to zero [and]
|
||||
the required accuracy via {force/disp/real} as well as
|
||||
{force/disp/kspace} is set. :dd
|
||||
|
||||
{Kspace style does not support compute group/group} :dt
|
||||
|
||||
Self-explanatory. :dd
|
||||
|
||||
@ -82,6 +82,11 @@ bond/angle/dihedral. LAMMPS computes this by taking the maximum bond
|
||||
length, multiplying by the number of bonds in the interaction (e.g. 3
|
||||
for a dihedral) and adding a small amount of stretch. :dd
|
||||
|
||||
{Bond/react: An atom in 'react #%d' changes bond connectivity but not atom type} :dt
|
||||
|
||||
You may want to double-check that all atom types are properly assigned
|
||||
in the post-reaction template. :dd
|
||||
|
||||
{Both groups in compute group/group have a net charge; the Kspace boundary correction to energy will be non-zero} :dt
|
||||
|
||||
Self-explanatory. :dd
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
<!-- HTML_ONLY -->
|
||||
<HEAD>
|
||||
<TITLE>LAMMPS Users Manual</TITLE>
|
||||
<META NAME="docnumber" CONTENT="31 May 2019 version">
|
||||
<META NAME="docnumber" CONTENT="5 Jun 2019 version">
|
||||
<META NAME="author" CONTENT="http://lammps.sandia.gov - Sandia National Laboratories">
|
||||
<META NAME="copyright" CONTENT="Copyright (2003) Sandia Corporation. This software and manual is distributed under the GNU General Public License.">
|
||||
</HEAD>
|
||||
@ -21,7 +21,7 @@
|
||||
:line
|
||||
|
||||
LAMMPS Documentation :c,h1
|
||||
31 May 2019 version :c,h2
|
||||
5 Jun 2019 version :c,h2
|
||||
|
||||
"What is a LAMMPS version?"_Manual_version.html
|
||||
|
||||
|
||||
@ -18,8 +18,8 @@ fix ID group-ID bond/react common_keyword values ...
|
||||
|
||||
ID, group-ID are documented in "fix"_fix.html command. Group-ID is ignored. :ulb,l
|
||||
bond/react = style name of this fix command :l
|
||||
zero or more common keyword/value pairs may be appended directly after 'bond/react' :l
|
||||
these apply to all reaction specifications (below) :l
|
||||
the common keyword/values may be appended directly after 'bond/react' :l
|
||||
this applies to all reaction specifications (below) :l
|
||||
common_keyword = {stabilization} :l
|
||||
{stabilization} values = {no} or {yes} {group-ID} {xmax}
|
||||
{no} = no reaction site stabilization
|
||||
@ -136,10 +136,12 @@ words, can be customized for each reaction, or reaction step):
|
||||
A check for possible new reaction sites is performed every {Nevery}
|
||||
timesteps.
|
||||
|
||||
Two conditions must be met for a reaction to occur. First a bonding
|
||||
atom pair must be identified. Second, the topology surrounding the
|
||||
bonding atom pair must match the topology of the pre-reaction
|
||||
template. If both these conditions are met, the reaction site is
|
||||
Three physical conditions must be met for a reaction to occur. First,
|
||||
a bonding atom pair must be identified within the reaction distance
|
||||
cutoffs. Second, the topology surrounding the bonding atom pair must
|
||||
match the topology of the pre-reaction template. Finally, any reaction
|
||||
constraints listed in the map file (see below) must be satisfied. If
|
||||
all of these conditions are met, the reaction site is eligible to be
|
||||
modified to match the post-reaction template.
|
||||
|
||||
A bonding atom pair will be identified if several conditions are met.
|
||||
@ -203,14 +205,24 @@ new types must also be defined during the setup of a given simulation.
|
||||
A discussion of correctly handling this is also provided on the
|
||||
"molecule"_molecule.html command page.
|
||||
|
||||
NOTE: When a reaction occurs, it is possible that the resulting
|
||||
topology/atom (e.g. special bonds, dihedrals, etc.) exceeds that of
|
||||
the existing system and reaction templates. As when inserting
|
||||
molecules, enough space for this increased topology/atom must be
|
||||
reserved by using the relevant "extra" keywords to the
|
||||
"read_data"_read_data.html or "create_box"_create_box.html commands.
|
||||
|
||||
The map file is a text document with the following format:
|
||||
|
||||
A map file has a header and a body. The header of map file the
|
||||
contains one mandatory keyword and three optional keywords. The
|
||||
mandatory keyword is 'equivalences' and the optional keywords are
|
||||
'edgeIDs' and 'deleteIDs' and 'customIDs':
|
||||
contains one mandatory keyword and four optional keywords. The
|
||||
mandatory keyword is 'equivalences':
|
||||
|
||||
N {equivalences} = # of atoms N in the reaction molecule templates :pre
|
||||
|
||||
The optional keywords are 'edgeIDs', 'deleteIDs', 'customIDs' and
|
||||
'constraints':
|
||||
|
||||
N {equivalences} = # of atoms N in the reaction molecule templates
|
||||
N {edgeIDs} = # of edge atoms N in the pre-reacted molecule template
|
||||
N {deleteIDs} = # of atoms N that are specified for deletion
|
||||
N {customIDs} = # of atoms N that are specified for a custom update
|
||||
@ -244,8 +256,8 @@ A sample map file is given below:
|
||||
|
||||
# this is a map file :pre
|
||||
|
||||
2 edgeIDs
|
||||
7 equivalences :pre
|
||||
7 equivalences
|
||||
2 edgeIDs :pre
|
||||
|
||||
BondingIDs :pre
|
||||
|
||||
@ -297,26 +309,25 @@ can allow for the possibility of one or more reverse reactions.
|
||||
|
||||
The optional keywords deal with the probability of a given reaction
|
||||
occurring as well as the stable equilibration of each reaction site as
|
||||
it occurs.
|
||||
it occurs:
|
||||
|
||||
The {prob} keyword can affect whether an eligible reaction actually
|
||||
occurs. The fraction setting must be a value between 0.0 and 1.0. A
|
||||
uniform random number between 0.0 and 1.0 is generated and the
|
||||
The {prob} keyword can affect whether or not an eligible reaction
|
||||
actually occurs. The fraction setting must be a value between 0.0 and
|
||||
1.0. A uniform random number between 0.0 and 1.0 is generated and the
|
||||
eligible reaction only occurs if the random number is less than the
|
||||
fraction. Up to N reactions are permitted to occur, as optionally
|
||||
specified by the {max_rxn} keyword.
|
||||
|
||||
The {stabilize_steps} keyword allows for the specification of how many
|
||||
timesteps a reaction site is stabilized before being returned to the
|
||||
overall system thermostat.
|
||||
|
||||
In order to produce the most physical behavior, this 'reaction site
|
||||
equilibration time' should be tuned to be as small as possible while
|
||||
retaining stability for a given system or reaction step. After a
|
||||
limited number of case studies, this number has been set to a default
|
||||
of 60 timesteps. Ideally, it should be individually tuned for each fix
|
||||
reaction step. Note that in some situations, decreasing rather than
|
||||
increasing this parameter will result in an increase in stability.
|
||||
overall system thermostat. In order to produce the most physical
|
||||
behavior, this 'reaction site equilibration time' should be tuned to
|
||||
be as small as possible while retaining stability for a given system
|
||||
or reaction step. After a limited number of case studies, this number
|
||||
has been set to a default of 60 timesteps. Ideally, it should be
|
||||
individually tuned for each fix reaction step. Note that in some
|
||||
situations, decreasing rather than increasing this parameter will
|
||||
result in an increase in stability.
|
||||
|
||||
The {update_edges} keyword can increase the number of atoms whose
|
||||
atomic charges are updated, when the pre-reaction template contains
|
||||
@ -324,11 +335,11 @@ edge atoms. When the value is set to 'charges,' all atoms' atomic
|
||||
charges are updated to those specified by the post-reaction template,
|
||||
including atoms near the edge of reaction templates. When the value is
|
||||
set to 'custom,' an additional section must be included in the map
|
||||
file that specifies whether to update charges, on a per-atom basis.
|
||||
The format of this section is detailed above. Listing a pre-reaction
|
||||
atom ID with a value of 'charges' will force the update of the atom's
|
||||
charge, even if it is near a template edge. Atoms not near a template
|
||||
edge are unaffected by this setting.
|
||||
file that specifies whether or not to update charges, on a per-atom
|
||||
basis. The format of this section is detailed above. Listing a
|
||||
pre-reaction atom ID with a value of 'charges' will force the update
|
||||
of the atom's charge, even if it is near a template edge. Atoms not
|
||||
near a template edge are unaffected by this setting.
|
||||
|
||||
A few other considerations:
|
||||
|
||||
|
||||
@ -99,7 +99,7 @@ This pair style does not support the "pair_modify"_pair_modify.html
|
||||
shift, table, and tail options.
|
||||
|
||||
This pair style does not write its information to "binary restart
|
||||
files"_restart.html, since it is stored in potential files. Thus, you
|
||||
files"_restart.html. Thus, you
|
||||
need to re-specify the pair_style and pair_coeff commands in an input
|
||||
script that reads a restart file.
|
||||
|
||||
|
||||
@ -875,7 +875,7 @@ The {is_active()} function allows to query for active settings which
|
||||
are grouped by categories. Currently supported categories and
|
||||
arguments are:
|
||||
|
||||
{package} (argument = {cuda} or {gpu} or {intel} or {kokkos} or {omp})
|
||||
{package} (argument = {gpu} or {intel} or {kokkos} or {omp})
|
||||
{newton} (argument = {pair} or {bond} or {any})
|
||||
{pair} (argument = {single} or {respa} or {manybody} or {tail} or {shift})
|
||||
{comm_style} (argument = {brick} or {tiled})
|
||||
@ -904,7 +904,7 @@ kspace_style pppm :pre
|
||||
|
||||
Example 2: use r-RESPA with inner/outer cutoff, if supported by pair style, otherwise fall back to using pair and reducing the outer time step
|
||||
|
||||
timestep $(2.0*(1.0+*is_active(pair,respa))
|
||||
timestep $(2.0*(1.0+2.0*is_active(pair,respa))
|
||||
if $(is_active(pair,respa)) then "run_style respa 4 3 2 2 improper 1 inner 2 5.5 7.0 outer 3 kspace 4" else "run_style respa 3 3 2 improper 1 pair 2 kspace 3" :pre
|
||||
|
||||
The {is_defined()} function allows to query categories like {compute},
|
||||
|
||||
@ -2844,6 +2844,7 @@ unoptimized
|
||||
unpadded
|
||||
unphysical
|
||||
unphysically
|
||||
unreacted
|
||||
unscaled
|
||||
unsets
|
||||
unsmoothed
|
||||
|
||||
@ -154,7 +154,6 @@ help:
|
||||
|
||||
|
||||
lmpinstalledpkgs.h: $(SRC) $(INC)
|
||||
@echo 'Gathering installed package information (may take a little while)'
|
||||
@echo '#ifndef LMP_INSTALLED_PKGS_H' > ${TMPNAME}.lmpinstalled
|
||||
@echo '#define LMP_INSTALLED_PKGS_H' >> ${TMPNAME}.lmpinstalled
|
||||
@echo 'const char * LAMMPS_NS::LAMMPS::installed_packages[] = {' >> ${TMPNAME}.lmpinstalled
|
||||
@ -204,6 +203,7 @@ gitversion:
|
||||
@test -f MAKE/Makefile.$@ -o -f MAKE/OPTIONS/Makefile.$@ -o \
|
||||
-f MAKE/MACHINES/Makefile.$@ -o -f MAKE/MINE/Makefile.$@
|
||||
@if [ ! -d $(objdir) ]; then mkdir $(objdir); fi
|
||||
@echo 'Gathering installed package information (may take a little while)'
|
||||
@$(SHELL) Make.sh style
|
||||
@$(SHELL) Make.sh packages
|
||||
@$(MAKE) $(MFLAGS) lmpinstalledpkgs.h gitversion
|
||||
|
||||
@ -74,7 +74,6 @@ void PairLJClass2CoulLongSoft::compute(int eflag, int vflag)
|
||||
{
|
||||
int i,j,ii,jj,inum,jnum,itype,jtype;
|
||||
double qtmp,xtmp,ytmp,ztmp,delx,dely,delz,evdwl,ecoul,fpair;
|
||||
double fraction;
|
||||
double rsq,r,forcecoul,forcelj;
|
||||
double grij,expm2,prefactor,t,erfc;
|
||||
double factor_coul,factor_lj;
|
||||
@ -490,7 +489,7 @@ double PairLJClass2CoulLongSoft::single(int i, int j, int itype, int jtype,
|
||||
double &fforce)
|
||||
{
|
||||
double denc,r,denlj,r4sig6,grij,expm2,t,erfc,prefactor;
|
||||
double fraction,forcecoul,forcelj,phicoul,philj;
|
||||
double forcecoul,forcelj,phicoul,philj;
|
||||
|
||||
if (rsq < cut_coulsq) {
|
||||
r = sqrt(rsq);
|
||||
|
||||
@ -308,8 +308,7 @@ FixBondReact::FixBondReact(LAMMPS *lmp, int narg, char **arg) :
|
||||
onemol->check_attributes(0);
|
||||
twomol->check_attributes(0);
|
||||
if (onemol->natoms != twomol->natoms)
|
||||
error->all(FLERR,"Post-reacted template must contain the same "
|
||||
"number of atoms as the pre-reacted template");
|
||||
error->all(FLERR,"Bond/react: Reaction templates must contain the same number of atoms");
|
||||
get_molxspecials();
|
||||
read(i);
|
||||
fclose(fp);
|
||||
@ -324,7 +323,7 @@ FixBondReact::FixBondReact(LAMMPS *lmp, int narg, char **arg) :
|
||||
delete [] files;
|
||||
|
||||
if (atom->molecular != 1)
|
||||
error->all(FLERR,"Cannot use fix bond/react with non-molecular systems");
|
||||
error->all(FLERR,"Bond/react: Cannot use fix bond/react with non-molecular systems");
|
||||
|
||||
// check if bonding atoms are 1-2, 1-3, or 1-4 bonded neighbors
|
||||
// if so, we don't need non-bonded neighbor list
|
||||
@ -472,17 +471,19 @@ FixBondReact::~FixBondReact()
|
||||
delete [] guess_branch;
|
||||
delete [] pioneer_count;
|
||||
|
||||
char **newarg;
|
||||
newarg = new char*[2];
|
||||
newarg[0] = master_group;
|
||||
newarg[1] = (char *) "delete";
|
||||
group->assign(2,newarg);
|
||||
if (stabilization_flag == 1) {
|
||||
newarg[0] = exclude_group;
|
||||
if (group) {
|
||||
char **newarg;
|
||||
newarg = new char*[2];
|
||||
newarg[0] = master_group;
|
||||
newarg[1] = (char *) "delete";
|
||||
group->assign(2,newarg);
|
||||
delete [] exclude_group;
|
||||
if (stabilization_flag == 1) {
|
||||
newarg[0] = exclude_group;
|
||||
group->assign(2,newarg);
|
||||
delete [] exclude_group;
|
||||
}
|
||||
delete [] newarg;
|
||||
}
|
||||
delete [] newarg;
|
||||
}
|
||||
|
||||
/* ---------------------------------------------------------------------- */
|
||||
@ -663,7 +664,7 @@ void FixBondReact::init()
|
||||
// check cutoff for iatomtype,jatomtype
|
||||
for (int i = 0; i < nreacts; i++) {
|
||||
if (force->pair == NULL || cutsq[i][1] > force->pair->cutsq[iatomtype[i]][jatomtype[i]])
|
||||
error->all(FLERR,"Fix bond/react cutoff is longer than pairwise cutoff");
|
||||
error->all(FLERR,"Bond/react: Fix bond/react cutoff is longer than pairwise cutoff");
|
||||
}
|
||||
|
||||
// need a half neighbor list, built every Nevery steps
|
||||
@ -1172,7 +1173,7 @@ void FixBondReact::superimpose_algorithm()
|
||||
// let's go ahead and catch the simplest of hangs
|
||||
//if (hang_catch > onemol->natoms*4)
|
||||
if (hang_catch > atom->nlocal*30) {
|
||||
error->one(FLERR,"Excessive iteration of superimpose algorithm");
|
||||
error->one(FLERR,"Bond/react: Excessive iteration of superimpose algorithm");
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1285,7 +1286,7 @@ void FixBondReact::make_a_guess()
|
||||
|
||||
for (int i = 0; i < nxspecial[atom->map(glove[pion][1])][0]; i++) {
|
||||
if (atom->map(xspecial[atom->map(glove[pion][1])][i]) < 0) {
|
||||
error->all(FLERR,"Fix bond/react needs ghost atoms from further away1"); // parallel issues.
|
||||
error->all(FLERR,"Bond/react: Fix bond/react needs ghost atoms from further away1"); // parallel issues.
|
||||
}
|
||||
if (i_limit_tags[(int)atom->map(xspecial[atom->map(glove[pion][1])][i])] != 0) {
|
||||
status = GUESSFAIL;
|
||||
@ -1396,7 +1397,7 @@ void FixBondReact::check_a_neighbor()
|
||||
|
||||
//another check for ghost atoms. perhaps remove the one in make_a_guess
|
||||
if (atom->map(glove[(int)onemol_xspecial[pion][neigh]-1][1]) < 0) {
|
||||
error->all(FLERR,"Fix bond/react needs ghost atoms from further away2");
|
||||
error->all(FLERR,"Bond/react: Fix bond/react needs ghost atoms from further away2");
|
||||
}
|
||||
|
||||
for (int j = 0; j < onemol_nxspecial[onemol_xspecial[pion][neigh]-1][0]; j++) {
|
||||
@ -1448,7 +1449,7 @@ void FixBondReact::check_a_neighbor()
|
||||
|
||||
//another check for ghost atoms. perhaps remove the one in make_a_guess
|
||||
if (atom->map(glove[(int)onemol_xspecial[pion][neigh]-1][1]) < 0) {
|
||||
error->all(FLERR,"Fix bond/react needs ghost atoms from further away3");
|
||||
error->all(FLERR,"Bond/react: Fix bond/react needs ghost atoms from further away3");
|
||||
}
|
||||
|
||||
for (int ii = 0; ii < onemol_nxspecial[onemol_xspecial[pion][neigh]-1][0]; ii++) {
|
||||
@ -1490,7 +1491,7 @@ void FixBondReact::crosscheck_the_neighbor()
|
||||
glove[onemol_xspecial[pion][trace]-1][0] == 0) {
|
||||
|
||||
if (avail_guesses == MAXGUESS) {
|
||||
error->warning(FLERR,"Fix bond/react failed because MAXGUESS set too small. ask developer for info");
|
||||
error->warning(FLERR,"Bond/react: Fix bond/react failed because MAXGUESS set too small. ask developer for info");
|
||||
status = GUESSFAIL;
|
||||
return;
|
||||
}
|
||||
@ -1559,7 +1560,7 @@ void FixBondReact::inner_crosscheck_loop()
|
||||
|
||||
//another check for ghost atoms. perhaps remove the one in make_a_guess
|
||||
if (atom->map(glove[(int)onemol_xspecial[pion][neigh]-1][1]) < 0) {
|
||||
error->all(FLERR,"Fix bond/react needs ghost atoms from further away4");
|
||||
error->all(FLERR,"Bond/react: Fix bond/react needs ghost atoms from further away4");
|
||||
}
|
||||
|
||||
if (guess_branch[avail_guesses-1] == 0) avail_guesses--;
|
||||
@ -1720,7 +1721,7 @@ void FixBondReact::find_landlocked_atoms(int myrxn)
|
||||
// if atoms change types, but aren't landlocked, that's bad
|
||||
for (int i = 0; i < twomol->natoms; i++) {
|
||||
if (twomol->type[i] != onemol->type[equivalences[i][1][myrxn]-1] && landlocked_atoms[i][myrxn] == 0)
|
||||
error->one(FLERR,"Atom affected by reaction too close to template edge");
|
||||
error->one(FLERR,"Bond/react: Atom affected by reaction too close to template edge");
|
||||
}
|
||||
|
||||
// additionally, if a bond changes type, but neither involved atom is landlocked, bad
|
||||
@ -1736,7 +1737,7 @@ void FixBondReact::find_landlocked_atoms(int myrxn)
|
||||
onemol_batom = onemol->bond_atom[onemol_atomi-1][m];
|
||||
if (onemol_batom == equivalences[twomol_atomj-1][1][myrxn]) {
|
||||
if (twomol->bond_type[i][j] != onemol->bond_type[onemol_atomi-1][m]) {
|
||||
error->one(FLERR,"Bond type affected by reaction too close to template edge");
|
||||
error->one(FLERR,"Bond/react: Bond type affected by reaction too close to template edge");
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1746,7 +1747,7 @@ void FixBondReact::find_landlocked_atoms(int myrxn)
|
||||
onemol_batom = onemol->bond_atom[onemol_atomj-1][m];
|
||||
if (onemol_batom == equivalences[i][1][myrxn]) {
|
||||
if (twomol->bond_type[i][j] != onemol->bond_type[onemol_atomj-1][m]) {
|
||||
error->one(FLERR,"Bond type affected by reaction too close to template edge");
|
||||
error->one(FLERR,"Bond/react: Bond type affected by reaction too close to template edge");
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1762,7 +1763,7 @@ void FixBondReact::find_landlocked_atoms(int myrxn)
|
||||
int ii = reverse_equiv[i][1][myrxn] - 1;
|
||||
for (int j = 0; j < twomol_nxspecial[ii][0]; j++) {
|
||||
if (delete_atoms[equivalences[twomol_xspecial[ii][j]-1][1][myrxn]-1][myrxn] == 0) {
|
||||
error->one(FLERR,"A deleted atom cannot remain bonded to an atom that is not deleted");
|
||||
error->one(FLERR,"Bond/react: A deleted atom cannot remain bonded to an atom that is not deleted");
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1773,7 +1774,7 @@ void FixBondReact::find_landlocked_atoms(int myrxn)
|
||||
for (int i = 0; i < twomol->natoms; i++) {
|
||||
if (twomol_nxspecial[i][0] != onemol_nxspecial[equivalences[i][1][myrxn]-1][0] && landlocked_atoms[i][myrxn] == 0) {
|
||||
char str[128];
|
||||
sprintf(str,"An atom in 'react #%d' changes bond connectivity but not atom type",myrxn+1);
|
||||
sprintf(str,"Bond/react: An atom in 'react #%d' changes bond connectivity but not atom type",myrxn+1);
|
||||
error->warning(FLERR,str);
|
||||
break;
|
||||
}
|
||||
@ -2261,7 +2262,7 @@ void FixBondReact::update_everything()
|
||||
if (landlocked_atoms[j][rxnID] == 1) {
|
||||
for (int k = 0; k < nspecial[atom->map(update_mega_glove[jj+1][i])][2]; k++) {
|
||||
if (atom->map(special[atom->map(update_mega_glove[jj+1][i])][k]) < 0) {
|
||||
error->all(FLERR,"Fix bond/react needs ghost atoms from further away - most likely too many processors");
|
||||
error->all(FLERR,"Bond/react: Fix bond/react needs ghost atoms from further away - most likely too many processors");
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -2322,6 +2323,8 @@ void FixBondReact::update_everything()
|
||||
nspecial[atom->map(update_mega_glove[jj+1][i])][1]++;
|
||||
nspecial[atom->map(update_mega_glove[jj+1][i])][2]++;
|
||||
}
|
||||
if (nspecial[atom->map(update_mega_glove[jj+1][i])][2] > atom->maxspecial)
|
||||
error->one(FLERR,"Bond/react special bond generation overflow");
|
||||
for (int n = nspecial[atom->map(update_mega_glove[jj+1][i])][2]-1; n > insert_num; n--) {
|
||||
special[atom->map(update_mega_glove[jj+1][i])][n] = special[atom->map(update_mega_glove[jj+1][i])][n-1];
|
||||
}
|
||||
@ -2383,6 +2386,8 @@ void FixBondReact::update_everything()
|
||||
bond_type[atom->map(update_mega_glove[jj+1][i])][insert_num] = twomol->bond_type[j][p];
|
||||
bond_atom[atom->map(update_mega_glove[jj+1][i])][insert_num] = update_mega_glove[equivalences[twomol->bond_atom[j][p]-1][1][rxnID]][i];
|
||||
num_bond[atom->map(update_mega_glove[jj+1][i])]++;
|
||||
if (num_bond[atom->map(update_mega_glove[jj+1][i])] > atom->bond_per_atom)
|
||||
error->one(FLERR,"Bond/react topology/atom exceed system topology/atom");
|
||||
delta_bonds++;
|
||||
}
|
||||
}
|
||||
@ -2457,6 +2462,8 @@ void FixBondReact::update_everything()
|
||||
angle_atom2[atom->map(update_mega_glove[jj+1][i])][insert_num] = update_mega_glove[equivalences[twomol->angle_atom2[j][p]-1][1][rxnID]][i];
|
||||
angle_atom3[atom->map(update_mega_glove[jj+1][i])][insert_num] = update_mega_glove[equivalences[twomol->angle_atom3[j][p]-1][1][rxnID]][i];
|
||||
num_angle[atom->map(update_mega_glove[jj+1][i])]++;
|
||||
if (num_angle[atom->map(update_mega_glove[jj+1][i])] > atom->angle_per_atom)
|
||||
error->one(FLERR,"Bond/react topology/atom exceed system topology/atom");
|
||||
delta_angle++;
|
||||
}
|
||||
}
|
||||
@ -2538,6 +2545,8 @@ void FixBondReact::update_everything()
|
||||
dihedral_atom3[atom->map(update_mega_glove[jj+1][i])][insert_num] = update_mega_glove[equivalences[twomol->dihedral_atom3[j][p]-1][1][rxnID]][i];
|
||||
dihedral_atom4[atom->map(update_mega_glove[jj+1][i])][insert_num] = update_mega_glove[equivalences[twomol->dihedral_atom4[j][p]-1][1][rxnID]][i];
|
||||
num_dihedral[atom->map(update_mega_glove[jj+1][i])]++;
|
||||
if (num_dihedral[atom->map(update_mega_glove[jj+1][i])] > atom->dihedral_per_atom)
|
||||
error->one(FLERR,"Bond/react topology/atom exceed system topology/atom");
|
||||
delta_dihed++;
|
||||
}
|
||||
}
|
||||
@ -2619,6 +2628,8 @@ void FixBondReact::update_everything()
|
||||
improper_atom3[atom->map(update_mega_glove[jj+1][i])][insert_num] = update_mega_glove[equivalences[twomol->improper_atom3[j][p]-1][1][rxnID]][i];
|
||||
improper_atom4[atom->map(update_mega_glove[jj+1][i])][insert_num] = update_mega_glove[equivalences[twomol->improper_atom4[j][p]-1][1][rxnID]][i];
|
||||
num_improper[atom->map(update_mega_glove[jj+1][i])]++;
|
||||
if (num_improper[atom->map(update_mega_glove[jj+1][i])] > atom->improper_per_atom)
|
||||
error->one(FLERR,"Bond/react topology/atom exceed system topology/atom");
|
||||
delta_imprp++;
|
||||
}
|
||||
}
|
||||
@ -2716,7 +2727,7 @@ void FixBondReact::read(int myrxn)
|
||||
|
||||
// skip 1st line of file
|
||||
eof = fgets(line,MAXLINE,fp);
|
||||
if (eof == NULL) error->one(FLERR,"Unexpected end of superimpose file");
|
||||
if (eof == NULL) error->one(FLERR,"Bond/react: Unexpected end of superimpose file");
|
||||
|
||||
// read header lines
|
||||
// skip blank lines or lines that start with "#"
|
||||
@ -2770,7 +2781,7 @@ void FixBondReact::read(int myrxn)
|
||||
DeleteAtoms(line, myrxn);
|
||||
} else if (strcmp(keyword,"Constraints") == 0) {
|
||||
Constraints(line, myrxn);
|
||||
} else error->one(FLERR,"Unknown section in superimpose file");
|
||||
} else error->one(FLERR,"Bond/react: Unknown section in map file");
|
||||
|
||||
parse_keyword(1,line,keyword);
|
||||
|
||||
@ -2778,13 +2789,13 @@ void FixBondReact::read(int myrxn)
|
||||
|
||||
// error check
|
||||
if (bondflag == 0 || equivflag == 0)
|
||||
error->all(FLERR,"Superimpose file missing BondingIDs or Equivalences section\n");
|
||||
error->all(FLERR,"Bond/react: Map file missing BondingIDs or Equivalences section\n");
|
||||
|
||||
if (update_edges_flag[myrxn] == 2 && customedgesflag == 0)
|
||||
error->all(FLERR,"Map file must have a Custom Edges section when using 'update_edges custom'\n");
|
||||
error->all(FLERR,"Bond/react: Map file must have a Custom Edges section when using 'update_edges custom'\n");
|
||||
|
||||
if (update_edges_flag[myrxn] != 2 && customedgesflag == 1)
|
||||
error->all(FLERR,"Specify 'update_edges custom' to include Custom Edges section in map file\n");
|
||||
error->all(FLERR,"Bond/react: Specify 'update_edges custom' to include Custom Edges section in map file\n");
|
||||
}
|
||||
|
||||
void FixBondReact::EdgeIDs(char *line, int myrxn)
|
||||
@ -2830,7 +2841,7 @@ void FixBondReact::CustomEdges(char *line, int myrxn)
|
||||
else if (strcmp(edgemode,"charges") == 0)
|
||||
custom_edges[tmp-1][myrxn] = 1;
|
||||
else
|
||||
error->one(FLERR,"Illegal value in 'Custom Edges' section of map file");
|
||||
error->one(FLERR,"Bond/react: Illegal value in 'Custom Edges' section of map file");
|
||||
}
|
||||
delete [] edgemode;
|
||||
}
|
||||
@ -2861,7 +2872,7 @@ void FixBondReact::Constraints(char *line, int myrxn)
|
||||
constraints[myrxn][3] = tmp[2]*tmp[2]; // using square of distance
|
||||
constraints[myrxn][4] = tmp[3]*tmp[3];
|
||||
} else
|
||||
error->one(FLERR,"Illegal constraint type in 'Constraints' section of map file");
|
||||
error->one(FLERR,"Bond/react: Illegal constraint type in 'Constraints' section of map file");
|
||||
}
|
||||
delete [] constraint_type;
|
||||
}
|
||||
@ -2871,7 +2882,7 @@ void FixBondReact::open(char *file)
|
||||
fp = fopen(file,"r");
|
||||
if (fp == NULL) {
|
||||
char str[128];
|
||||
snprintf(str,128,"Cannot open superimpose file %s",file);
|
||||
snprintf(str,128,"Bond/react: Cannot open map file %s",file);
|
||||
error->one(FLERR,str);
|
||||
}
|
||||
}
|
||||
@ -2884,7 +2895,7 @@ void FixBondReact::readline(char *line)
|
||||
else n = strlen(line) + 1;
|
||||
}
|
||||
MPI_Bcast(&n,1,MPI_INT,0,world);
|
||||
if (n == 0) error->all(FLERR,"Unexpected end of superimpose file");
|
||||
if (n == 0) error->all(FLERR,"Bond/react: Unexpected end of map file");
|
||||
MPI_Bcast(line,n,MPI_CHAR,0,world);
|
||||
}
|
||||
|
||||
|
||||
@ -189,47 +189,65 @@ Self-explanatory. Check the input script syntax and compare to the
|
||||
documentation for the command. You can use -echo screen as a
|
||||
command-line option when running LAMMPS to see the offending line.
|
||||
|
||||
E: Invalid exclude group name
|
||||
E: Bond/react: Cannot use fix bond/react with non-molecular systems
|
||||
|
||||
Exclude group name should not previously be defined.
|
||||
|
||||
E: Cannot use fix bond/react with non-molecular systems
|
||||
|
||||
Only systems with bonds that can be changed can be used. Atom_style
|
||||
Only systems with bonds that can be changed can be used. Atom_style
|
||||
template does not qualify.
|
||||
|
||||
E: Fix bond/react cutoff is longer than pairwise cutoff
|
||||
E: Bond/react: Rmax cutoff is longer than pairwise cutoff
|
||||
|
||||
This is not allowed because bond creation is done using the
|
||||
pairwise neighbor list.
|
||||
This is not allowed because bond creation is done using the pairwise
|
||||
neighbor list.
|
||||
|
||||
E: Molecule template ID for fix bond/react does not exist
|
||||
E: Bond/react: Molecule template ID for fix bond/react does not exist
|
||||
|
||||
A valid molecule template must have been created with the molecule command.
|
||||
A valid molecule template must have been created with the molecule
|
||||
command.
|
||||
|
||||
E: Superimpose file errors:
|
||||
E: Bond/react: Reaction templates must contain the same number of atoms
|
||||
|
||||
Please ensure superimpose file is properly formatted.
|
||||
There should be a one-to-one correspondence between atoms in the
|
||||
pre-reacted and post-reacted templates, as specified by the map file.
|
||||
|
||||
E: Atom affected by reaction too close to template edge
|
||||
E: Bond/react: Unknown section in map file
|
||||
|
||||
Please ensure reaction map files are properly formatted.
|
||||
|
||||
E: Bond/react: Atom affected by reaction too close to template edge
|
||||
|
||||
This means an atom which changes type during the reaction is too close
|
||||
to an 'edge' atom defined in the superimpose file. This could cause incorrect
|
||||
assignment of bonds, angle, etc. Generally, this means you must include
|
||||
more atoms in your templates, such that there are at least two atoms
|
||||
between each atom involved in the reaction and an edge atom.
|
||||
to an 'edge' atom defined in the superimpose file. This could cause
|
||||
incorrect assignment of bonds, angle, etc. Generally, this means you
|
||||
must include more atoms in your templates, such that there are at
|
||||
least two atoms between each atom involved in the reaction and an edge
|
||||
atom.
|
||||
|
||||
E: Fix bond/react needs ghost atoms from farther away
|
||||
E: Bond/react: Fix bond/react needs ghost atoms from farther away
|
||||
|
||||
This is because a processor needs to superimpose the entire unreacted
|
||||
molecule template onto simulation atoms it can 'see.' The comm_modify cutoff
|
||||
command can be used to extend the communication range.
|
||||
molecule template onto simulation atoms it knows about. The
|
||||
comm_modify cutoff command can be used to extend the communication
|
||||
range.
|
||||
|
||||
E: Excessive iteration of superimpose algorithm
|
||||
E: Bond/react: A deleted atom cannot remain bonded to an atom that is not deleted
|
||||
|
||||
You may have discovered a bug! But first, please double check that your
|
||||
molecule template atom types, bond types, etc. are consistent with your simulation,
|
||||
and that all atoms affected by a reaction are sufficently separated from edge atoms.
|
||||
If this issue persists, please contact the developer.
|
||||
Self-explanatory.
|
||||
|
||||
W: Bond/react: An atom in 'react #%d' changes bond connectivity but not atom type
|
||||
|
||||
You may want to double-check that all atom types are properly assigned
|
||||
in the post-reaction template.
|
||||
|
||||
E: Bond/react special bond generation overflow
|
||||
|
||||
The number of special bonds per-atom created by a reaction exceeds the
|
||||
system setting. See the read_data or create_box command for how to
|
||||
specify this value.
|
||||
|
||||
E: Bond/react topology/atom exceed system topology/atom
|
||||
|
||||
The number of bonds, angles etc per-atom created by a reaction exceeds
|
||||
the system setting. See the read_data or create_box command for how to
|
||||
specify this value.
|
||||
|
||||
*/
|
||||
|
||||
@ -33,6 +33,7 @@
|
||||
#include "compute.h"
|
||||
#include "modify.h"
|
||||
#include "pair.h"
|
||||
#include "utils.h"
|
||||
|
||||
#include "plumed/wrapper/Plumed.h"
|
||||
|
||||
@ -250,15 +251,15 @@ FixPlumed::FixPlumed(LAMMPS *lmp, int narg, char **arg) :
|
||||
// Avoid conflict with fixes that define internal pressure computes.
|
||||
// See comment in the setup method
|
||||
|
||||
if ((strncmp(check_style,"nph",3) == 0) ||
|
||||
(strncmp(check_style,"npt",3) == 0) ||
|
||||
(strncmp(check_style,"rigid/nph",9) == 0) ||
|
||||
(strncmp(check_style,"rigid/npt",9) == 0) ||
|
||||
(strncmp(check_style,"msst",4) == 0) ||
|
||||
(strncmp(check_style,"nphug",5) == 0) ||
|
||||
(strncmp(check_style,"ipi",3) == 0) ||
|
||||
(strncmp(check_style,"press/berendsen",15) == 0) ||
|
||||
(strncmp(check_style,"qbmsst",6) == 0))
|
||||
if (utils::strmatch(check_style,"^nph") ||
|
||||
utils::strmatch(check_style,"^npt") ||
|
||||
utils::strmatch(check_style,"^rigid/nph") ||
|
||||
utils::strmatch(check_style,"^rigid/npt") ||
|
||||
utils::strmatch(check_style,"^msst") ||
|
||||
utils::strmatch(check_style,"^nphug") ||
|
||||
utils::strmatch(check_style,"^ipi") ||
|
||||
utils::strmatch(check_style,"^press/berendsen") ||
|
||||
utils::strmatch(check_style,"^qbmsst"))
|
||||
error->all(FLERR,"Fix plumed must be defined before any other fixes, "
|
||||
"that compute pressure internally");
|
||||
}
|
||||
@ -289,7 +290,7 @@ int FixPlumed::setmask()
|
||||
|
||||
void FixPlumed::init()
|
||||
{
|
||||
if (strcmp(update->integrate_style,"respa") == 0)
|
||||
if (utils::strmatch(update->integrate_style,"^respa"))
|
||||
nlevels_respa = ((Respa *) update->integrate)->nlevels;
|
||||
|
||||
// This avoids nan pressure if compute_pressure is called
|
||||
@ -309,12 +310,12 @@ void FixPlumed::setup(int vflag)
|
||||
// has to be executed first. This creates a race condition with the
|
||||
// setup method of fix_nh. This is why in the constructor I check if
|
||||
// nh fixes have already been called.
|
||||
if (strcmp(update->integrate_style,"verlet") == 0)
|
||||
post_force(vflag);
|
||||
else {
|
||||
if (utils::strmatch(update->integrate_style,"^respa")) {
|
||||
((Respa *) update->integrate)->copy_flevel_f(nlevels_respa-1);
|
||||
post_force_respa(vflag,nlevels_respa-1,0);
|
||||
((Respa *) update->integrate)->copy_f_flevel(nlevels_respa-1);
|
||||
} else {
|
||||
post_force(vflag);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -41,6 +41,7 @@
|
||||
#include "group.h"
|
||||
#include "kspace.h"
|
||||
#include "thermo.h"
|
||||
#include "utils.h"
|
||||
|
||||
using namespace LAMMPS_NS;
|
||||
using namespace FixConst;
|
||||
@ -410,14 +411,14 @@ void FixQBMSST::init()
|
||||
// rfix[] = indices to each fix rigid
|
||||
nrigid = 0;
|
||||
for (int i = 0; i < modify->nfix; i++)
|
||||
if (strcmp(modify->fix[i]->style,"rigid") == 0 ||
|
||||
strcmp(modify->fix[i]->style,"poems") == 0) nrigid++;
|
||||
if (nrigid) {
|
||||
if (utils::strmatch(modify->fix[i]->style,"^rigid") ||
|
||||
(strcmp(modify->fix[i]->style,"poems") == 0)) nrigid++;
|
||||
if (nrigid > 0) {
|
||||
rfix = new int[nrigid];
|
||||
nrigid = 0;
|
||||
for (int i = 0; i < modify->nfix; i++)
|
||||
if (strcmp(modify->fix[i]->style,"rigid") == 0 ||
|
||||
strcmp(modify->fix[i]->style,"poems") == 0) rfix[nrigid++] = i;
|
||||
if (utils::strmatch(modify->fix[i]->style,"^rigid") ||
|
||||
(strcmp(modify->fix[i]->style,"poems") == 0)) rfix[nrigid++] = i;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -31,6 +31,7 @@
|
||||
#include "math_const.h"
|
||||
#include "memory.h"
|
||||
#include "error.h"
|
||||
#include "utils.h"
|
||||
|
||||
using namespace LAMMPS_NS;
|
||||
using namespace FixConst;
|
||||
@ -375,8 +376,7 @@ void FixAdapt::init()
|
||||
|
||||
// if pair hybrid, test that ilo,ihi,jlo,jhi are valid for sub-style
|
||||
|
||||
if (strcmp(force->pair_style,"hybrid") == 0 ||
|
||||
strcmp(force->pair_style,"hybrid/overlay") == 0) {
|
||||
if (utils::strmatch(force->pair_style,"^hybrid")) {
|
||||
PairHybrid *pair = (PairHybrid *) force->pair;
|
||||
for (i = ad->ilo; i <= ad->ihi; i++)
|
||||
for (j = MAX(ad->jlo,i); j <= ad->jhi; j++)
|
||||
@ -416,8 +416,7 @@ void FixAdapt::init()
|
||||
|
||||
if (ad->bdim == 1) ad->vector = (double *) ptr;
|
||||
|
||||
if (strcmp(force->bond_style,"hybrid") == 0 ||
|
||||
strcmp(force->bond_style,"hybrid_overlay") == 0)
|
||||
if (utils::strmatch(force->bond_style,"^hybrid"))
|
||||
error->all(FLERR,"Fix adapt does not support bond_style hybrid");
|
||||
|
||||
delete [] bstyle;
|
||||
|
||||
@ -23,6 +23,7 @@
|
||||
#include "modify.h"
|
||||
#include "comm.h"
|
||||
#include "error.h"
|
||||
#include "utils.h"
|
||||
|
||||
using namespace LAMMPS_NS;
|
||||
using namespace FixConst;
|
||||
@ -72,8 +73,8 @@ void FixNVELimit::init()
|
||||
// warn if using fix shake, which will lead to invalid constraint forces
|
||||
|
||||
for (int i = 0; i < modify->nfix; i++)
|
||||
if ((strcmp(modify->fix[i]->style,"shake") == 0)
|
||||
|| (strcmp(modify->fix[i]->style,"rattle") == 0)) {
|
||||
if (utils::strmatch(modify->fix[i]->style,"^shake")
|
||||
|| utils::strmatch(modify->fix[i]->style,"^rattle")) {
|
||||
if (comm->me == 0)
|
||||
error->warning(FLERR,"Should not use fix nve/limit with fix shake or fix rattle");
|
||||
}
|
||||
|
||||
@ -80,7 +80,11 @@ Force::Force(LAMMPS *lmp) : Pointers(lmp)
|
||||
strcpy(kspace_style,str);
|
||||
|
||||
pair_restart = NULL;
|
||||
create_factories();
|
||||
}
|
||||
|
||||
void _noopt Force::create_factories()
|
||||
{
|
||||
// fill pair map with pair styles listed in style_pair.h
|
||||
|
||||
pair_map = new PairCreatorMap();
|
||||
|
||||
@ -143,6 +143,7 @@ class Force : protected Pointers {
|
||||
bigint memory_usage();
|
||||
|
||||
private:
|
||||
void create_factories();
|
||||
template <typename T> static Pair *pair_creator(LAMMPS *);
|
||||
template <typename T> static Bond *bond_creator(LAMMPS *);
|
||||
template <typename T> static Angle *angle_creator(LAMMPS *);
|
||||
|
||||
@ -443,7 +443,11 @@ void KSpace::modify_params(int narg, char **arg)
|
||||
nx_pppm = nx_msm_max = force->inumeric(FLERR,arg[iarg+1]);
|
||||
ny_pppm = ny_msm_max = force->inumeric(FLERR,arg[iarg+2]);
|
||||
nz_pppm = nz_msm_max = force->inumeric(FLERR,arg[iarg+3]);
|
||||
if (nx_pppm == 0 && ny_pppm == 0 && nz_pppm == 0) gridflag = 0;
|
||||
if (nx_pppm == 0 && ny_pppm == 0 && nz_pppm == 0)
|
||||
gridflag = 0;
|
||||
else if (nx_pppm <= 0 || ny_pppm <= 0 || nz_pppm <= 0)
|
||||
error->all(FLERR,"Kspace_modify mesh parameters must be all "
|
||||
"zero or all positive");
|
||||
else gridflag = 1;
|
||||
iarg += 4;
|
||||
} else if (strcmp(arg[iarg],"mesh/disp") == 0) {
|
||||
@ -451,7 +455,11 @@ void KSpace::modify_params(int narg, char **arg)
|
||||
nx_pppm_6 = force->inumeric(FLERR,arg[iarg+1]);
|
||||
ny_pppm_6 = force->inumeric(FLERR,arg[iarg+2]);
|
||||
nz_pppm_6 = force->inumeric(FLERR,arg[iarg+3]);
|
||||
if (nx_pppm_6 == 0 || ny_pppm_6 == 0 || nz_pppm_6 == 0) gridflag_6 = 0;
|
||||
if (nx_pppm_6 == 0 && ny_pppm_6 == 0 && nz_pppm_6 == 0)
|
||||
gridflag_6 = 0;
|
||||
else if (nx_pppm_6 <= 0 || ny_pppm_6 <= 0 || nz_pppm_6 == 0)
|
||||
error->all(FLERR,"Kspace_modify mesh/disp parameters must be all "
|
||||
"zero or all positive");
|
||||
else gridflag_6 = 1;
|
||||
iarg += 4;
|
||||
} else if (strcmp(arg[iarg],"order") == 0) {
|
||||
|
||||
12
src/kspace.h
12
src/kspace.h
@ -251,6 +251,18 @@ E: Bad kspace_modify slab parameter
|
||||
|
||||
Kspace_modify value for the slab/volume keyword must be >= 2.0.
|
||||
|
||||
E: Kspace_modify mesh parameter must be all zero or all positive
|
||||
|
||||
Valid kspace mesh parameters are >0. The code will try to auto-detect
|
||||
suitable values when all three mesh sizes are set to zero (the default).
|
||||
|
||||
E: Kspace_modify mesh/disp parameter must be all zero or all positive
|
||||
|
||||
Valid kspace mesh/disp parameters are >0. The code will try to auto-detect
|
||||
suitable values when all three mesh sizes are set to zero [and]
|
||||
the required accuracy via {force/disp/real} as well as
|
||||
{force/disp/kspace} is set.
|
||||
|
||||
W: Kspace_modify slab param < 2.0 may cause unphysical behavior
|
||||
|
||||
The kspace_modify slab parameter should be larger to insure periodic
|
||||
|
||||
@ -108,7 +108,7 @@ LAMMPS::LAMMPS(int narg, char **arg, MPI_Comm communicator) :
|
||||
initclock = MPI_Wtime();
|
||||
|
||||
init_pkg_lists();
|
||||
|
||||
|
||||
// check if -mpi is first arg
|
||||
// if so, then 2 apps were launched with one mpirun command
|
||||
// this means passed communicator (e.g. MPI_COMM_WORLD) is bigger than LAMMPS
|
||||
@ -896,7 +896,7 @@ void LAMMPS::destroy()
|
||||
initialize lists of styles in packages
|
||||
------------------------------------------------------------------------- */
|
||||
|
||||
void LAMMPS::init_pkg_lists()
|
||||
void _noopt LAMMPS::init_pkg_lists()
|
||||
{
|
||||
pkg_lists = new package_styles_lists;
|
||||
#define PACKAGE "UNKNOWN"
|
||||
@ -996,7 +996,7 @@ void LAMMPS::init_pkg_lists()
|
||||
#include "packages_region.h"
|
||||
#undef RegionStyle
|
||||
#undef REGION_CLASS
|
||||
}
|
||||
}
|
||||
|
||||
bool LAMMPS::is_installed_pkg(const char *pkg)
|
||||
{
|
||||
@ -1039,7 +1039,7 @@ const char *LAMMPS::match_style(const char *style, const char *name)
|
||||
help message for command line options and styles present in executable
|
||||
------------------------------------------------------------------------- */
|
||||
|
||||
void LAMMPS::help()
|
||||
void _noopt LAMMPS::help()
|
||||
{
|
||||
FILE *fp = screen;
|
||||
const char *pager = NULL;
|
||||
|
||||
@ -179,6 +179,9 @@ typedef int bigint;
|
||||
#ifdef _noalias
|
||||
#undef _noalias
|
||||
#endif
|
||||
#ifdef _noopt
|
||||
#undef _noopt
|
||||
#endif
|
||||
|
||||
// define stack variable alignment
|
||||
|
||||
@ -200,6 +203,23 @@ typedef int bigint;
|
||||
#define _noalias
|
||||
#endif
|
||||
|
||||
// declaration to turn off optimization for specific functions
|
||||
// and avoid compiler warnings about variable tracking
|
||||
|
||||
#if defined(__clang__)
|
||||
# define _noopt __attribute__((optnone))
|
||||
#elif defined(__INTEL_COMPILER)
|
||||
# define _noopt
|
||||
#elif defined(__GNUC__)
|
||||
# if (__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4))
|
||||
# define _noopt __attribute__((optimize("O0","no-var-tracking-assignments")))
|
||||
# else
|
||||
# define _noopt __attribute__((optimize("O0")))
|
||||
# endif
|
||||
#else
|
||||
# define _noopt
|
||||
#endif
|
||||
|
||||
// settings to enable LAMMPS to build under Windows
|
||||
|
||||
#ifdef _WIN32
|
||||
|
||||
@ -81,6 +81,11 @@ Modify::Modify(LAMMPS *lmp) : Pointers(lmp)
|
||||
ncompute = maxcompute = 0;
|
||||
compute = NULL;
|
||||
|
||||
create_factories();
|
||||
}
|
||||
|
||||
void _noopt Modify::create_factories()
|
||||
{
|
||||
// fill map with fixes listed in style_fix.h
|
||||
|
||||
fix_map = new FixCreatorMap();
|
||||
|
||||
@ -172,6 +172,7 @@ class Modify : protected Pointers {
|
||||
FixCreatorMap *fix_map;
|
||||
|
||||
protected:
|
||||
void create_factories();
|
||||
template <typename T> static Compute *compute_creator(LAMMPS *, int, char **);
|
||||
template <typename T> static Fix *fix_creator(LAMMPS *, int, char **);
|
||||
};
|
||||
|
||||
@ -46,6 +46,7 @@
|
||||
#include "citeme.h"
|
||||
#include "memory.h"
|
||||
#include "error.h"
|
||||
#include "utils.h"
|
||||
|
||||
#include <map>
|
||||
|
||||
@ -1282,8 +1283,8 @@ void Neighbor::init_topology()
|
||||
int bond_off = 0;
|
||||
int angle_off = 0;
|
||||
for (i = 0; i < modify->nfix; i++)
|
||||
if ((strcmp(modify->fix[i]->style,"shake") == 0)
|
||||
|| (strcmp(modify->fix[i]->style,"rattle") == 0))
|
||||
if (utils::strmatch(modify->fix[i]->style,"^shake")
|
||||
|| utils::strmatch(modify->fix[i]->style,"^rattle"))
|
||||
bond_off = angle_off = 1;
|
||||
if (force->bond && force->bond_match("quartic")) bond_off = 1;
|
||||
|
||||
|
||||
@ -219,12 +219,6 @@ void PairCoulStreitz::init_style()
|
||||
error->all(FLERR,"Pair style requires a KSpace style");
|
||||
g_ewald = force->kspace->g_ewald;
|
||||
}
|
||||
|
||||
// ptr to QEQ fix
|
||||
//for (i = 0; i < modify->nfix; i++)
|
||||
// if (strcmp(modify->fix[i]->style,"qeq") == 0) break;
|
||||
//if (i < modify->nfix) fixqeq = (FixQEQ *) modify->fix[i];
|
||||
//else fixqeq = NULL;
|
||||
}
|
||||
|
||||
/* ----------------------------------------------------------------------
|
||||
|
||||
@ -112,7 +112,7 @@ void Velocity::command(int narg, char **arg)
|
||||
|
||||
int initcomm = 0;
|
||||
if (style == ZERO && rfix >= 0 &&
|
||||
strcmp(modify->fix[rfix]->style,"rigid/small") == 0) initcomm = 1;
|
||||
utils::strmatch(modify->fix[rfix]->style,"^rigid/small")) initcomm = 1;
|
||||
if ((style == CREATE || style == SET) && temperature &&
|
||||
strcmp(temperature->style,"temp/cs") == 0) initcomm = 1;
|
||||
|
||||
|
||||
@ -1 +1 @@
|
||||
#define LAMMPS_VERSION "31 May 2019"
|
||||
#define LAMMPS_VERSION "5 Jun 2019"
|
||||
|
||||
Reference in New Issue
Block a user