new Section package and start doc pages and build scripts
This commit is contained in:
@ -158,12 +158,11 @@ END_RST -->
|
|||||||
2.1 "What's in the LAMMPS distribution"_start_1 :ulb,b
|
2.1 "What's in the LAMMPS distribution"_start_1 :ulb,b
|
||||||
2.2 "Making LAMMPS"_start_2 :b
|
2.2 "Making LAMMPS"_start_2 :b
|
||||||
2.3 "Making LAMMPS with optional packages"_start_3 :b
|
2.3 "Making LAMMPS with optional packages"_start_3 :b
|
||||||
2.4 "Building LAMMPS via the Make.py script"_start_4 :b
|
2.4 "Building LAMMPS as a library"_start_4 :b
|
||||||
2.5 "Building LAMMPS as a library"_start_5 :b
|
2.5 "Running LAMMPS"_start_5 :b
|
||||||
2.6 "Running LAMMPS"_start_6 :b
|
2.6 "Command-line options"_start_6 :b
|
||||||
2.7 "Command-line options"_start_7 :b
|
2.7 "Screen output"_start_7 :b
|
||||||
2.8 "Screen output"_start_8 :b
|
2.8 "Tips for users of previous versions"_start_8 :ule,b
|
||||||
2.9 "Tips for users of previous versions"_start_9 :ule,b
|
|
||||||
"Commands"_Section_commands.html :l
|
"Commands"_Section_commands.html :l
|
||||||
3.1 "LAMMPS input script"_cmd_1 :ulb,b
|
3.1 "LAMMPS input script"_cmd_1 :ulb,b
|
||||||
3.2 "Parsing rules"_cmd_2 :b
|
3.2 "Parsing rules"_cmd_2 :b
|
||||||
|
|||||||
@ -1052,7 +1052,7 @@ package"_Section_start.html#start_3.
|
|||||||
"oxdna2/excv"_pair_oxdna2.html,
|
"oxdna2/excv"_pair_oxdna2.html,
|
||||||
"oxdna2/stk"_pair_oxdna2.html,
|
"oxdna2/stk"_pair_oxdna2.html,
|
||||||
"quip"_pair_quip.html,
|
"quip"_pair_quip.html,
|
||||||
"reax/c (k)"_pair_reax_c.html,
|
"reax/c (k)"_pair_reaxc.html,
|
||||||
"smd/hertz"_pair_smd_hertz.html,
|
"smd/hertz"_pair_smd_hertz.html,
|
||||||
"smd/tlsph"_pair_smd_tlsph.html,
|
"smd/tlsph"_pair_smd_tlsph.html,
|
||||||
"smd/triangulated/surface"_pair_smd_triangulated_surface.html,
|
"smd/triangulated/surface"_pair_smd_triangulated_surface.html,
|
||||||
|
|||||||
@ -249,8 +249,12 @@ Pizza.py WWW site"_pizza. :l
|
|||||||
|
|
||||||
Specialized features :h5
|
Specialized features :h5
|
||||||
|
|
||||||
These are LAMMPS capabilities which you may not think of as typical
|
LAMMPS can be built with optional packages which implement a variety
|
||||||
molecular dynamics options:
|
of additional capabilities. An overview of all the packages is "given
|
||||||
|
here"_Section_packages.html.
|
||||||
|
|
||||||
|
These are some LAMMPS capabilities which you may not think of as
|
||||||
|
typical classical molecular dynamics options:
|
||||||
|
|
||||||
"static"_balance.html and "dynamic load-balancing"_fix_balance.html
|
"static"_balance.html and "dynamic load-balancing"_fix_balance.html
|
||||||
"generalized aspherical particles"_body.html
|
"generalized aspherical particles"_body.html
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@ -14,12 +14,11 @@ experienced users.
|
|||||||
2.1 "What's in the LAMMPS distribution"_#start_1
|
2.1 "What's in the LAMMPS distribution"_#start_1
|
||||||
2.2 "Making LAMMPS"_#start_2
|
2.2 "Making LAMMPS"_#start_2
|
||||||
2.3 "Making LAMMPS with optional packages"_#start_3
|
2.3 "Making LAMMPS with optional packages"_#start_3
|
||||||
2.4 "Building LAMMPS via the Make.py script"_#start_4
|
2.5 "Building LAMMPS as a library"_#start_4
|
||||||
2.5 "Building LAMMPS as a library"_#start_5
|
2.6 "Running LAMMPS"_#start_5
|
||||||
2.6 "Running LAMMPS"_#start_6
|
2.7 "Command-line options"_#start_6
|
||||||
2.7 "Command-line options"_#start_7
|
2.8 "Screen output"_#start_7
|
||||||
2.8 "Screen output"_#start_8
|
2.9 "Tips for users of previous versions"_#start_8 :all(b)
|
||||||
2.9 "Tips for users of previous versions"_#start_9 :all(b)
|
|
||||||
|
|
||||||
:line
|
:line
|
||||||
|
|
||||||
@ -80,7 +79,7 @@ This section has the following sub-sections:
|
|||||||
|
|
||||||
Read this first :h5,link(start_2_1)
|
Read this first :h5,link(start_2_1)
|
||||||
|
|
||||||
If you want to avoid building LAMMPS yourself, read the preceding
|
If you want to avoid building LAMMPS yourself, read the preceeding
|
||||||
section about options available for downloading and installing
|
section about options available for downloading and installing
|
||||||
executables. Details are discussed on the "download"_download page.
|
executables. Details are discussed on the "download"_download page.
|
||||||
|
|
||||||
@ -96,7 +95,7 @@ make serial :pre
|
|||||||
Note that on a facility supercomputer, there are often "modules"
|
Note that on a facility supercomputer, there are often "modules"
|
||||||
loaded in your environment that provide the compilers and MPI you
|
loaded in your environment that provide the compilers and MPI you
|
||||||
should use. In this case, the "mpicxx" compile/link command in
|
should use. In this case, the "mpicxx" compile/link command in
|
||||||
Makefile.mpi should just work by accessing those modules.
|
Makefile.mpi should simply work by accessing those modules.
|
||||||
|
|
||||||
It may be the case that one of the other Makefile.machine files in the
|
It may be the case that one of the other Makefile.machine files in the
|
||||||
src/MAKE sub-directories is a better match to your system (type "make"
|
src/MAKE sub-directories is a better match to your system (type "make"
|
||||||
@ -107,33 +106,35 @@ make stampede :pre
|
|||||||
If any of these builds (with an existing Makefile.machine) works on
|
If any of these builds (with an existing Makefile.machine) works on
|
||||||
your system, then you're done!
|
your system, then you're done!
|
||||||
|
|
||||||
|
If you need to install an optional package with a LAMMPS command you
|
||||||
|
want to use, and the package does not depend on an extra library, you
|
||||||
|
can simply type
|
||||||
|
|
||||||
|
make name :pre
|
||||||
|
|
||||||
|
before invoking (or re-invoking) the above steps. "Name" is the
|
||||||
|
lower-case name of the package, e.g. replica or user-misc.
|
||||||
|
|
||||||
If you want to do one of the following:
|
If you want to do one of the following:
|
||||||
|
|
||||||
use optional LAMMPS features that require additional libraries
|
use a LAMMPS command that requires an extra library (e.g. "dump image"_dump_image.html)
|
||||||
use optional packages that require additional libraries
|
build with a package that requires an extra library
|
||||||
use optional accelerator packages that require special compiler/linker settings
|
build with an accelerator package that requires special compiler/linker settings
|
||||||
run on a specialized platform that has its own compilers, settings, or other libs to use :ul
|
run on a machine that has its own compilers, settings, or libraries :ul
|
||||||
|
|
||||||
then building LAMMPS is more complicated. You may need to find where
|
then building LAMMPS is more complicated. You may need to find where
|
||||||
auxiliary libraries exist on your machine or install them if they
|
extra libraries exist on your machine or install them if they don't.
|
||||||
don't. You may need to build additional libraries that are part of
|
You may need to build extra libraries that are included in the LAMMPS
|
||||||
the LAMMPS package, before building LAMMPS. You may need to edit a
|
distribution, before building LAMMPS itself. You may need to edit a
|
||||||
Makefile.machine file to make it compatible with your system.
|
Makefile.machine file to make it compatible with your system.
|
||||||
|
|
||||||
Note that there is a Make.py tool in the src directory that automates
|
|
||||||
several of these steps, but you still have to know what you are doing.
|
|
||||||
"Section 2.4"_#start_4 below describes the tool. It is a convenient
|
|
||||||
way to work with installing/un-installing various packages, the
|
|
||||||
Makefile.machine changes required by some packages, and the auxiliary
|
|
||||||
libraries some of them use.
|
|
||||||
|
|
||||||
Please read the following sections carefully. If you are not
|
Please read the following sections carefully. If you are not
|
||||||
comfortable with makefiles, or building codes on a Unix platform, or
|
comfortable with makefiles, or building codes on a Unix platform, or
|
||||||
running an MPI job on your machine, please find a local expert to help
|
running an MPI job on your machine, please find a local expert to help
|
||||||
you. Many compilation, linking, and run problems that users have are
|
you. Many compilation, linking, and run problems users experience are
|
||||||
often not really LAMMPS issues - they are peculiar to the user's
|
often not LAMMPS issues - they are peculiar to the user's system,
|
||||||
system, compilers, libraries, etc. Such questions are better answered
|
compilers, libraries, etc. Such questions are better answered by a
|
||||||
by a local expert.
|
local expert.
|
||||||
|
|
||||||
If you have a build problem that you are convinced is a LAMMPS issue
|
If you have a build problem that you are convinced is a LAMMPS issue
|
||||||
(e.g. the compiler complains about a line of LAMMPS source code), then
|
(e.g. the compiler complains about a line of LAMMPS source code), then
|
||||||
@ -251,7 +252,7 @@ re-compile, after typing "make clean" (which will describe different
|
|||||||
clean options).
|
clean options).
|
||||||
|
|
||||||
The LMP_INC variable is used to include options that turn on ifdefs
|
The LMP_INC variable is used to include options that turn on ifdefs
|
||||||
within the LAMMPS code. The options that are currently recognized are:
|
within the LAMMPS code. The options that are currently recogized are:
|
||||||
|
|
||||||
-DLAMMPS_GZIP
|
-DLAMMPS_GZIP
|
||||||
-DLAMMPS_JPEG
|
-DLAMMPS_JPEG
|
||||||
@ -362,7 +363,7 @@ installed on your platform. If MPI is installed on your system in the
|
|||||||
usual place (under /usr/local), you also may not need to specify these
|
usual place (under /usr/local), you also may not need to specify these
|
||||||
3 variables, assuming /usr/local is in your path. On some large
|
3 variables, assuming /usr/local is in your path. On some large
|
||||||
parallel machines which use "modules" for their compile/link
|
parallel machines which use "modules" for their compile/link
|
||||||
environments, you may simply need to include the correct module in
|
environements, you may simply need to include the correct module in
|
||||||
your build environment, before building LAMMPS. Or the parallel
|
your build environment, before building LAMMPS. Or the parallel
|
||||||
machine may have a vendor-provided MPI which the compiler has no
|
machine may have a vendor-provided MPI which the compiler has no
|
||||||
trouble finding.
|
trouble finding.
|
||||||
@ -430,7 +431,7 @@ use the KISS library described above.
|
|||||||
You may also need to set the FFT_INC, FFT_PATH, and FFT_LIB variables,
|
You may also need to set the FFT_INC, FFT_PATH, and FFT_LIB variables,
|
||||||
so the compiler and linker can find the needed FFT header and library
|
so the compiler and linker can find the needed FFT header and library
|
||||||
files. Note that on some large parallel machines which use "modules"
|
files. Note that on some large parallel machines which use "modules"
|
||||||
for their compile/link environments, you may simply need to include
|
for their compile/link environements, you may simply need to include
|
||||||
the correct module in your build environment. Or the parallel machine
|
the correct module in your build environment. Or the parallel machine
|
||||||
may have a vendor-provided FFT library which the compiler has no
|
may have a vendor-provided FFT library which the compiler has no
|
||||||
trouble finding.
|
trouble finding.
|
||||||
@ -450,12 +451,13 @@ you must also manually specify the correct library, namely -lsfftw or
|
|||||||
|
|
||||||
The FFT_INC variable also allows for a -DFFT_SINGLE setting that will
|
The FFT_INC variable also allows for a -DFFT_SINGLE setting that will
|
||||||
use single-precision FFTs with PPPM, which can speed-up long-range
|
use single-precision FFTs with PPPM, which can speed-up long-range
|
||||||
calculations, particularly in parallel or on GPUs. Fourier transform
|
calulations, particularly in parallel or on GPUs. Fourier transform
|
||||||
and related PPPM operations are somewhat insensitive to floating point
|
and related PPPM operations are somewhat insensitive to floating point
|
||||||
truncation errors and thus do not always need to be performed in
|
truncation errors and thus do not always need to be performed in
|
||||||
double precision. Using the -DFFT_SINGLE setting trades off a little
|
double precision. Using the -DFFT_SINGLE setting trades off a little
|
||||||
accuracy for reduced memory use and parallel communication costs for
|
accuracy for reduced memory use and parallel communication costs for
|
||||||
transposing 3d FFT data.
|
transposing 3d FFT data. Note that single precision FFTs have only
|
||||||
|
been tested with the FFTW3, FFTW2, MKL, and KISS FFT options.
|
||||||
|
|
||||||
Step 7 :h6
|
Step 7 :h6
|
||||||
|
|
||||||
@ -507,13 +509,13 @@ You should get the executable lmp_foo when the build is complete.
|
|||||||
|
|
||||||
Errors that can occur when making LAMMPS: h5 :link(start_2_3)
|
Errors that can occur when making LAMMPS: h5 :link(start_2_3)
|
||||||
|
|
||||||
NOTE: If an error occurs when building LAMMPS, the compiler or linker
|
If an error occurs when building LAMMPS, the compiler or linker will
|
||||||
will state very explicitly what the problem is. The error message
|
state very explicitly what the problem is. The error message should
|
||||||
should give you a hint as to which of the steps above has failed, and
|
give you a hint as to which of the steps above has failed, and what
|
||||||
what you need to do in order to fix it. Building a code with a
|
you need to do in order to fix it. Building a code with a Makefile is
|
||||||
Makefile is a very logical process. The compiler and linker need to
|
a very logical process. The compiler and linker need to find the
|
||||||
find the appropriate files and those files need to be compatible with
|
appropriate files and those files need to be compatible with LAMMPS
|
||||||
LAMMPS source files. When a make fails, there is usually a very
|
settings and source files. When a make fails, there is usually a very
|
||||||
simple reason, which you or a local expert will need to fix.
|
simple reason, which you or a local expert will need to fix.
|
||||||
|
|
||||||
Here are two non-obvious errors that can occur:
|
Here are two non-obvious errors that can occur:
|
||||||
@ -556,7 +558,8 @@ Typing "make clean-all" or "make clean-machine" will delete *.o object
|
|||||||
files created when LAMMPS is built, for either all builds or for a
|
files created when LAMMPS is built, for either all builds or for a
|
||||||
particular machine.
|
particular machine.
|
||||||
|
|
||||||
Changing the LAMMPS size limits via -DLAMMPS_SMALLBIG or -DLAMMPS_BIGBIG or -DLAMMPS_SMALLSMALL :h6
|
Changing the LAMMPS size limits via -DLAMMPS_SMALLBIG or
|
||||||
|
-DLAMMPS_BIGBIG or -DLAMMPS_SMALLSMALL :h6
|
||||||
|
|
||||||
As explained above, any of these 3 settings can be specified on the
|
As explained above, any of these 3 settings can be specified on the
|
||||||
LMP_INC line in your low-level src/MAKE/Makefile.foo.
|
LMP_INC line in your low-level src/MAKE/Makefile.foo.
|
||||||
@ -655,11 +658,6 @@ This section has the following sub-sections:
|
|||||||
2.3.3 "Packages that require extra libraries"_#start_3_3
|
2.3.3 "Packages that require extra libraries"_#start_3_3
|
||||||
2.3.4 "Packages that require Makefile.machine settings"_#start_3_4 :all(b)
|
2.3.4 "Packages that require Makefile.machine settings"_#start_3_4 :all(b)
|
||||||
|
|
||||||
Note that the following "Section 2.4"_#start_4 describes the Make.py
|
|
||||||
tool which can be used to install/un-install packages and build the
|
|
||||||
auxiliary libraries which some of them use. It can also auto-edit a
|
|
||||||
Makefile.machine to add settings needed by some packages.
|
|
||||||
|
|
||||||
:line
|
:line
|
||||||
|
|
||||||
Package basics: :h5,link(start_3_1)
|
Package basics: :h5,link(start_3_1)
|
||||||
@ -669,235 +667,221 @@ are always included, plus optional packages. Packages are groups of
|
|||||||
files that enable a specific set of features. For example, force
|
files that enable a specific set of features. For example, force
|
||||||
fields for molecular systems or granular systems are in packages.
|
fields for molecular systems or granular systems are in packages.
|
||||||
|
|
||||||
"Section 4"_Section_packages.html in the manual has details
|
"Section 4"_Section_packages.html in the manual has details about all
|
||||||
about all the packages, including specific instructions for building
|
the packages, which come in two flavors: [standard] and [user]
|
||||||
LAMMPS with each package, which are covered in a more general manner
|
packages. It also has specific instructions for building LAMMPS with
|
||||||
|
any package which requires an extra library. General instructions are
|
||||||
below.
|
below.
|
||||||
|
|
||||||
You can see the list of all packages by typing "make package" from
|
You can see the list of all packages by typing "make package" from
|
||||||
within the src directory of the LAMMPS distribution. This also lists
|
within the src directory of the LAMMPS distribution. It will also
|
||||||
various make commands that can be used to manipulate packages.
|
list various make commands that can be used to manage packages.
|
||||||
|
|
||||||
If you use a command in a LAMMPS input script that is part of a
|
If you use a command in a LAMMPS input script that is part of a
|
||||||
package, you must have built LAMMPS with that package, else you will
|
package, you must have built LAMMPS with that package, else you will
|
||||||
get an error that the style is invalid or the command is unknown.
|
get an error that the style is invalid or the command is unknown.
|
||||||
Every command's doc page specifies if it is part of a package. You can
|
Every command's doc page specfies if it is part of a package. You can
|
||||||
also type
|
type
|
||||||
|
|
||||||
lmp_machine -h :pre
|
lmp_machine -h :pre
|
||||||
|
|
||||||
to run your executable with the optional "-h command-line
|
to run your executable with the optional "-h command-line
|
||||||
switch"_#start_7 for "help", which will simply list the styles and
|
switch"_#start_7 for "help", which will list the styles and commands
|
||||||
commands known to your executable, and immediately exit.
|
known to your executable, and immediately exit.
|
||||||
|
|
||||||
There are two kinds of packages in LAMMPS, standard and user packages.
|
|
||||||
More information about the contents of standard and user packages is
|
|
||||||
given in "Section 4"_Section_packages.html of the manual. The
|
|
||||||
difference between standard and user packages is as follows:
|
|
||||||
|
|
||||||
Standard packages, such as molecule or kspace, are supported by the
|
|
||||||
LAMMPS developers and are written in a syntax and style consistent
|
|
||||||
with the rest of LAMMPS. This means we will answer questions about
|
|
||||||
them, debug and fix them if necessary, and keep them compatible with
|
|
||||||
future changes to LAMMPS.
|
|
||||||
|
|
||||||
User packages, such as user-atc or user-omp, have been contributed by
|
|
||||||
users, and always begin with the user prefix. If they are a single
|
|
||||||
command (single file), they are typically in the user-misc package.
|
|
||||||
Otherwise, they are a set of files grouped together which add a
|
|
||||||
specific functionality to the code.
|
|
||||||
|
|
||||||
User packages don't necessarily meet the requirements of the standard
|
|
||||||
packages. If you have problems using a feature provided in a user
|
|
||||||
package, you may need to contact the contributor directly to get help.
|
|
||||||
Information on how to submit additions you make to LAMMPS as single
|
|
||||||
files or either a standard or user-contributed package are given in
|
|
||||||
"this section"_Section_modify.html#mod_15 of the documentation.
|
|
||||||
|
|
||||||
:line
|
:line
|
||||||
|
|
||||||
Including/excluding packages :h5,link(start_3_2)
|
Including/excluding packages :h5,link(start_3_2)
|
||||||
|
|
||||||
To use (or not use) a package you must include it (or exclude it)
|
To use (or not use) a package you must install it (or un-install it)
|
||||||
before building LAMMPS. From the src directory, this is typically as
|
before building LAMMPS. From the src directory, this is as simple as:
|
||||||
simple as:
|
|
||||||
|
|
||||||
make yes-colloid
|
make yes-colloid
|
||||||
make mpi :pre
|
make mpi :pre
|
||||||
|
|
||||||
or
|
or
|
||||||
|
|
||||||
make no-manybody
|
make no-user-omp
|
||||||
make mpi :pre
|
make mpi :pre
|
||||||
|
|
||||||
NOTE: You should NOT include/exclude packages and build LAMMPS in a
|
NOTE: You should NOT install/un-install packages and build LAMMPS in a
|
||||||
single make command using multiple targets, e.g. make yes-colloid mpi.
|
single make command using multiple targets, e.g. make yes-colloid mpi.
|
||||||
This is because the make procedure creates a list of source files that
|
This is because the make procedure creates a list of source files that
|
||||||
will be out-of-date for the build if the package configuration changes
|
will be out-of-date for the build if the package configuration changes
|
||||||
within the same command.
|
within the same command.
|
||||||
|
|
||||||
Some packages have individual files that depend on other packages
|
Any package can be installed or not in a LAMMPS build, independent of
|
||||||
being included. LAMMPS checks for this and does the right thing.
|
all other packages. However, some packages include files derived from
|
||||||
I.e. individual files are only included if their dependencies are
|
files in other packages. LAMMPS checks for this and does the right
|
||||||
already included. Likewise, if a package is excluded, other files
|
thing. I.e. individual files are only included if their dependencies
|
||||||
|
are already included. Likewise, if a package is excluded, other files
|
||||||
dependent on that package are also excluded.
|
dependent on that package are also excluded.
|
||||||
|
|
||||||
|
NOTE: The one exception is that we do not recommend building with both
|
||||||
|
the KOKKOS package installed and any of the other acceleration
|
||||||
|
packages (GPU, OPT, USER-INTEL, USER-OMP) also installed. This is
|
||||||
|
because of how Kokkos sometimes builds using a wrapper compiler which
|
||||||
|
can make it difficult to invoke all the compile/link flags correctly
|
||||||
|
for both Kokkos and non-Kokkos files.
|
||||||
|
|
||||||
If you will never run simulations that use the features in a
|
If you will never run simulations that use the features in a
|
||||||
particular packages, there is no reason to include it in your build.
|
particular packages, there is no reason to include it in your build.
|
||||||
For some packages, this will keep you from having to build auxiliary
|
For some packages, this will keep you from having to build extra
|
||||||
libraries (see below), and will also produce a smaller executable
|
libraries, and will also produce a smaller executable which may run a
|
||||||
which may run a bit faster.
|
bit faster.
|
||||||
|
|
||||||
When you download a LAMMPS tarball, these packages are pre-installed
|
When you download a LAMMPS tarball, three packages are pre-installed
|
||||||
in the src directory: KSPACE, MANYBODY,MOLECULE, because they are so
|
in the src directory -- KSPACE, MANYBODY, MOLECULE -- because they are
|
||||||
commonly used. When you download LAMMPS source files from the SVN or
|
so commonly used. When you download LAMMPS source files from the SVN
|
||||||
Git repositories, no packages are pre-installed.
|
or Git repositories, no packages are pre-installed.
|
||||||
|
|
||||||
Packages are included or excluded by typing "make yes-name" or "make
|
Packages are installed or un-installed by typing
|
||||||
no-name", where "name" is the name of the package in lower-case, e.g.
|
|
||||||
name = kspace for the KSPACE package or name = user-atc for the
|
|
||||||
USER-ATC package. You can also type "make yes-standard", "make
|
|
||||||
no-standard", "make yes-std", "make no-std", "make yes-user", "make
|
|
||||||
no-user", "make yes-lib", "make no-lib", "make yes-all", or "make
|
|
||||||
no-all" to include/exclude various sets of packages. Type "make
|
|
||||||
package" to see all of the package-related make options.
|
|
||||||
|
|
||||||
NOTE: Inclusion/exclusion of a package works by simply moving files
|
make yes-name
|
||||||
back and forth between the main src directory and sub-directories with
|
make no-name :pre
|
||||||
the package name (e.g. src/KSPACE, src/USER-ATC), so that the files
|
|
||||||
are seen or not seen when LAMMPS is built. After you have included or
|
|
||||||
excluded a package, you must re-build LAMMPS.
|
|
||||||
|
|
||||||
Additional package-related make options exist to help manage LAMMPS
|
where "name" is the name of the package in lower-case, e.g. name =
|
||||||
files that exist in both the src directory and in package
|
kspace for the KSPACE package or name = user-atc for the USER-ATC
|
||||||
sub-directories. You do not normally need to use these commands
|
package. You can also type any of these commands:
|
||||||
unless you are editing LAMMPS files or have downloaded a patch from
|
|
||||||
the LAMMPS WWW site.
|
|
||||||
|
|
||||||
Typing "make package-update" or "make pu" will overwrite src files
|
make yes-all | install all packages
|
||||||
with files from the package sub-directories if the package has been
|
make no-all | un-install all packages
|
||||||
included. It should be used after a patch is installed, since patches
|
make yes-standard or make yes-std | install standard packages
|
||||||
only update the files in the package sub-directory, but not the src
|
make no-standard or make no-std| un-install standard packages
|
||||||
files. Typing "make package-overwrite" will overwrite files in the
|
make yes-user | install user packages
|
||||||
package sub-directories with src files.
|
make no-user | un-install user packages
|
||||||
|
make yes-lib | install packages that require extra libraries
|
||||||
|
make no-lib | un-install packages that require extra libraries
|
||||||
|
make yes-ext | install packages that require external libraries
|
||||||
|
make no-ext | un-install packages that require external libraries :tb(s=|)
|
||||||
|
|
||||||
|
which install/un-install various sets of packages. Typing "make
|
||||||
|
package" will list all the these commands.
|
||||||
|
|
||||||
|
NOTE: Installing or un-installing a package works by simply moving
|
||||||
|
files back and forth between the main src directory and
|
||||||
|
sub-directories with the package name (e.g. src/KSPACE, src/USER-ATC),
|
||||||
|
so that the files are included or excluded when LAMMPS is built.
|
||||||
|
After you have installed or un-installed a package, you must re-build
|
||||||
|
LAMMPS for the action to take effect.
|
||||||
|
|
||||||
|
The following make commands help manage files that exist in both the
|
||||||
|
src directory and in package sub-directories. You do not normally
|
||||||
|
need to use these commands unless you are editing LAMMPS files or have
|
||||||
|
downloaded a patch from the LAMMPS web site.
|
||||||
|
|
||||||
Typing "make package-status" or "make ps" will show which packages are
|
Typing "make package-status" or "make ps" will show which packages are
|
||||||
currently included. For those that are included, it will list any
|
currently installed. For those that are installed, it will list any
|
||||||
files that are different in the src directory and package
|
files that are different in the src directory and package
|
||||||
sub-directory. Typing "make package-diff" lists all differences
|
sub-directory.
|
||||||
between these files. Again, type "make package" to see all of the
|
|
||||||
package-related make options.
|
Typing "make package-update" or "make pu" will overwrite src files
|
||||||
|
with files from the package sub-directories if the package is
|
||||||
|
installed. It should be used after a patch has been applied, since
|
||||||
|
patches only update the files in the package sub-directory, but not
|
||||||
|
the src files.
|
||||||
|
|
||||||
|
Typing "make package-overwrite" will overwrite files in the package
|
||||||
|
sub-directories with src files.
|
||||||
|
|
||||||
|
Typing "make package-diff" lists all differences between these files.
|
||||||
|
|
||||||
|
Again, just type "make package" to see all of the package-related make
|
||||||
|
options.
|
||||||
|
|
||||||
:line
|
:line
|
||||||
|
|
||||||
Packages that require extra libraries :h5,link(start_3_3)
|
Packages that require extra libraries :h5,link(start_3_3)
|
||||||
|
|
||||||
A few of the standard and user packages require additional auxiliary
|
A few of the standard and user packages require extra libraries. See
|
||||||
libraries. Many of them are provided with LAMMPS, in which case they
|
"Section 4"_Section_packages.html for two tables of packages which
|
||||||
must be compiled first, before LAMMPS is built, if you wish to include
|
indicate which ones require libraries. For each such package, the
|
||||||
that package. If you get a LAMMPS build error about a missing
|
Section 4 doc page gives details on how to build the extra library,
|
||||||
library, this is likely the reason. See the
|
including how to download it if necessary. The basic ideas are
|
||||||
"Section 4"_Section_packages.html doc page for a list of
|
summarized here.
|
||||||
packages that have these kinds of auxiliary libraries.
|
|
||||||
|
|
||||||
The lib directory in the distribution has sub-directories with package
|
[System libraries:]
|
||||||
names that correspond to the needed auxiliary libs, e.g. lib/gpu.
|
|
||||||
Each sub-directory has a README file that gives more details. Code
|
|
||||||
for most of the auxiliary libraries is included in that directory.
|
|
||||||
Examples are the USER-ATC and MEAM packages.
|
|
||||||
|
|
||||||
A few of the lib sub-directories do not include code, but do include
|
Packages in the tables "Section 4"_Section_packages.html with a "sys"
|
||||||
instructions (and sometimes scripts) that automate the process of
|
in the last column link to system libraries that typically already
|
||||||
downloading the auxiliary library and installing it so LAMMPS can link
|
exist on your machine. E.g. the python package links to a system
|
||||||
to it. Examples are the KIM, VORONOI, USER-MOLFILE, and USER-SMD
|
Python library. If your machine does not have the required library,
|
||||||
packages.
|
you will have to download and install it on your machine, in either
|
||||||
|
the system or user space.
|
||||||
|
|
||||||
The lib/python directory (for the PYTHON package) contains only a
|
[Internal libraries:]
|
||||||
choice of Makefile.lammps.* files. This is because no auxiliary code
|
|
||||||
or libraries are needed, only the Python library and other system libs
|
|
||||||
that should already available on your system. However, the
|
|
||||||
Makefile.lammps file is needed to tell LAMMPS which libs to use and
|
|
||||||
where to find them.
|
|
||||||
|
|
||||||
For libraries with provided code, the sub-directory README file
|
Packages in the tables "Section 4"_Section_packages.html with an "int"
|
||||||
(e.g. lib/atc/README) has instructions on how to build that library.
|
in the last column link to internal libraries whose source code is
|
||||||
This information is also summarized in "Section
|
included with LAMMPS, in the lib/name directory where name is the
|
||||||
4"_Section_packages.html. Typically this is done by typing
|
package name. You must first build the library in that directory
|
||||||
something like:
|
before building LAMMPS with that package installed. E.g. the gpu
|
||||||
|
package links to a library you build in the lib/gpu dir. You can
|
||||||
|
often do the build in one step by typing "make lib-name args=..."
|
||||||
|
from the src dir, with appropriate arguments. You can leave off the
|
||||||
|
args to see a help message. See "Section 4"_Section_packages.html for
|
||||||
|
details for each package.
|
||||||
|
|
||||||
make -f Makefile.g++ :pre
|
[External libraries:]
|
||||||
|
|
||||||
If one of the provided Makefiles is not appropriate for your system
|
Packages in the tables "Section 4"_Section_packages.html with an "ext"
|
||||||
you will need to edit or add one. Note that all the Makefiles have a
|
in the last column link to exernal libraries whose source code is not
|
||||||
setting for EXTRAMAKE at the top that specifies a Makefile.lammps.*
|
included with LAMMPS. You must first download and install the library
|
||||||
file.
|
before building LAMMPS with that package installed. E.g. the voronoi
|
||||||
|
package links to the freely available "Voro++ library"_voronoi. You
|
||||||
|
can often do the download/build in one step by typing "make lib-name
|
||||||
|
args=..." from the src dir, with appropriate arguments. You can leave
|
||||||
|
off the args to see a help message. See "Section
|
||||||
|
4"_Section_packages.html for details for each package.
|
||||||
|
|
||||||
If the library build is successful, it will produce 2 files in the lib
|
:link(voronoi,http://math.lbl.gov/voro++)
|
||||||
directory:
|
|
||||||
|
|
||||||
libpackage.a
|
[Possible errors:]
|
||||||
Makefile.lammps :pre
|
|
||||||
|
|
||||||
The Makefile.lammps file will typically be a copy of one of the
|
There are various common errors which can occur when building extra
|
||||||
Makefile.lammps.* files in the library directory.
|
libraries or when building LAMMPS with packages that require the extra
|
||||||
|
libraries.
|
||||||
|
|
||||||
Note that you must insure that the settings in Makefile.lammps are
|
If you cannot build the extra library itself successfully, you may
|
||||||
appropriate for your system. If they are not, the LAMMPS build may
|
need to edit or create an appropriate Makefile for your machine, e.g.
|
||||||
fail. To fix this, you can edit or create a new Makefile.lammps.*
|
with appropriate compiler or system settings. Provided makefiles are
|
||||||
file for your system, and copy it to Makefile.lammps.
|
typically in the lib/name directory. E.g. see the Makefile.* files in
|
||||||
|
lib/gpu.
|
||||||
|
|
||||||
As explained in the lib/package/README files, the settings in
|
The LAMMPS build often uses settings in a lib/name/Makefile.lammps
|
||||||
Makefile.lammps are used to specify additional system libraries and
|
file which either exists in the LAMMPS distribution or is created or
|
||||||
their locations so that LAMMPS can build with the auxiliary library.
|
copied from a lib/name/Makefile.lammps.* file when the library is
|
||||||
For example, if the MEAM package is used, the auxiliary library
|
built. If those settings are not correct for your machine you will
|
||||||
consists of F90 code, built with a Fortran complier. To link that
|
need to edit or create an appropriate Makefile.lammps file.
|
||||||
library with LAMMPS (a C++ code) via whatever C++ compiler LAMMPS is
|
|
||||||
built with, typically requires additional Fortran-to-C libraries be
|
|
||||||
included in the link. Another example are the BLAS and LAPACK
|
|
||||||
libraries needed to use the USER-ATC or USER-AWPMD packages.
|
|
||||||
|
|
||||||
For libraries without provided code, the sub-directory README file has
|
Package-specific details for these steps are given in "Section
|
||||||
information on where to download the library and how to build it,
|
4"_Section_packages.html an in README files in the lib/name
|
||||||
e.g. lib/voronoi/README and lib/smd/README. The README files also
|
directories.
|
||||||
describe how you must either (a) create soft links, via the "ln"
|
|
||||||
command, in those directories to point to where you built or installed
|
|
||||||
the packages, or (b) check or edit the Makefile.lammps file in the
|
|
||||||
same directory to provide that information.
|
|
||||||
|
|
||||||
Some of the sub-directories, e.g. lib/voronoi, also have an install.py
|
[Compiler options needed for accelerator packages:]
|
||||||
script which can be used to automate the process of
|
|
||||||
downloading/building/installing the auxiliary library, and setting the
|
|
||||||
needed soft links. Type "python install.py" for further instructions.
|
|
||||||
|
|
||||||
As with the sub-directories containing library code, if the soft links
|
Several packages contain code that is optimized for specific hardware,
|
||||||
or settings in the lib/package/Makefile.lammps files are not correct,
|
e.g. CPU, KNL, or GPU. These are the OPT, GPU, KOKKOS, USER-INTEL,
|
||||||
the LAMMPS build will typically fail.
|
and USER-OMP packages. Compiling and linking the source files in
|
||||||
|
these accelerator packages for optimal performance requires specific
|
||||||
|
settings in the Makefile.machine file you use.
|
||||||
|
|
||||||
:line
|
A summary of the Makefile.machine settings needed for each of these
|
||||||
|
packages is given in "Section 4"_Section_packages.html. More info is
|
||||||
Packages that require Makefile.machine settings :h5,link(start_3_4)
|
given on the doc pages that describe each package in detail:
|
||||||
|
|
||||||
A few packages require specific settings in Makefile.machine, to
|
|
||||||
either build or use the package effectively. These are the
|
|
||||||
USER-INTEL, KOKKOS, USER-OMP, and OPT packages, used for accelerating
|
|
||||||
code performance on CPUs or other hardware, as discussed in "Section
|
|
||||||
5.3"_Section_accelerate.html#acc_3.
|
|
||||||
|
|
||||||
A summary of what Makefile.machine changes are needed for each of
|
|
||||||
these packages is given in "Section 4"_Section_packages.html.
|
|
||||||
The details are given on the doc pages that describe each of these
|
|
||||||
accelerator packages in detail:
|
|
||||||
|
|
||||||
5.3.1 "USER-INTEL package"_accelerate_intel.html
|
5.3.1 "USER-INTEL package"_accelerate_intel.html
|
||||||
|
5.3.2 "GPU package"_accelerate_intel.html
|
||||||
5.3.3 "KOKKOS package"_accelerate_kokkos.html
|
5.3.3 "KOKKOS package"_accelerate_kokkos.html
|
||||||
5.3.4 "USER-OMP package"_accelerate_omp.html
|
5.3.4 "USER-OMP package"_accelerate_omp.html
|
||||||
5.3.5 "OPT package"_accelerate_opt.html :all(b)
|
5.3.5 "OPT package"_accelerate_opt.html :all(b)
|
||||||
|
|
||||||
You can also look at the following machine Makefiles in
|
You can also use or examine the following machine Makefiles in
|
||||||
src/MAKE/OPTIONS, which include the changes. Note that the USER-INTEL
|
src/MAKE/OPTIONS, which include the settings. Note that the
|
||||||
and KOKKOS packages allow for settings that build LAMMPS for different
|
USER-INTEL and KOKKOS packages can use settings that build LAMMPS for
|
||||||
hardware. The USER-INTEL package builds for CPU and the Xeon Phi, the
|
different hardware. The USER-INTEL package can be compiled for Intel
|
||||||
KOKKOS package builds for OpenMP, GPUs (Cuda), and the Xeon Phi.
|
CPUs and KNLs; the KOKKOS package builds for CPUs (OpenMP), GPUs
|
||||||
|
(Cuda), and Intel KNLs.
|
||||||
|
|
||||||
Makefile.intel_cpu
|
Makefile.intel_cpu
|
||||||
Makefile.intel_phi
|
Makefile.intel_phi
|
||||||
@ -907,127 +891,9 @@ Makefile.kokkos_phi
|
|||||||
Makefile.omp
|
Makefile.omp
|
||||||
Makefile.opt :ul
|
Makefile.opt :ul
|
||||||
|
|
||||||
Also note that the Make.py tool, described in the next "Section
|
|
||||||
2.4"_#start_4 can automatically add the needed info to an existing
|
|
||||||
machine Makefile, using simple command-line arguments.
|
|
||||||
|
|
||||||
:line
|
:line
|
||||||
|
|
||||||
2.4 Building LAMMPS via the Make.py tool :h4,link(start_4)
|
2.4 Building LAMMPS as a library :h4,link(start_4)
|
||||||
|
|
||||||
The src directory includes a Make.py script, written in Python, which
|
|
||||||
can be used to automate various steps of the build process. It is
|
|
||||||
particularly useful for working with the accelerator packages, as well
|
|
||||||
as other packages which require auxiliary libraries to be built.
|
|
||||||
|
|
||||||
The goal of the Make.py tool is to allow any complex multi-step LAMMPS
|
|
||||||
build to be performed as a single Make.py command. And you can
|
|
||||||
archive the commands, so they can be re-invoked later via the -r
|
|
||||||
(redo) switch. If you find some LAMMPS build procedure that can't be
|
|
||||||
done in a single Make.py command, let the developers know, and we'll
|
|
||||||
see if we can augment the tool.
|
|
||||||
|
|
||||||
You can run Make.py from the src directory by typing either:
|
|
||||||
|
|
||||||
Make.py -h
|
|
||||||
python Make.py -h :pre
|
|
||||||
|
|
||||||
which will give you help info about the tool. For the former to work,
|
|
||||||
you may need to edit the first line of Make.py to point to your local
|
|
||||||
Python. And you may need to insure the script is executable:
|
|
||||||
|
|
||||||
chmod +x Make.py :pre
|
|
||||||
|
|
||||||
Here are examples of build tasks you can perform with Make.py:
|
|
||||||
|
|
||||||
Install/uninstall packages: Make.py -p no-lib kokkos omp intel
|
|
||||||
Build specific auxiliary libs: Make.py -a lib-atc lib-meam
|
|
||||||
Build libs for all installed packages: Make.py -p cuda gpu -gpu mode=double arch=31 -a lib-all
|
|
||||||
Create a Makefile from scratch with compiler and MPI settings: Make.py -m none -cc g++ -mpi mpich -a file
|
|
||||||
Augment Makefile.serial with settings for installed packages: Make.py -p intel -intel cpu -m serial -a file
|
|
||||||
Add JPG and FFTW support to Makefile.mpi: Make.py -m mpi -jpg -fft fftw -a file
|
|
||||||
Build LAMMPS with a parallel make using Makefile.mpi: Make.py -j 16 -m mpi -a exe
|
|
||||||
Build LAMMPS and libs it needs using Makefile.serial with accelerator settings: Make.py -p gpu intel -intel cpu -a lib-all file serial :tb(s=:)
|
|
||||||
|
|
||||||
The bench and examples directories give Make.py commands that can be
|
|
||||||
used to build LAMMPS with the various packages and options needed to
|
|
||||||
run all the benchmark and example input scripts. See these files for
|
|
||||||
more details:
|
|
||||||
|
|
||||||
bench/README
|
|
||||||
bench/FERMI/README
|
|
||||||
bench/KEPLER/README
|
|
||||||
bench/PHI/README
|
|
||||||
examples/README
|
|
||||||
examples/accelerate/README
|
|
||||||
examples/accelerate/make.list :ul
|
|
||||||
|
|
||||||
All of the Make.py options and syntax help can be accessed by using
|
|
||||||
the "-h" switch.
|
|
||||||
|
|
||||||
E.g. typing "Make.py -h" gives
|
|
||||||
|
|
||||||
Syntax: Make.py switch args ...
|
|
||||||
switches can be listed in any order
|
|
||||||
help switch:
|
|
||||||
-h prints help and syntax for all other specified switches
|
|
||||||
switch for actions:
|
|
||||||
-a lib-all, lib-dir, clean, file, exe or machine
|
|
||||||
list one or more actions, in any order
|
|
||||||
machine is a Makefile.machine suffix, must be last if used
|
|
||||||
one-letter switches:
|
|
||||||
-d (dir), -j (jmake), -m (makefile), -o (output),
|
|
||||||
-p (packages), -r (redo), -s (settings), -v (verbose)
|
|
||||||
switches for libs:
|
|
||||||
-atc, -awpmd, -colvars, -cuda
|
|
||||||
-gpu, -meam, -poems, -qmmm, -reax
|
|
||||||
switches for build and makefile options:
|
|
||||||
-intel, -kokkos, -cc, -mpi, -fft, -jpg, -png :pre
|
|
||||||
|
|
||||||
Using the "-h" switch with other switches and actions gives additional
|
|
||||||
info on all the other specified switches or actions. The "-h" can be
|
|
||||||
anywhere in the command-line and the other switches do not need their
|
|
||||||
arguments. E.g. type "Make.py -h -d -atc -intel" will print:
|
|
||||||
|
|
||||||
-d dir
|
|
||||||
dir = LAMMPS home dir
|
|
||||||
if -d not specified, working dir must be lammps/src :pre
|
|
||||||
|
|
||||||
-atc make=suffix lammps=suffix2
|
|
||||||
all args are optional and can be in any order
|
|
||||||
make = use Makefile.suffix (def = g++)
|
|
||||||
lammps = use Makefile.lammps.suffix2 (def = EXTRAMAKE in makefile) :pre
|
|
||||||
|
|
||||||
-intel mode
|
|
||||||
mode = cpu or phi (def = cpu)
|
|
||||||
build Intel package for CPU or Xeon Phi :pre
|
|
||||||
|
|
||||||
Note that Make.py never overwrites an existing Makefile.machine.
|
|
||||||
Instead, it creates src/MAKE/MINE/Makefile.auto, which you can save or
|
|
||||||
rename if desired. Likewise it creates an executable named
|
|
||||||
src/lmp_auto, which you can rename using the -o switch if desired.
|
|
||||||
|
|
||||||
The most recently executed Make.py command is saved in
|
|
||||||
src/Make.py.last. You can use the "-r" switch (for redo) to re-invoke
|
|
||||||
the last command, or you can save a sequence of one or more Make.py
|
|
||||||
commands to a file and invoke the file of commands using "-r". You
|
|
||||||
can also label the commands in the file and invoke one or more of them
|
|
||||||
by name.
|
|
||||||
|
|
||||||
A typical use of Make.py is to start with a valid Makefile.machine for
|
|
||||||
your system, that works for a vanilla LAMMPS build, i.e. when optional
|
|
||||||
packages are not installed. You can then use Make.py to add various
|
|
||||||
settings (FFT, JPG, PNG) to the Makefile.machine as well as change its
|
|
||||||
compiler and MPI options. You can also add additional packages to the
|
|
||||||
build, as well as build the needed supporting libraries.
|
|
||||||
|
|
||||||
You can also use Make.py to create a new Makefile.machine from
|
|
||||||
scratch, using the "-m none" switch, if you also specify what compiler
|
|
||||||
and MPI options to use, via the "-cc" and "-mpi" switches.
|
|
||||||
|
|
||||||
:line
|
|
||||||
|
|
||||||
2.5 Building LAMMPS as a library :h4,link(start_5)
|
|
||||||
|
|
||||||
LAMMPS can be built as either a static or shared library, which can
|
LAMMPS can be built as either a static or shared library, which can
|
||||||
then be called from another application or a scripting language. See
|
then be called from another application or a scripting language. See
|
||||||
@ -1063,7 +929,7 @@ src/MAKE/Makefile.foo and perform the build in the directory
|
|||||||
Obj_shared_foo. This is so that each file can be compiled with the
|
Obj_shared_foo. This is so that each file can be compiled with the
|
||||||
-fPIC flag which is required for inclusion in a shared library. The
|
-fPIC flag which is required for inclusion in a shared library. The
|
||||||
build will create the file liblammps_foo.so which another application
|
build will create the file liblammps_foo.so which another application
|
||||||
can link to dynamically. It will also create a soft link liblammps.so,
|
can link to dyamically. It will also create a soft link liblammps.so,
|
||||||
which will point to the most recently built shared library. This is
|
which will point to the most recently built shared library. This is
|
||||||
the file the Python wrapper loads by default.
|
the file the Python wrapper loads by default.
|
||||||
|
|
||||||
@ -1149,7 +1015,7 @@ interface and how to extend it for your needs.
|
|||||||
|
|
||||||
:line
|
:line
|
||||||
|
|
||||||
2.6 Running LAMMPS :h4,link(start_6)
|
2.5 Running LAMMPS :h4,link(start_5)
|
||||||
|
|
||||||
By default, LAMMPS runs by reading commands from standard input. Thus
|
By default, LAMMPS runs by reading commands from standard input. Thus
|
||||||
if you run the LAMMPS executable by itself, e.g.
|
if you run the LAMMPS executable by itself, e.g.
|
||||||
@ -1281,7 +1147,7 @@ more processors or setup a smaller problem.
|
|||||||
|
|
||||||
:line
|
:line
|
||||||
|
|
||||||
2.7 Command-line options :h4,link(start_7)
|
2.6 Command-line options :h4,link(start_6)
|
||||||
|
|
||||||
At run time, LAMMPS recognizes several optional command-line switches
|
At run time, LAMMPS recognizes several optional command-line switches
|
||||||
which may be used in any order. Either the full word or a one-or-two
|
which may be used in any order. Either the full word or a one-or-two
|
||||||
@ -1415,8 +1281,8 @@ LAMMPS is compiled with CUDA=yes.
|
|||||||
numa Nm :pre
|
numa Nm :pre
|
||||||
|
|
||||||
This option is only relevant when using pthreads with hwloc support.
|
This option is only relevant when using pthreads with hwloc support.
|
||||||
In this case Nm defines the number of NUMA regions (typically sockets)
|
In this case Nm defines the number of NUMA regions (typicaly sockets)
|
||||||
on a node which will be utilized by a single MPI rank. By default Nm
|
on a node which will be utilizied by a single MPI rank. By default Nm
|
||||||
= 1. If this option is used the total number of worker-threads per
|
= 1. If this option is used the total number of worker-threads per
|
||||||
MPI rank is threads*numa. Currently it is always almost better to
|
MPI rank is threads*numa. Currently it is always almost better to
|
||||||
assign at least one MPI rank per NUMA region, and leave numa set to
|
assign at least one MPI rank per NUMA region, and leave numa set to
|
||||||
@ -1480,7 +1346,7 @@ replica runs on on one or a few processors. Note that with MPI
|
|||||||
installed on a machine (e.g. your desktop), you can run on more
|
installed on a machine (e.g. your desktop), you can run on more
|
||||||
(virtual) processors than you have physical processors.
|
(virtual) processors than you have physical processors.
|
||||||
|
|
||||||
To run multiple independent simulations from one input script, using
|
To run multiple independent simulatoins from one input script, using
|
||||||
multiple partitions, see "Section 6.4"_Section_howto.html#howto_4
|
multiple partitions, see "Section 6.4"_Section_howto.html#howto_4
|
||||||
of the manual. World- and universe-style "variables"_variable.html
|
of the manual. World- and universe-style "variables"_variable.html
|
||||||
are useful in this context.
|
are useful in this context.
|
||||||
@ -1711,7 +1577,7 @@ negative numeric value. It is OK if the first value1 starts with a
|
|||||||
|
|
||||||
:line
|
:line
|
||||||
|
|
||||||
2.8 LAMMPS screen output :h4,link(start_8)
|
2.7 LAMMPS screen output :h4,link(start_7)
|
||||||
|
|
||||||
As LAMMPS reads an input script, it prints information to both the
|
As LAMMPS reads an input script, it prints information to both the
|
||||||
screen and a log file about significant actions it takes to setup a
|
screen and a log file about significant actions it takes to setup a
|
||||||
@ -1759,7 +1625,7 @@ The first section provides a global loop timing summary. The {loop time}
|
|||||||
is the total wall time for the section. The {Performance} line is
|
is the total wall time for the section. The {Performance} line is
|
||||||
provided for convenience to help predicting the number of loop
|
provided for convenience to help predicting the number of loop
|
||||||
continuations required and for comparing performance with other,
|
continuations required and for comparing performance with other,
|
||||||
similar MD codes. The {CPU use} line provides the CPU utilization per
|
similar MD codes. The {CPU use} line provides the CPU utilzation per
|
||||||
MPI task; it should be close to 100% times the number of OpenMP
|
MPI task; it should be close to 100% times the number of OpenMP
|
||||||
threads (or 1 of no OpenMP). Lower numbers correspond to delays due
|
threads (or 1 of no OpenMP). Lower numbers correspond to delays due
|
||||||
to file I/O or insufficient thread utilization.
|
to file I/O or insufficient thread utilization.
|
||||||
@ -1867,7 +1733,7 @@ communication, roughly 75% in the example above.
|
|||||||
|
|
||||||
:line
|
:line
|
||||||
|
|
||||||
2.9 Tips for users of previous LAMMPS versions :h4,link(start_9)
|
2.8 Tips for users of previous LAMMPS versions :h4,link(start_8)
|
||||||
|
|
||||||
The current C++ began with a complete rewrite of LAMMPS 2001, which
|
The current C++ began with a complete rewrite of LAMMPS 2001, which
|
||||||
was written in F90. Features of earlier versions of LAMMPS are listed
|
was written in F90. Features of earlier versions of LAMMPS are listed
|
||||||
|
|||||||
@ -24,7 +24,7 @@ twojmax = band limit for bispectrum components (non-negative integer) :l
|
|||||||
R_1, R_2,... = list of cutoff radii, one for each type (distance units) :l
|
R_1, R_2,... = list of cutoff radii, one for each type (distance units) :l
|
||||||
w_1, w_2,... = list of neighbor weights, one for each type :l
|
w_1, w_2,... = list of neighbor weights, one for each type :l
|
||||||
zero or more keyword/value pairs may be appended :l
|
zero or more keyword/value pairs may be appended :l
|
||||||
keyword = {diagonal} or {rmin0} or {switchflag} or {bzeroflag} :l
|
keyword = {diagonal} or {rmin0} or {switchflag} or {bzeroflag} or {quadraticflag}:l
|
||||||
{diagonal} value = {0} or {1} or {2} or {3}
|
{diagonal} value = {0} or {1} or {2} or {3}
|
||||||
{0} = all j1, j2, j <= twojmax, j2 <= j1
|
{0} = all j1, j2, j <= twojmax, j2 <= j1
|
||||||
{1} = subset satisfying j1 == j2
|
{1} = subset satisfying j1 == j2
|
||||||
@ -36,7 +36,10 @@ keyword = {diagonal} or {rmin0} or {switchflag} or {bzeroflag} :l
|
|||||||
{1} = use switching function
|
{1} = use switching function
|
||||||
{bzeroflag} value = {0} or {1}
|
{bzeroflag} value = {0} or {1}
|
||||||
{0} = do not subtract B0
|
{0} = do not subtract B0
|
||||||
{1} = subtract B0 :pre
|
{1} = subtract B0
|
||||||
|
{quadraticflag} value = {0} or {1}
|
||||||
|
{0} = do not generate quadratic terms
|
||||||
|
{1} = generate quadratic terms :pre
|
||||||
:ule
|
:ule
|
||||||
|
|
||||||
[Examples:]
|
[Examples:]
|
||||||
@ -151,7 +154,7 @@ linear mapping from radial distance to polar angle {theta0} on the
|
|||||||
The argument {twojmax} and the keyword {diagonal} define which
|
The argument {twojmax} and the keyword {diagonal} define which
|
||||||
bispectrum components are generated. See section below on output for a
|
bispectrum components are generated. See section below on output for a
|
||||||
detailed explanation of the number of bispectrum components and the
|
detailed explanation of the number of bispectrum components and the
|
||||||
ordered in which they are listed
|
ordered in which they are listed.
|
||||||
|
|
||||||
The keyword {switchflag} can be used to turn off the switching
|
The keyword {switchflag} can be used to turn off the switching
|
||||||
function.
|
function.
|
||||||
@ -162,6 +165,14 @@ the calculated bispectrum components. This optional keyword is only
|
|||||||
available for compute {sna/atom}, as {snad/atom} and {snav/atom}
|
available for compute {sna/atom}, as {snad/atom} and {snav/atom}
|
||||||
are unaffected by the removal of constant terms.
|
are unaffected by the removal of constant terms.
|
||||||
|
|
||||||
|
The keyword {quadraticflag} determines whether or not the
|
||||||
|
quadratic analogs to the bispectrum quantities are generated.
|
||||||
|
These are formed by taking the outer product of the vector
|
||||||
|
of bispectrum components with itself.
|
||||||
|
See section below on output for a
|
||||||
|
detailed explanation of the number of quadratic terms and the
|
||||||
|
ordered in which they are listed.
|
||||||
|
|
||||||
NOTE: If you have a bonded system, then the settings of
|
NOTE: If you have a bonded system, then the settings of
|
||||||
"special_bonds"_special_bonds.html command can remove pairwise
|
"special_bonds"_special_bonds.html command can remove pairwise
|
||||||
interactions between atoms in the same bond, angle, or dihedral. This
|
interactions between atoms in the same bond, angle, or dihedral. This
|
||||||
@ -180,7 +191,7 @@ command that includes all pairs in the neighbor list.
|
|||||||
|
|
||||||
Compute {sna/atom} calculates a per-atom array, each column
|
Compute {sna/atom} calculates a per-atom array, each column
|
||||||
corresponding to a particular bispectrum component. The total number
|
corresponding to a particular bispectrum component. The total number
|
||||||
of columns and the identities of the bispectrum component contained in
|
of columns and the identity of the bispectrum component contained in
|
||||||
each column depend on the values of {twojmax} and {diagonal}, as
|
each column depend on the values of {twojmax} and {diagonal}, as
|
||||||
described by the following piece of python code:
|
described by the following piece of python code:
|
||||||
|
|
||||||
@ -213,6 +224,19 @@ block contains six sub-blocks corresponding to the {xx}, {yy}, {zz},
|
|||||||
notation. Each of these sub-blocks contains one column for each
|
notation. Each of these sub-blocks contains one column for each
|
||||||
bispectrum component, the same as for compute {sna/atom}
|
bispectrum component, the same as for compute {sna/atom}
|
||||||
|
|
||||||
|
For example, if {K}=30 and ntypes=1, the number of columns in the per-atom
|
||||||
|
arrays generated by {sna/atom}, {snad/atom}, and {snav/atom}
|
||||||
|
are 30, 90, and 180, respectively. With {quadratic} value=1,
|
||||||
|
the numbers of columns are 930, 2790, and 5580, respectively.
|
||||||
|
|
||||||
|
If the {quadratic} keyword value is set to 1, then additional
|
||||||
|
columns are appended to each per-atom array, corresponding to
|
||||||
|
a matrix of quantities that are products of two bispectrum components. If the
|
||||||
|
number of bispectrum components is {K}, then the number of matrix elements
|
||||||
|
is {K}^2. These are output in subblocks of {K}^2 columns, using the same
|
||||||
|
ordering of columns and sub-blocks as was used for the bispectrum
|
||||||
|
components.
|
||||||
|
|
||||||
These values can be accessed by any command that uses per-atom values
|
These values can be accessed by any command that uses per-atom values
|
||||||
from a compute as input. See "Section
|
from a compute as input. See "Section
|
||||||
6.15"_Section_howto.html#howto_15 for an overview of LAMMPS output
|
6.15"_Section_howto.html#howto_15 for an overview of LAMMPS output
|
||||||
@ -231,7 +255,7 @@ LAMMPS"_Section_start.html#start_3 section for more info.
|
|||||||
[Default:]
|
[Default:]
|
||||||
|
|
||||||
The optional keyword defaults are {diagonal} = 0, {rmin0} = 0,
|
The optional keyword defaults are {diagonal} = 0, {rmin0} = 0,
|
||||||
{switchflag} = 1, {bzeroflag} = 0.
|
{switchflag} = 1, {bzeroflag} = 1, {quadraticflag} = 0,
|
||||||
|
|
||||||
:line
|
:line
|
||||||
|
|
||||||
|
|||||||
@ -7,12 +7,12 @@
|
|||||||
:line
|
:line
|
||||||
|
|
||||||
dump command :h3
|
dump command :h3
|
||||||
"dump custom/vtk"_dump_custom_vtk.html command :h3
|
"dump vtk"_dump_vtk.html command :h3
|
||||||
"dump h5md"_dump_h5md.html command :h3
|
"dump h5md"_dump_h5md.html command :h3
|
||||||
|
"dump molfile"_dump_molfile.html command :h3
|
||||||
|
"dump netcdf"_dump_netcdf.html command :h3
|
||||||
"dump image"_dump_image.html command :h3
|
"dump image"_dump_image.html command :h3
|
||||||
"dump movie"_dump_image.html command :h3
|
"dump movie"_dump_image.html command :h3
|
||||||
"dump molfile"_dump_molfile.html command :h3
|
|
||||||
"dump nc"_dump_nc.html command :h3
|
|
||||||
|
|
||||||
[Syntax:]
|
[Syntax:]
|
||||||
|
|
||||||
@ -20,7 +20,7 @@ dump ID group-ID style N file args :pre
|
|||||||
|
|
||||||
ID = user-assigned name for the dump :ulb,l
|
ID = user-assigned name for the dump :ulb,l
|
||||||
group-ID = ID of the group of atoms to be dumped :l
|
group-ID = ID of the group of atoms to be dumped :l
|
||||||
style = {atom} or {atom/gz} or {atom/mpiio} or {cfg} or {cfg/gz} or {cfg/mpiio} or {dcd} or {xtc} or {xyz} or {xyz/gz} or {xyz/mpiio} or {h5md} or {image} or {movie} or {molfile} or {local} or {custom} or {custom/gz} or {custom/mpiio} :l
|
style = {atom} or {atom/gz} or {atom/mpiio} or {cfg} or {cfg/gz} or {cfg/mpiio} or {custom} or {custom/gz} or {custom/mpiio} or {dcd} or {h5md} or {image} or or {local} or {molfile} or {movie} or {netcdf} or {netcdf/mpiio} or {vtk} or {xtc} or {xyz} or {xyz/gz} or {xyz/mpiio} :l
|
||||||
N = dump every this many timesteps :l
|
N = dump every this many timesteps :l
|
||||||
file = name of file to write dump info to :l
|
file = name of file to write dump info to :l
|
||||||
args = list of arguments for a particular style :l
|
args = list of arguments for a particular style :l
|
||||||
@ -30,33 +30,22 @@ args = list of arguments for a particular style :l
|
|||||||
{cfg} args = same as {custom} args, see below
|
{cfg} args = same as {custom} args, see below
|
||||||
{cfg/gz} args = same as {custom} args, see below
|
{cfg/gz} args = same as {custom} args, see below
|
||||||
{cfg/mpiio} args = same as {custom} args, see below
|
{cfg/mpiio} args = same as {custom} args, see below
|
||||||
|
{custom}, {custom/gz}, {custom/mpiio} args = see below
|
||||||
{dcd} args = none
|
{dcd} args = none
|
||||||
|
{h5md} args = discussed on "dump h5md"_dump_h5md.html doc page
|
||||||
|
{image} args = discussed on "dump image"_dump_image.html doc page
|
||||||
|
{local} args = see below
|
||||||
|
{molfile} args = discussed on "dump molfile"_dump_molfile.html doc page
|
||||||
|
{movie} args = discussed on "dump image"_dump_image.html doc page
|
||||||
|
{netcdf} args = discussed on "dump netcdf"_dump_netcdf.html doc page
|
||||||
|
{netcdf/mpiio} args = discussed on "dump netcdf"_dump_netcdf.html doc page
|
||||||
|
{vtk} args = same as {custom} args, see below, also "dump vtk"_dump_vtk.html doc page
|
||||||
{xtc} args = none
|
{xtc} args = none
|
||||||
{xyz} args = none :pre
|
{xyz} args = none
|
||||||
{xyz/gz} args = none :pre
|
{xyz/gz} args = none
|
||||||
{xyz/mpiio} args = none :pre
|
{xyz/mpiio} args = none :pre
|
||||||
|
|
||||||
{custom/vtk} args = similar to custom args below, discussed on "dump custom/vtk"_dump_custom_vtk.html doc page :pre
|
{custom} or {custom/gz} or {custom/mpiio} args = list of atom attributes :l
|
||||||
|
|
||||||
{h5md} args = discussed on "dump h5md"_dump_h5md.html doc page :pre
|
|
||||||
|
|
||||||
{image} args = discussed on "dump image"_dump_image.html doc page :pre
|
|
||||||
|
|
||||||
{movie} args = discussed on "dump image"_dump_image.html doc page :pre
|
|
||||||
|
|
||||||
{molfile} args = discussed on "dump molfile"_dump_molfile.html doc page
|
|
||||||
|
|
||||||
{nc} args = discussed on "dump nc"_dump_nc.html doc page :pre
|
|
||||||
|
|
||||||
{local} args = list of local attributes
|
|
||||||
possible attributes = index, c_ID, c_ID\[I\], f_ID, f_ID\[I\]
|
|
||||||
index = enumeration of local values
|
|
||||||
c_ID = local vector calculated by a compute with ID
|
|
||||||
c_ID\[I\] = Ith column of local array calculated by a compute with ID, I can include wildcard (see below)
|
|
||||||
f_ID = local vector calculated by a fix with ID
|
|
||||||
f_ID\[I\] = Ith column of local array calculated by a fix with ID, I can include wildcard (see below) :pre
|
|
||||||
|
|
||||||
{custom} or {custom/gz} or {custom/mpiio} args = list of atom attributes
|
|
||||||
possible attributes = id, mol, proc, procp1, type, element, mass,
|
possible attributes = id, mol, proc, procp1, type, element, mass,
|
||||||
x, y, z, xs, ys, zs, xu, yu, zu,
|
x, y, z, xs, ys, zs, xu, yu, zu,
|
||||||
xsu, ysu, zsu, ix, iy, iz,
|
xsu, ysu, zsu, ix, iy, iz,
|
||||||
@ -94,6 +83,15 @@ args = list of arguments for a particular style :l
|
|||||||
v_name = per-atom vector calculated by an atom-style variable with name
|
v_name = per-atom vector calculated by an atom-style variable with name
|
||||||
d_name = per-atom floating point vector with name, managed by fix property/atom
|
d_name = per-atom floating point vector with name, managed by fix property/atom
|
||||||
i_name = per-atom integer vector with name, managed by fix property/atom :pre
|
i_name = per-atom integer vector with name, managed by fix property/atom :pre
|
||||||
|
|
||||||
|
{local} args = list of local attributes :l
|
||||||
|
possible attributes = index, c_ID, c_ID\[I\], f_ID, f_ID\[I\]
|
||||||
|
index = enumeration of local values
|
||||||
|
c_ID = local vector calculated by a compute with ID
|
||||||
|
c_ID\[I\] = Ith column of local array calculated by a compute with ID, I can include wildcard (see below)
|
||||||
|
f_ID = local vector calculated by a fix with ID
|
||||||
|
f_ID\[I\] = Ith column of local array calculated by a fix with ID, I can include wildcard (see below) :pre
|
||||||
|
|
||||||
:ule
|
:ule
|
||||||
|
|
||||||
[Examples:]
|
[Examples:]
|
||||||
|
|||||||
@ -1,347 +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
|
|
||||||
|
|
||||||
dump custom/vtk command :h3
|
|
||||||
|
|
||||||
[Syntax:]
|
|
||||||
|
|
||||||
dump ID group-ID style N file args :pre
|
|
||||||
|
|
||||||
ID = user-assigned name for the dump :ulb,l
|
|
||||||
group-ID = ID of the group of atoms to be dumped :l
|
|
||||||
style = {custom/vtk} :l
|
|
||||||
N = dump every this many timesteps :l
|
|
||||||
file = name of file to write dump info to :l
|
|
||||||
args = list of arguments for a particular style :l
|
|
||||||
{custom/vtk} args = list of atom attributes
|
|
||||||
possible attributes = id, mol, proc, procp1, type, element, mass,
|
|
||||||
x, y, z, xs, ys, zs, xu, yu, zu,
|
|
||||||
xsu, ysu, zsu, ix, iy, iz,
|
|
||||||
vx, vy, vz, fx, fy, fz,
|
|
||||||
q, mux, muy, muz, mu,
|
|
||||||
radius, diameter, omegax, omegay, omegaz,
|
|
||||||
angmomx, angmomy, angmomz, tqx, tqy, tqz,
|
|
||||||
c_ID, c_ID\[N\], f_ID, f_ID\[N\], v_name :pre
|
|
||||||
|
|
||||||
id = atom ID
|
|
||||||
mol = molecule ID
|
|
||||||
proc = ID of processor that owns atom
|
|
||||||
procp1 = ID+1 of processor that owns atom
|
|
||||||
type = atom type
|
|
||||||
element = name of atom element, as defined by "dump_modify"_dump_modify.html command
|
|
||||||
mass = atom mass
|
|
||||||
x,y,z = unscaled atom coordinates
|
|
||||||
xs,ys,zs = scaled atom coordinates
|
|
||||||
xu,yu,zu = unwrapped atom coordinates
|
|
||||||
xsu,ysu,zsu = scaled unwrapped atom coordinates
|
|
||||||
ix,iy,iz = box image that the atom is in
|
|
||||||
vx,vy,vz = atom velocities
|
|
||||||
fx,fy,fz = forces on atoms
|
|
||||||
q = atom charge
|
|
||||||
mux,muy,muz = orientation of dipole moment of atom
|
|
||||||
mu = magnitude of dipole moment of atom
|
|
||||||
radius,diameter = radius,diameter of spherical particle
|
|
||||||
omegax,omegay,omegaz = angular velocity of spherical particle
|
|
||||||
angmomx,angmomy,angmomz = angular momentum of aspherical particle
|
|
||||||
tqx,tqy,tqz = torque on finite-size particles
|
|
||||||
c_ID = per-atom vector calculated by a compute with ID
|
|
||||||
c_ID\[I\] = Ith column of per-atom array calculated by a compute with ID, I can include wildcard (see below)
|
|
||||||
f_ID = per-atom vector calculated by a fix with ID
|
|
||||||
f_ID\[I\] = Ith column of per-atom array calculated by a fix with ID, I can include wildcard (see below)
|
|
||||||
v_name = per-atom vector calculated by an atom-style variable with name
|
|
||||||
d_name = per-atom floating point vector with name, managed by fix property/atom
|
|
||||||
i_name = per-atom integer vector with name, managed by fix property/atom :pre
|
|
||||||
:ule
|
|
||||||
|
|
||||||
[Examples:]
|
|
||||||
|
|
||||||
dump dmpvtk all custom/vtk 100 dump*.myforce.vtk id type vx fx
|
|
||||||
dump dmpvtp flow custom/vtk 100 dump*.%.displace.vtp id type c_myD\[1\] c_myD\[2\] c_myD\[3\] v_ke :pre
|
|
||||||
|
|
||||||
The style {custom/vtk} is similar to the "custom"_dump.html style but
|
|
||||||
uses the VTK library to write data to VTK simple legacy or XML format
|
|
||||||
depending on the filename extension specified. This can be either
|
|
||||||
{*.vtk} for the legacy format or {*.vtp} and {*.vtu}, respectively,
|
|
||||||
for the XML format; see the "VTK
|
|
||||||
homepage"_http://www.vtk.org/VTK/img/file-formats.pdf for a detailed
|
|
||||||
description of these formats. Since this naming convention conflicts
|
|
||||||
with the way binary output is usually specified (see below),
|
|
||||||
"dump_modify binary"_dump_modify.html allows to set the binary
|
|
||||||
flag for this dump style explicitly.
|
|
||||||
|
|
||||||
[Description:]
|
|
||||||
|
|
||||||
Dump a snapshot of atom quantities to one or more files every N
|
|
||||||
timesteps in a format readable by the "VTK visualization
|
|
||||||
toolkit"_http://www.vtk.org or other visualization tools that use it,
|
|
||||||
e.g. "ParaView"_http://www.paraview.org. The timesteps on which dump
|
|
||||||
output is written can also be controlled by a variable; see the
|
|
||||||
"dump_modify every"_dump_modify.html command for details.
|
|
||||||
|
|
||||||
Only information for atoms in the specified group is dumped. The
|
|
||||||
"dump_modify thresh and region"_dump_modify.html commands can also
|
|
||||||
alter what atoms are included; see details below.
|
|
||||||
|
|
||||||
As described below, special characters ("*", "%") in the filename
|
|
||||||
determine the kind of output.
|
|
||||||
|
|
||||||
IMPORTANT NOTE: Because periodic boundary conditions are enforced only
|
|
||||||
on timesteps when neighbor lists are rebuilt, the coordinates of an
|
|
||||||
atom written to a dump file may be slightly outside the simulation
|
|
||||||
box.
|
|
||||||
|
|
||||||
IMPORTANT NOTE: Unless the "dump_modify sort"_dump_modify.html
|
|
||||||
option is invoked, the lines of atom information written to dump files
|
|
||||||
will be in an indeterminate order for each snapshot. This is even
|
|
||||||
true when running on a single processor, if the "atom_modify
|
|
||||||
sort"_atom_modify.html option is on, which it is by default. In this
|
|
||||||
case atoms are re-ordered periodically during a simulation, due to
|
|
||||||
spatial sorting. It is also true when running in parallel, because
|
|
||||||
data for a single snapshot is collected from multiple processors, each
|
|
||||||
of which owns a subset of the atoms.
|
|
||||||
|
|
||||||
For the {custom/vtk} style, sorting is off by default. See the
|
|
||||||
"dump_modify"_dump_modify.html doc page for details.
|
|
||||||
|
|
||||||
:line
|
|
||||||
|
|
||||||
The dimensions of the simulation box are written to a separate file
|
|
||||||
for each snapshot (either in legacy VTK or XML format depending on
|
|
||||||
the format of the main dump file) with the suffix {_boundingBox}
|
|
||||||
appended to the given dump filename.
|
|
||||||
|
|
||||||
For an orthogonal simulation box this information is saved as a
|
|
||||||
rectilinear grid (legacy .vtk or .vtr XML format).
|
|
||||||
|
|
||||||
Triclinic simulation boxes (non-orthogonal) are saved as
|
|
||||||
hexahedrons in either legacy .vtk or .vtu XML format.
|
|
||||||
|
|
||||||
Style {custom/vtk} allows you to specify a list of atom attributes
|
|
||||||
to be written to the dump file for each atom. Possible attributes
|
|
||||||
are listed above. In contrast to the {custom} style, the attributes
|
|
||||||
are rearranged to ensure correct ordering of vector components
|
|
||||||
(except for computes and fixes - these have to be given in the right
|
|
||||||
order) and duplicate entries are removed.
|
|
||||||
|
|
||||||
You cannot specify a quantity that is not defined for a particular
|
|
||||||
simulation - such as {q} for atom style {bond}, since that atom style
|
|
||||||
doesn't assign charges. Dumps occur at the very end of a timestep,
|
|
||||||
so atom attributes will include effects due to fixes that are applied
|
|
||||||
during the timestep. An explanation of the possible dump custom/vtk attributes
|
|
||||||
is given below. Since position data is required to write VTK files "x y z"
|
|
||||||
do not have to be specified explicitly.
|
|
||||||
|
|
||||||
The VTK format uses a single snapshot of the system per file, thus
|
|
||||||
a wildcard "*" must be included in the filename, as discussed below.
|
|
||||||
Otherwise the dump files will get overwritten with the new snapshot
|
|
||||||
each time.
|
|
||||||
|
|
||||||
:line
|
|
||||||
|
|
||||||
Dumps are performed on timesteps that are a multiple of N (including
|
|
||||||
timestep 0) and on the last timestep of a minimization if the
|
|
||||||
minimization converges. Note that this means a dump will not be
|
|
||||||
performed on the initial timestep after the dump command is invoked,
|
|
||||||
if the current timestep is not a multiple of N. This behavior can be
|
|
||||||
changed via the "dump_modify first"_dump_modify.html command, which
|
|
||||||
can also be useful if the dump command is invoked after a minimization
|
|
||||||
ended on an arbitrary timestep. N can be changed between runs by
|
|
||||||
using the "dump_modify every"_dump_modify.html command.
|
|
||||||
The "dump_modify every"_dump_modify.html command
|
|
||||||
also allows a variable to be used to determine the sequence of
|
|
||||||
timesteps on which dump files are written. In this mode a dump on the
|
|
||||||
first timestep of a run will also not be written unless the
|
|
||||||
"dump_modify first"_dump_modify.html command is used.
|
|
||||||
|
|
||||||
Dump filenames can contain two wildcard characters. If a "*"
|
|
||||||
character appears in the filename, then one file per snapshot is
|
|
||||||
written and the "*" character is replaced with the timestep value.
|
|
||||||
For example, tmp.dump*.vtk becomes tmp.dump0.vtk, tmp.dump10000.vtk,
|
|
||||||
tmp.dump20000.vtk, etc. Note that the "dump_modify pad"_dump_modify.html
|
|
||||||
command can be used to insure all timestep numbers are the same length
|
|
||||||
(e.g. 00010), which can make it easier to read a series of dump files
|
|
||||||
in order with some post-processing tools.
|
|
||||||
|
|
||||||
If a "%" character appears in the filename, then each of P processors
|
|
||||||
writes a portion of the dump file, and the "%" character is replaced
|
|
||||||
with the processor ID from 0 to P-1 preceded by an underscore character.
|
|
||||||
For example, tmp.dump%.vtp becomes tmp.dump_0.vtp, tmp.dump_1.vtp, ...
|
|
||||||
tmp.dump_P-1.vtp, etc. This creates smaller files and can be a fast
|
|
||||||
mode of output on parallel machines that support parallel I/O for output.
|
|
||||||
|
|
||||||
By default, P = the number of processors meaning one file per
|
|
||||||
processor, but P can be set to a smaller value via the {nfile} or
|
|
||||||
{fileper} keywords of the "dump_modify"_dump_modify.html command.
|
|
||||||
These options can be the most efficient way of writing out dump files
|
|
||||||
when running on large numbers of processors.
|
|
||||||
|
|
||||||
For the legacy VTK format "%" is ignored and P = 1, i.e., only
|
|
||||||
processor 0 does write files.
|
|
||||||
|
|
||||||
Note that using the "*" and "%" characters together can produce a
|
|
||||||
large number of small dump files!
|
|
||||||
|
|
||||||
If {dump_modify binary} is used, the dump file (or files, if "*" or
|
|
||||||
"%" is also used) is written in binary format. A binary dump file
|
|
||||||
will be about the same size as a text version, but will typically
|
|
||||||
write out much faster.
|
|
||||||
|
|
||||||
:line
|
|
||||||
|
|
||||||
This section explains the atom attributes that can be specified as
|
|
||||||
part of the {custom/vtk} style.
|
|
||||||
|
|
||||||
The {id}, {mol}, {proc}, {procp1}, {type}, {element}, {mass}, {vx},
|
|
||||||
{vy}, {vz}, {fx}, {fy}, {fz}, {q} attributes are self-explanatory.
|
|
||||||
|
|
||||||
{Id} is the atom ID. {Mol} is the molecule ID, included in the data
|
|
||||||
file for molecular systems. {Proc} is the ID of the processor (0 to
|
|
||||||
Nprocs-1) that currently owns the atom. {Procp1} is the proc ID+1,
|
|
||||||
which can be convenient in place of a {type} attribute (1 to Ntypes)
|
|
||||||
for coloring atoms in a visualization program. {Type} is the atom
|
|
||||||
type (1 to Ntypes). {Element} is typically the chemical name of an
|
|
||||||
element, which you must assign to each type via the "dump_modify
|
|
||||||
element"_dump_modify.html command. More generally, it can be any
|
|
||||||
string you wish to associated with an atom type. {Mass} is the atom
|
|
||||||
mass. {Vx}, {vy}, {vz}, {fx}, {fy}, {fz}, and {q} are components of
|
|
||||||
atom velocity and force and atomic charge.
|
|
||||||
|
|
||||||
There are several options for outputting atom coordinates. The {x},
|
|
||||||
{y}, {z} attributes write atom coordinates "unscaled", in the
|
|
||||||
appropriate distance "units"_units.html (Angstroms, sigma, etc). Use
|
|
||||||
{xs}, {ys}, {zs} if you want the coordinates "scaled" to the box size,
|
|
||||||
so that each value is 0.0 to 1.0. If the simulation box is triclinic
|
|
||||||
(tilted), then all atom coords will still be between 0.0 and 1.0.
|
|
||||||
I.e. actual unscaled (x,y,z) = xs*A + ys*B + zs*C, where (A,B,C) are
|
|
||||||
the non-orthogonal vectors of the simulation box edges, as discussed
|
|
||||||
in "Section 6.12"_Section_howto.html#howto_12.
|
|
||||||
|
|
||||||
Use {xu}, {yu}, {zu} if you want the coordinates "unwrapped" by the
|
|
||||||
image flags for each atom. Unwrapped means that if the atom has
|
|
||||||
passed thru a periodic boundary one or more times, the value is
|
|
||||||
printed for what the coordinate would be if it had not been wrapped
|
|
||||||
back into the periodic box. Note that using {xu}, {yu}, {zu} means
|
|
||||||
that the coordinate values may be far outside the box bounds printed
|
|
||||||
with the snapshot. Using {xsu}, {ysu}, {zsu} is similar to using
|
|
||||||
{xu}, {yu}, {zu}, except that the unwrapped coordinates are scaled by
|
|
||||||
the box size. Atoms that have passed through a periodic boundary will
|
|
||||||
have the corresponding coordinate increased or decreased by 1.0.
|
|
||||||
|
|
||||||
The image flags can be printed directly using the {ix}, {iy}, {iz}
|
|
||||||
attributes. For periodic dimensions, they specify which image of the
|
|
||||||
simulation box the atom is considered to be in. An image of 0 means
|
|
||||||
it is inside the box as defined. A value of 2 means add 2 box lengths
|
|
||||||
to get the true value. A value of -1 means subtract 1 box length to
|
|
||||||
get the true value. LAMMPS updates these flags as atoms cross
|
|
||||||
periodic boundaries during the simulation.
|
|
||||||
|
|
||||||
The {mux}, {muy}, {muz} attributes are specific to dipolar systems
|
|
||||||
defined with an atom style of {dipole}. They give the orientation of
|
|
||||||
the atom's point dipole moment. The {mu} attribute gives the
|
|
||||||
magnitude of the atom's dipole moment.
|
|
||||||
|
|
||||||
The {radius} and {diameter} attributes are specific to spherical
|
|
||||||
particles that have a finite size, such as those defined with an atom
|
|
||||||
style of {sphere}.
|
|
||||||
|
|
||||||
The {omegax}, {omegay}, and {omegaz} attributes are specific to
|
|
||||||
finite-size spherical particles that have an angular velocity. Only
|
|
||||||
certain atom styles, such as {sphere} define this quantity.
|
|
||||||
|
|
||||||
The {angmomx}, {angmomy}, and {angmomz} attributes are specific to
|
|
||||||
finite-size aspherical particles that have an angular momentum. Only
|
|
||||||
the {ellipsoid} atom style defines this quantity.
|
|
||||||
|
|
||||||
The {tqx}, {tqy}, {tqz} attributes are for finite-size particles that
|
|
||||||
can sustain a rotational torque due to interactions with other
|
|
||||||
particles.
|
|
||||||
|
|
||||||
The {c_ID} and {c_ID\[I\]} attributes allow per-atom vectors or arrays
|
|
||||||
calculated by a "compute"_compute.html to be output. The ID in the
|
|
||||||
attribute should be replaced by the actual ID of the compute that has
|
|
||||||
been defined previously in the input script. See the
|
|
||||||
"compute"_compute.html command for details. There are computes for
|
|
||||||
calculating the per-atom energy, stress, centro-symmetry parameter,
|
|
||||||
and coordination number of individual atoms.
|
|
||||||
|
|
||||||
Note that computes which calculate global or local quantities, as
|
|
||||||
opposed to per-atom quantities, cannot be output in a dump custom/vtk
|
|
||||||
command. Instead, global quantities can be output by the
|
|
||||||
"thermo_style custom"_thermo_style.html command, and local quantities
|
|
||||||
can be output by the dump local command.
|
|
||||||
|
|
||||||
If {c_ID} is used as a attribute, then the per-atom vector calculated
|
|
||||||
by the compute is printed. If {c_ID\[I\]} is used, then I must be in
|
|
||||||
the range from 1-M, which will print the Ith column of the per-atom
|
|
||||||
array with M columns calculated by the compute. See the discussion
|
|
||||||
above for how I can be specified with a wildcard asterisk to
|
|
||||||
effectively specify multiple values.
|
|
||||||
|
|
||||||
The {f_ID} and {f_ID\[I\]} attributes allow vector or array per-atom
|
|
||||||
quantities calculated by a "fix"_fix.html to be output. The ID in the
|
|
||||||
attribute should be replaced by the actual ID of the fix that has been
|
|
||||||
defined previously in the input script. The "fix
|
|
||||||
ave/atom"_fix_ave_atom.html command is one that calculates per-atom
|
|
||||||
quantities. Since it can time-average per-atom quantities produced by
|
|
||||||
any "compute"_compute.html, "fix"_fix.html, or atom-style
|
|
||||||
"variable"_variable.html, this allows those time-averaged results to
|
|
||||||
be written to a dump file.
|
|
||||||
|
|
||||||
If {f_ID} is used as a attribute, then the per-atom vector calculated
|
|
||||||
by the fix is printed. If {f_ID\[I\]} is used, then I must be in the
|
|
||||||
range from 1-M, which will print the Ith column of the per-atom array
|
|
||||||
with M columns calculated by the fix. See the discussion above for
|
|
||||||
how I can be specified with a wildcard asterisk to effectively specify
|
|
||||||
multiple values.
|
|
||||||
|
|
||||||
The {v_name} attribute allows per-atom vectors calculated by a
|
|
||||||
"variable"_variable.html to be output. The name in the attribute
|
|
||||||
should be replaced by the actual name of the variable that has been
|
|
||||||
defined previously in the input script. Only an atom-style variable
|
|
||||||
can be referenced, since it is the only style that generates per-atom
|
|
||||||
values. Variables of style {atom} can reference individual atom
|
|
||||||
attributes, per-atom atom attributes, thermodynamic keywords, or
|
|
||||||
invoke other computes, fixes, or variables when they are evaluated, so
|
|
||||||
this is a very general means of creating quantities to output to a
|
|
||||||
dump file.
|
|
||||||
|
|
||||||
The {d_name} and {i_name} attributes allow to output custom per atom
|
|
||||||
floating point or integer properties that are managed by
|
|
||||||
"fix property/atom"_fix_property_atom.html.
|
|
||||||
|
|
||||||
See "Section 10"_Section_modify.html of the manual for information
|
|
||||||
on how to add new compute and fix styles to LAMMPS to calculate
|
|
||||||
per-atom quantities which could then be output into dump files.
|
|
||||||
|
|
||||||
:line
|
|
||||||
|
|
||||||
[Restrictions:]
|
|
||||||
|
|
||||||
The {custom/vtk} style does not support writing of gzipped dump files.
|
|
||||||
|
|
||||||
The {custom/vtk} dump style is part of the USER-VTK 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.
|
|
||||||
|
|
||||||
To use this dump style, you also must link to the VTK library. See
|
|
||||||
the info in lib/vtk/README and insure the Makefile.lammps file in that
|
|
||||||
directory is appropriate for your machine.
|
|
||||||
|
|
||||||
The {custom/vtk} dump style neither supports buffering nor custom
|
|
||||||
format strings.
|
|
||||||
|
|
||||||
[Related commands:]
|
|
||||||
|
|
||||||
"dump"_dump.html, "dump image"_dump_image.html,
|
|
||||||
"dump_modify"_dump_modify.html, "undump"_undump.html
|
|
||||||
|
|
||||||
[Default:]
|
|
||||||
|
|
||||||
By default, files are written in ASCII format. If the file extension
|
|
||||||
is not one of .vtk, .vtp or .vtu, the legacy VTK file format is used.
|
|
||||||
|
|
||||||
@ -17,9 +17,7 @@ group-ID = ID of the group of atoms to be imaged :l
|
|||||||
h5md = style of dump command (other styles {atom} or {cfg} or {dcd} or {xtc} or {xyz} or {local} or {custom} are discussed on the "dump"_dump.html doc page) :l
|
h5md = style of dump command (other styles {atom} or {cfg} or {dcd} or {xtc} or {xyz} or {local} or {custom} are discussed on the "dump"_dump.html doc page) :l
|
||||||
N = dump every this many timesteps :l
|
N = dump every this many timesteps :l
|
||||||
file.h5 = name of file to write to :l
|
file.h5 = name of file to write to :l
|
||||||
args = list of data elements to dump, with their dump "subintervals".
|
args = list of data elements to dump, with their dump "subintervals"
|
||||||
At least one element must be given and image may only be present if
|
|
||||||
position is specified first. :l
|
|
||||||
position options
|
position options
|
||||||
image
|
image
|
||||||
velocity options
|
velocity options
|
||||||
@ -29,15 +27,17 @@ position is specified first. :l
|
|||||||
box value = {yes} or {no}
|
box value = {yes} or {no}
|
||||||
create_group value = {yes} or {no}
|
create_group value = {yes} or {no}
|
||||||
author value = quoted string :pre
|
author value = quoted string :pre
|
||||||
|
:ule
|
||||||
|
|
||||||
For the elements {position}, {velocity}, {force} and {species}, one
|
Note that at least one element must be specified and image may only be
|
||||||
may specify a sub-interval to write the data only every N_element
|
present if position is specified first.
|
||||||
|
|
||||||
|
For the elements {position}, {velocity}, {force} and {species}, a
|
||||||
|
sub-interval may be specified to write the data only every N_element
|
||||||
iterations of the dump (i.e. every N*N_element time steps). This is
|
iterations of the dump (i.e. every N*N_element time steps). This is
|
||||||
specified by the option
|
specified by this option directly following the element declaration:
|
||||||
|
|
||||||
every N_element :pre
|
every N_element :pre
|
||||||
|
|
||||||
that follows directly the element declaration.
|
|
||||||
|
|
||||||
:ule
|
:ule
|
||||||
|
|
||||||
|
|||||||
@ -1,66 +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
|
|
||||||
|
|
||||||
dump nc command :h3
|
|
||||||
dump nc/mpiio command :h3
|
|
||||||
|
|
||||||
[Syntax:]
|
|
||||||
|
|
||||||
dump ID group-ID nc N file.nc args
|
|
||||||
dump ID group-ID nc/mpiio N file.nc args :pre
|
|
||||||
|
|
||||||
ID = user-assigned name for the dump :ulb,l
|
|
||||||
group-ID = ID of the group of atoms to be imaged :l
|
|
||||||
{nc} or {nc/mpiio} = style of dump command (other styles {atom} or {cfg} or {dcd} or {xtc} or {xyz} or {local} or {custom} are discussed on the "dump"_dump.html doc page) :l
|
|
||||||
N = dump every this many timesteps :l
|
|
||||||
file.nc = name of file to write to :l
|
|
||||||
args = list of per atom data elements to dump, same as for the 'custom' dump style. :l,ule
|
|
||||||
|
|
||||||
[Examples:]
|
|
||||||
|
|
||||||
dump 1 all nc 100 traj.nc type x y z vx vy vz
|
|
||||||
dump_modify 1 append yes at -1 global c_thermo_pe c_thermo_temp c_thermo_press :pre
|
|
||||||
|
|
||||||
dump 1 all nc/mpiio 1000 traj.nc id type x y z :pre
|
|
||||||
|
|
||||||
[Description:]
|
|
||||||
|
|
||||||
Dump a snapshot of atom coordinates every N timesteps in Amber-style
|
|
||||||
NetCDF file format. NetCDF files are binary, portable and
|
|
||||||
self-describing. This dump style will write only one file on the root
|
|
||||||
node. The dump style {nc} uses the "standard NetCDF
|
|
||||||
library"_netcdf-home all data is collected on one processor and then
|
|
||||||
written to the dump file. Dump style {nc/mpiio} used the "parallel
|
|
||||||
NetCDF library"_pnetcdf-home and MPI-IO; it has better performance on
|
|
||||||
a larger number of processors. Note that 'nc' outputs all atoms sorted
|
|
||||||
by atom tag while 'nc/mpiio' outputs in order of the MPI rank.
|
|
||||||
|
|
||||||
In addition to per-atom data, also global (i.e. not per atom, but per
|
|
||||||
frame) quantities can be included in the dump file. This can be
|
|
||||||
variables, output from computes or fixes data prefixed with v_, c_ and
|
|
||||||
f_, respectively. These properties are included via
|
|
||||||
"dump_modify"_dump_modify.html {global}.
|
|
||||||
|
|
||||||
:link(netcdf-home,http://www.unidata.ucar.edu/software/netcdf/)
|
|
||||||
:link(pnetcdf-home,http://trac.mcs.anl.gov/projects/parallel-netcdf/)
|
|
||||||
|
|
||||||
:line
|
|
||||||
|
|
||||||
[Restrictions:]
|
|
||||||
|
|
||||||
The {nc} and {nc/mpiio} dump styles are part of the USER-NC-DUMP
|
|
||||||
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.
|
|
||||||
|
|
||||||
:line
|
|
||||||
|
|
||||||
[Related commands:]
|
|
||||||
|
|
||||||
"dump"_dump.html, "dump_modify"_dump_modify.html, "undump"_undump.html
|
|
||||||
|
|
||||||
82
doc/src/dump_netcdf.txt
Normal file
82
doc/src/dump_netcdf.txt
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
"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
|
||||||
|
|
||||||
|
dump netcdf command :h3
|
||||||
|
dump netcdf/mpiio command :h3
|
||||||
|
|
||||||
|
[Syntax:]
|
||||||
|
|
||||||
|
dump ID group-ID netcdf N file args
|
||||||
|
dump ID group-ID netcdf/mpiio N file args :pre
|
||||||
|
|
||||||
|
ID = user-assigned name for the dump :ulb,l
|
||||||
|
group-ID = ID of the group of atoms to be imaged :l
|
||||||
|
{netcdf} or {netcdf/mpiio} = style of dump command (other styles {atom} or {cfg} or {dcd} or {xtc} or {xyz} or {local} or {custom} are discussed on the "dump"_dump.html doc page) :l
|
||||||
|
N = dump every this many timesteps :l
|
||||||
|
file = name of file to write dump info to :l
|
||||||
|
args = list of atom attributes, same as for "dump_style custom"_dump.html :l,ule
|
||||||
|
|
||||||
|
[Examples:]
|
||||||
|
|
||||||
|
dump 1 all netcdf 100 traj.nc type x y z vx vy vz
|
||||||
|
dump_modify 1 append yes at -1 global c_thermo_pe c_thermo_temp c_thermo_press
|
||||||
|
dump 1 all netcdf/mpiio 1000 traj.nc id type x y z :pre
|
||||||
|
|
||||||
|
[Description:]
|
||||||
|
|
||||||
|
Dump a snapshot of atom coordinates every N timesteps in Amber-style
|
||||||
|
NetCDF file format. NetCDF files are binary, portable and
|
||||||
|
self-describing. This dump style will write only one file on the root
|
||||||
|
node. The dump style {netcdf} uses the "standard NetCDF
|
||||||
|
library"_netcdf-home. All data is collected on one processor and then
|
||||||
|
written to the dump file. Dump style {netcdf/mpiio} uses the
|
||||||
|
"parallel NetCDF library"_pnetcdf-home and MPI-IO to write to the dump
|
||||||
|
file in parallel; it has better performance on a larger number of
|
||||||
|
processors. Note that style {netcdf} outputs all atoms sorted by atom
|
||||||
|
tag while style {netcdf/mpiio} outputs atoms in order of their MPI
|
||||||
|
rank.
|
||||||
|
|
||||||
|
NetCDF files can be directly visualized via the following tools:
|
||||||
|
|
||||||
|
Ovito (http://www.ovito.org/). Ovito supports the AMBER convention and
|
||||||
|
all of the above extensions. :ule,b
|
||||||
|
|
||||||
|
VMD (http://www.ks.uiuc.edu/Research/vmd/). :l
|
||||||
|
|
||||||
|
AtomEye (http://www.libatoms.org/). The libAtoms version of AtomEye
|
||||||
|
contains a NetCDF reader that is not present in the standard
|
||||||
|
distribution of AtomEye. :l,ule
|
||||||
|
|
||||||
|
In addition to per-atom data, global data can be included in the dump
|
||||||
|
file, which are the kinds of values output by the
|
||||||
|
"thermo_style"_thermo_style.html command . See "Section howto
|
||||||
|
6.15"_Section_howto.html#howto_15 for an explanation of per-atom
|
||||||
|
versus global data. The global output written into the dump file can
|
||||||
|
be from computes, fixes, or variables, by prefixing the compute/fix ID
|
||||||
|
or variable name with "c_" or "f_" or "v_" respectively, as in the
|
||||||
|
example above. These global values are specified via the "dump_modify
|
||||||
|
global"_dump_modify.html command.
|
||||||
|
|
||||||
|
:link(netcdf-home,http://www.unidata.ucar.edu/software/netcdf/)
|
||||||
|
:link(pnetcdf-home,http://trac.mcs.anl.gov/projects/parallel-netcdf/)
|
||||||
|
|
||||||
|
:line
|
||||||
|
|
||||||
|
[Restrictions:]
|
||||||
|
|
||||||
|
The {netcdf} and {netcdf/mpiio} dump styles are part of the
|
||||||
|
USER-NETCDF package. They are only enabled if LAMMPS was built with
|
||||||
|
that package. See the "Making LAMMPS"_Section_start.html#start_3
|
||||||
|
section for more info.
|
||||||
|
|
||||||
|
:line
|
||||||
|
|
||||||
|
[Related commands:]
|
||||||
|
|
||||||
|
"dump"_dump.html, "dump_modify"_dump_modify.html, "undump"_undump.html
|
||||||
|
|
||||||
179
doc/src/dump_vtk.txt
Normal file
179
doc/src/dump_vtk.txt
Normal file
@ -0,0 +1,179 @@
|
|||||||
|
"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
|
||||||
|
|
||||||
|
dump vtk command :h3
|
||||||
|
|
||||||
|
[Syntax:]
|
||||||
|
|
||||||
|
dump ID group-ID vtk N file args :pre
|
||||||
|
|
||||||
|
ID = user-assigned name for the dump
|
||||||
|
group-ID = ID of the group of atoms to be dumped
|
||||||
|
vtk = style of dump command (other styles {atom} or {cfg} or {dcd} or {xtc} or {xyz} or {local} or {custom} are discussed on the "dump"_dump.html doc page)
|
||||||
|
N = dump every this many timesteps
|
||||||
|
file = name of file to write dump info to
|
||||||
|
args = same as arguments for "dump_style custom"_dump.html :ul
|
||||||
|
|
||||||
|
[Examples:]
|
||||||
|
|
||||||
|
dump dmpvtk all vtk 100 dump*.myforce.vtk id type vx fx
|
||||||
|
dump dmpvtp flow vtk 100 dump*.%.displace.vtp id type c_myD\[1\] c_myD\[2\] c_myD\[3\] v_ke :pre
|
||||||
|
|
||||||
|
[Description:]
|
||||||
|
|
||||||
|
Dump a snapshot of atom quantities to one or more files every N
|
||||||
|
timesteps in a format readable by the "VTK visualization
|
||||||
|
toolkit"_http://www.vtk.org or other visualization tools that use it,
|
||||||
|
e.g. "ParaView"_http://www.paraview.org. The timesteps on which dump
|
||||||
|
output is written can also be controlled by a variable; see the
|
||||||
|
"dump_modify every"_dump_modify.html command for details.
|
||||||
|
|
||||||
|
This dump style is similar to "dump_style custom"_dump.html but uses
|
||||||
|
the VTK library to write data to VTK simple legacy or XML format
|
||||||
|
depending on the filename extension specified for the dump file. This
|
||||||
|
can be either {*.vtk} for the legacy format or {*.vtp} and {*.vtu},
|
||||||
|
respectively, for XML format; see the "VTK
|
||||||
|
homepage"_http://www.vtk.org/VTK/img/file-formats.pdf for a detailed
|
||||||
|
description of these formats. Since this naming convention conflicts
|
||||||
|
with the way binary output is usually specified (see below), the
|
||||||
|
"dump_modify binary"_dump_modify.html command allows setting of a
|
||||||
|
binary option for this dump style explicitly.
|
||||||
|
|
||||||
|
Only information for atoms in the specified group is dumped. The
|
||||||
|
"dump_modify thresh and region"_dump_modify.html commands can also
|
||||||
|
alter what atoms are included; see details below.
|
||||||
|
|
||||||
|
As described below, special characters ("*", "%") in the filename
|
||||||
|
determine the kind of output.
|
||||||
|
|
||||||
|
IMPORTANT NOTE: Because periodic boundary conditions are enforced only
|
||||||
|
on timesteps when neighbor lists are rebuilt, the coordinates of an
|
||||||
|
atom written to a dump file may be slightly outside the simulation
|
||||||
|
box.
|
||||||
|
|
||||||
|
IMPORTANT NOTE: Unless the "dump_modify sort"_dump_modify.html option
|
||||||
|
is invoked, the lines of atom information written to dump files will
|
||||||
|
be in an indeterminate order for each snapshot. This is even true
|
||||||
|
when running on a single processor, if the "atom_modify
|
||||||
|
sort"_atom_modify.html option is on, which it is by default. In this
|
||||||
|
case atoms are re-ordered periodically during a simulation, due to
|
||||||
|
spatial sorting. It is also true when running in parallel, because
|
||||||
|
data for a single snapshot is collected from multiple processors, each
|
||||||
|
of which owns a subset of the atoms.
|
||||||
|
|
||||||
|
For the {vtk} style, sorting is off by default. See the
|
||||||
|
"dump_modify"_dump_modify.html doc page for details.
|
||||||
|
|
||||||
|
:line
|
||||||
|
|
||||||
|
The dimensions of the simulation box are written to a separate file
|
||||||
|
for each snapshot (either in legacy VTK or XML format depending on the
|
||||||
|
format of the main dump file) with the suffix {_boundingBox} appended
|
||||||
|
to the given dump filename.
|
||||||
|
|
||||||
|
For an orthogonal simulation box this information is saved as a
|
||||||
|
rectilinear grid (legacy .vtk or .vtr XML format).
|
||||||
|
|
||||||
|
Triclinic simulation boxes (non-orthogonal) are saved as
|
||||||
|
hexahedrons in either legacy .vtk or .vtu XML format.
|
||||||
|
|
||||||
|
Style {vtk} allows you to specify a list of atom attributes to be
|
||||||
|
written to the dump file for each atom. The list of possible attributes
|
||||||
|
is the same as for the "dump_style custom"_dump.html command; see
|
||||||
|
its doc page for a listing and an explanation of each attribute.
|
||||||
|
|
||||||
|
NOTE: Since position data is required to write VTK files the atom
|
||||||
|
attributes "x y z" do not have to be specified explicitly; they will
|
||||||
|
be included in the dump file regardless. Also, in contrast to the
|
||||||
|
{custom} style, the specified {vtk} attributes are rearranged to
|
||||||
|
ensure correct ordering of vector components (except for computes and
|
||||||
|
fixes - these have to be given in the right order) and duplicate
|
||||||
|
entries are removed.
|
||||||
|
|
||||||
|
The VTK format uses a single snapshot of the system per file, thus
|
||||||
|
a wildcard "*" must be included in the filename, as discussed below.
|
||||||
|
Otherwise the dump files will get overwritten with the new snapshot
|
||||||
|
each time.
|
||||||
|
|
||||||
|
:line
|
||||||
|
|
||||||
|
Dumps are performed on timesteps that are a multiple of N (including
|
||||||
|
timestep 0) and on the last timestep of a minimization if the
|
||||||
|
minimization converges. Note that this means a dump will not be
|
||||||
|
performed on the initial timestep after the dump command is invoked,
|
||||||
|
if the current timestep is not a multiple of N. This behavior can be
|
||||||
|
changed via the "dump_modify first"_dump_modify.html command, which
|
||||||
|
can also be useful if the dump command is invoked after a minimization
|
||||||
|
ended on an arbitrary timestep. N can be changed between runs by
|
||||||
|
using the "dump_modify every"_dump_modify.html command.
|
||||||
|
The "dump_modify every"_dump_modify.html command
|
||||||
|
also allows a variable to be used to determine the sequence of
|
||||||
|
timesteps on which dump files are written. In this mode a dump on the
|
||||||
|
first timestep of a run will also not be written unless the
|
||||||
|
"dump_modify first"_dump_modify.html command is used.
|
||||||
|
|
||||||
|
Dump filenames can contain two wildcard characters. If a "*"
|
||||||
|
character appears in the filename, then one file per snapshot is
|
||||||
|
written and the "*" character is replaced with the timestep value.
|
||||||
|
For example, tmp.dump*.vtk becomes tmp.dump0.vtk, tmp.dump10000.vtk,
|
||||||
|
tmp.dump20000.vtk, etc. Note that the "dump_modify pad"_dump_modify.html
|
||||||
|
command can be used to insure all timestep numbers are the same length
|
||||||
|
(e.g. 00010), which can make it easier to read a series of dump files
|
||||||
|
in order with some post-processing tools.
|
||||||
|
|
||||||
|
If a "%" character appears in the filename, then each of P processors
|
||||||
|
writes a portion of the dump file, and the "%" character is replaced
|
||||||
|
with the processor ID from 0 to P-1 preceded by an underscore character.
|
||||||
|
For example, tmp.dump%.vtp becomes tmp.dump_0.vtp, tmp.dump_1.vtp, ...
|
||||||
|
tmp.dump_P-1.vtp, etc. This creates smaller files and can be a fast
|
||||||
|
mode of output on parallel machines that support parallel I/O for output.
|
||||||
|
|
||||||
|
By default, P = the number of processors meaning one file per
|
||||||
|
processor, but P can be set to a smaller value via the {nfile} or
|
||||||
|
{fileper} keywords of the "dump_modify"_dump_modify.html command.
|
||||||
|
These options can be the most efficient way of writing out dump files
|
||||||
|
when running on large numbers of processors.
|
||||||
|
|
||||||
|
For the legacy VTK format "%" is ignored and P = 1, i.e., only
|
||||||
|
processor 0 does write files.
|
||||||
|
|
||||||
|
Note that using the "*" and "%" characters together can produce a
|
||||||
|
large number of small dump files!
|
||||||
|
|
||||||
|
If {dump_modify binary} is used, the dump file (or files, if "*" or
|
||||||
|
"%" is also used) is written in binary format. A binary dump file
|
||||||
|
will be about the same size as a text version, but will typically
|
||||||
|
write out much faster.
|
||||||
|
|
||||||
|
:line
|
||||||
|
|
||||||
|
[Restrictions:]
|
||||||
|
|
||||||
|
The {vtk} style does not support writing of gzipped dump files.
|
||||||
|
|
||||||
|
The {vtk} dump style is part of the USER-VTK 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.
|
||||||
|
|
||||||
|
To use this dump style, you also must link to the VTK library. See
|
||||||
|
the info in lib/vtk/README and insure the Makefile.lammps file in that
|
||||||
|
directory is appropriate for your machine.
|
||||||
|
|
||||||
|
The {vtk} dump style supports neither buffering or custom format
|
||||||
|
strings.
|
||||||
|
|
||||||
|
[Related commands:]
|
||||||
|
|
||||||
|
"dump"_dump.html, "dump image"_dump_image.html,
|
||||||
|
"dump_modify"_dump_modify.html, "undump"_undump.html
|
||||||
|
|
||||||
|
[Default:]
|
||||||
|
|
||||||
|
By default, files are written in ASCII format. If the file extension
|
||||||
|
is not one of .vtk, .vtp or .vtu, the legacy VTK file format is used.
|
||||||
|
|
||||||
@ -87,8 +87,11 @@ the note below about how to include the CMAP energy when performing an
|
|||||||
|
|
||||||
[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 writes the list of CMAP crossterms to "binary restart
|
||||||
files"_restart.html.
|
files"_restart.html. See the "read_restart"_read_restart.html command
|
||||||
|
for info on how to re-specify a fix in an input script that reads a
|
||||||
|
restart file, so that the operation of the fix continues in an
|
||||||
|
uninterrupted fashion.
|
||||||
|
|
||||||
The "fix_modify"_fix_modify.html {energy} option is supported by this
|
The "fix_modify"_fix_modify.html {energy} option is supported by this
|
||||||
fix to add the potential "energy" of the CMAP interactions system's
|
fix to add the potential "energy" of the CMAP interactions system's
|
||||||
|
|||||||
@ -317,7 +317,7 @@ solution is to start a new simulation after the equilibrium density
|
|||||||
has been reached.
|
has been reached.
|
||||||
|
|
||||||
With some pair_styles, such as "Buckingham"_pair_buck.html,
|
With some pair_styles, such as "Buckingham"_pair_buck.html,
|
||||||
"Born-Mayer-Huggins"_pair_born.html and "ReaxFF"_pair_reax_c.html, two
|
"Born-Mayer-Huggins"_pair_born.html and "ReaxFF"_pair_reaxc.html, two
|
||||||
atoms placed close to each other may have an arbitrary large, negative
|
atoms placed close to each other may have an arbitrary large, negative
|
||||||
potential energy due to the functional form of the potential. While
|
potential energy due to the functional form of the potential. While
|
||||||
these unphysical configurations are inaccessible to typical dynamical
|
these unphysical configurations are inaccessible to typical dynamical
|
||||||
|
|||||||
@ -74,7 +74,7 @@ NOTE: The "fix qeq/comb"_fix_qeq_comb.html command must still be used
|
|||||||
to perform charge equilibration with the "COMB
|
to perform charge equilibration with the "COMB
|
||||||
potential"_pair_comb.html. The "fix qeq/reax"_fix_qeq_reax.html
|
potential"_pair_comb.html. The "fix qeq/reax"_fix_qeq_reax.html
|
||||||
command can be used to perform charge equilibration with the "ReaxFF
|
command can be used to perform charge equilibration with the "ReaxFF
|
||||||
force field"_pair_reax_c.html, although fix qeq/shielded yields the
|
force field"_pair_reaxc.html, although fix qeq/shielded yields the
|
||||||
same results as fix qeq/reax if {Nevery}, {cutoff}, and {tolerance}
|
same results as fix qeq/reax if {Nevery}, {cutoff}, and {tolerance}
|
||||||
are the same. Eventually the fix qeq/reax command will be deprecated.
|
are the same. Eventually the fix qeq/reax command will be deprecated.
|
||||||
|
|
||||||
@ -116,7 +116,7 @@ the shielded Coulomb is given by equation (13) of the "ReaxFF force
|
|||||||
field"_#vanDuin paper. The shielding accounts for charge overlap
|
field"_#vanDuin paper. The shielding accounts for charge overlap
|
||||||
between charged particles at small separation. This style is the same
|
between charged particles at small separation. This style is the same
|
||||||
as "fix qeq/reax"_fix_qeq_reax.html, and can be used with "pair_style
|
as "fix qeq/reax"_fix_qeq_reax.html, and can be used with "pair_style
|
||||||
reax/c"_pair_reax_c.html. Only the {chi}, {eta}, and {gamma}
|
reax/c"_pair_reaxc.html. Only the {chi}, {eta}, and {gamma}
|
||||||
parameters from the {qfile} file are used. This style solves partial
|
parameters from the {qfile} file are used. This style solves partial
|
||||||
charges on atoms via the matrix inversion method. A tolerance of
|
charges on atoms via the matrix inversion method. A tolerance of
|
||||||
1.0e-6 is usually a good number.
|
1.0e-6 is usually a good number.
|
||||||
|
|||||||
@ -30,7 +30,7 @@ fix 1 all qeq/reax 1 0.0 10.0 1.0e-6 param.qeq :pre
|
|||||||
Perform the charge equilibration (QEq) method as described in "(Rappe
|
Perform the charge equilibration (QEq) method as described in "(Rappe
|
||||||
and Goddard)"_#Rappe2 and formulated in "(Nakano)"_#Nakano2. It is
|
and Goddard)"_#Rappe2 and formulated in "(Nakano)"_#Nakano2. It is
|
||||||
typically used in conjunction with the ReaxFF force field model as
|
typically used in conjunction with the ReaxFF force field model as
|
||||||
implemented in the "pair_style reax/c"_pair_reax_c.html command, but
|
implemented in the "pair_style reax/c"_pair_reaxc.html command, but
|
||||||
it can be used with any potential in LAMMPS, so long as it defines and
|
it can be used with any potential in LAMMPS, so long as it defines and
|
||||||
uses charges on each atom. The "fix qeq/comb"_fix_qeq_comb.html
|
uses charges on each atom. The "fix qeq/comb"_fix_qeq_comb.html
|
||||||
command should be used to perform charge equilibration with the "COMB
|
command should be used to perform charge equilibration with the "COMB
|
||||||
@ -42,7 +42,7 @@ The QEq method minimizes the electrostatic energy of the system by
|
|||||||
adjusting the partial charge on individual atoms based on interactions
|
adjusting the partial charge on individual atoms based on interactions
|
||||||
with their neighbors. It requires some parameters for each atom type.
|
with their neighbors. It requires some parameters for each atom type.
|
||||||
If the {params} setting above is the word "reax/c", then these are
|
If the {params} setting above is the word "reax/c", then these are
|
||||||
extracted from the "pair_style reax/c"_pair_reax_c.html command and
|
extracted from the "pair_style reax/c"_pair_reaxc.html command and
|
||||||
the ReaxFF force field file it reads in. If a file name is specified
|
the ReaxFF force field file it reads in. If a file name is specified
|
||||||
for {params}, then the parameters are taken from the specified file
|
for {params}, then the parameters are taken from the specified file
|
||||||
and the file must contain one line for each atom type. The latter
|
and the file must contain one line for each atom type. The latter
|
||||||
@ -106,7 +106,7 @@ be used for periodic cell dimensions less than 10 angstroms.
|
|||||||
|
|
||||||
[Related commands:]
|
[Related commands:]
|
||||||
|
|
||||||
"pair_style reax/c"_pair_reax_c.html
|
"pair_style reax/c"_pair_reaxc.html
|
||||||
|
|
||||||
[Default:] none
|
[Default:] none
|
||||||
|
|
||||||
|
|||||||
@ -28,7 +28,7 @@ fix 1 all reax/c/bonds 100 bonds.reaxc :pre
|
|||||||
|
|
||||||
Write out the bond information computed by the ReaxFF potential
|
Write out the bond information computed by the ReaxFF potential
|
||||||
specified by "pair_style reax"_pair_reax.html or "pair_style
|
specified by "pair_style reax"_pair_reax.html or "pair_style
|
||||||
reax/c"_pair_reax_c.html in the exact same format as the original
|
reax/c"_pair_reaxc.html in the exact same format as the original
|
||||||
stand-alone ReaxFF code of Adri van Duin. The bond information is
|
stand-alone ReaxFF code of Adri van Duin. The bond information is
|
||||||
written to {filename} on timesteps that are multiples of {Nevery},
|
written to {filename} on timesteps that are multiples of {Nevery},
|
||||||
including timestep 0. For time-averaged chemical species analysis,
|
including timestep 0. For time-averaged chemical species analysis,
|
||||||
@ -80,7 +80,7 @@ reax"_pair_reax.html be invoked. This fix is part of the REAX
|
|||||||
package. It is only enabled if LAMMPS was built with that package,
|
package. It is only enabled if LAMMPS was built with that package,
|
||||||
which also requires the REAX library be built and linked with LAMMPS.
|
which also requires the REAX library be built and linked with LAMMPS.
|
||||||
The fix reax/c/bonds command requires that the "pair_style
|
The fix reax/c/bonds command requires that the "pair_style
|
||||||
reax/c"_pair_reax_c.html be invoked. This fix is part of the
|
reax/c"_pair_reaxc.html be invoked. This fix is part of the
|
||||||
USER-REAXC package. It is only enabled if LAMMPS was built with that
|
USER-REAXC package. It is only enabled if LAMMPS was built with that
|
||||||
package. See the "Making LAMMPS"_Section_start.html#start_3 section
|
package. See the "Making LAMMPS"_Section_start.html#start_3 section
|
||||||
for more info.
|
for more info.
|
||||||
@ -88,6 +88,6 @@ for more info.
|
|||||||
[Related commands:]
|
[Related commands:]
|
||||||
|
|
||||||
"pair_style reax"_pair_reax.html, "pair_style
|
"pair_style reax"_pair_reax.html, "pair_style
|
||||||
reax/c"_pair_reax_c.html, "fix reax/c/species"_fix_reaxc_species.html
|
reax/c"_pair_reaxc.html, "fix reax/c/species"_fix_reaxc_species.html
|
||||||
|
|
||||||
[Default:] none
|
[Default:] none
|
||||||
|
|||||||
@ -41,7 +41,7 @@ fix 1 all reax/c/species 1 100 100 species.out element Au O H position 1000 AuOH
|
|||||||
[Description:]
|
[Description:]
|
||||||
|
|
||||||
Write out the chemical species information computed by the ReaxFF
|
Write out the chemical species information computed by the ReaxFF
|
||||||
potential specified by "pair_style reax/c"_pair_reax_c.html.
|
potential specified by "pair_style reax/c"_pair_reaxc.html.
|
||||||
Bond-order values (either averaged or instantaneous, depending on
|
Bond-order values (either averaged or instantaneous, depending on
|
||||||
value of {Nrepeat}) are used to determine chemical bonds. Every
|
value of {Nrepeat}) are used to determine chemical bonds. Every
|
||||||
{Nfreq} timesteps, chemical species information is written to
|
{Nfreq} timesteps, chemical species information is written to
|
||||||
@ -65,7 +65,7 @@ symbol printed for each LAMMPS atom type. The number of symbols must
|
|||||||
match the number of LAMMPS atom types and each symbol must consist of
|
match the number of LAMMPS atom types and each symbol must consist of
|
||||||
1 or 2 alphanumeric characters. Normally, these symbols should be
|
1 or 2 alphanumeric characters. Normally, these symbols should be
|
||||||
chosen to match the chemical identity of each LAMMPS atom type, as
|
chosen to match the chemical identity of each LAMMPS atom type, as
|
||||||
specified using the "reax/c pair_coeff"_pair_reax_c.html command and
|
specified using the "reax/c pair_coeff"_pair_reaxc.html command and
|
||||||
the ReaxFF force field file.
|
the ReaxFF force field file.
|
||||||
|
|
||||||
The optional keyword {position} writes center-of-mass positions of
|
The optional keyword {position} writes center-of-mass positions of
|
||||||
@ -158,8 +158,8 @@ more instructions on how to use the accelerated styles effectively.
|
|||||||
[Restrictions:]
|
[Restrictions:]
|
||||||
|
|
||||||
The fix species currently only works with
|
The fix species currently only works with
|
||||||
"pair_style reax/c"_pair_reax_c.html and it requires that the "pair_style
|
"pair_style reax/c"_pair_reaxc.html and it requires that the "pair_style
|
||||||
reax/c"_pair_reax_c.html be invoked. This fix is part of the
|
reax/c"_pair_reaxc.html be invoked. This fix is part of the
|
||||||
USER-REAXC package. It is only enabled if LAMMPS was built with that
|
USER-REAXC package. It is only enabled if LAMMPS was built with that
|
||||||
package. See the "Making LAMMPS"_Section_start.html#start_3 section
|
package. See the "Making LAMMPS"_Section_start.html#start_3 section
|
||||||
for more info.
|
for more info.
|
||||||
@ -170,7 +170,7 @@ It should be possible to extend it to other reactive pair_styles (such as
|
|||||||
|
|
||||||
[Related commands:]
|
[Related commands:]
|
||||||
|
|
||||||
"pair_style reax/c"_pair_reax_c.html, "fix
|
"pair_style reax/c"_pair_reaxc.html, "fix
|
||||||
reax/bonds"_fix_reax_bonds.html
|
reax/bonds"_fix_reax_bonds.html
|
||||||
|
|
||||||
[Default:]
|
[Default:]
|
||||||
|
|||||||
@ -469,7 +469,7 @@ pair_peri.html
|
|||||||
pair_polymorphic.html
|
pair_polymorphic.html
|
||||||
pair_quip.html
|
pair_quip.html
|
||||||
pair_reax.html
|
pair_reax.html
|
||||||
pair_reax_c.html
|
pair_reaxc.html
|
||||||
pair_resquared.html
|
pair_resquared.html
|
||||||
pair_sdk.html
|
pair_sdk.html
|
||||||
pair_smd_hertz.html
|
pair_smd_hertz.html
|
||||||
|
|||||||
@ -73,7 +73,7 @@ pair_coeff command to assign parameters for the different type pairs.
|
|||||||
NOTE: There are two exceptions to this option to list an individual
|
NOTE: There are two exceptions to this option to list an individual
|
||||||
pair style multiple times. The first is for pair styles implemented
|
pair style multiple times. The first is for pair styles implemented
|
||||||
as Fortran libraries: "pair_style meam"_pair_meam.html and "pair_style
|
as Fortran libraries: "pair_style meam"_pair_meam.html and "pair_style
|
||||||
reax"_pair_reax.html ("pair_style reax/c"_pair_reax_c.html is OK).
|
reax"_pair_reax.html ("pair_style reax/c"_pair_reaxc.html is OK).
|
||||||
This is because unlike a C++ class, they can not be instantiated
|
This is because unlike a C++ class, they can not be instantiated
|
||||||
multiple times, due to the manner in which they were coded in Fortran.
|
multiple times, due to the manner in which they were coded in Fortran.
|
||||||
The second is for GPU-enabled pair styles in the GPU package. This is
|
The second is for GPU-enabled pair styles in the GPU package. This is
|
||||||
|
|||||||
@ -36,7 +36,7 @@ supplemental information of the following paper:
|
|||||||
the most up-to-date version of ReaxFF as of summer 2010.
|
the most up-to-date version of ReaxFF as of summer 2010.
|
||||||
|
|
||||||
WARNING: pair style reax is now deprecated and will soon be retired. Users
|
WARNING: pair style reax is now deprecated and will soon be retired. Users
|
||||||
should switch to "pair_style reax/c"_pair_reax_c.html. The {reax} style
|
should switch to "pair_style reax/c"_pair_reaxc.html. The {reax} style
|
||||||
differs from the {reax/c} style in the lo-level implementation details.
|
differs from the {reax/c} style in the lo-level implementation details.
|
||||||
The {reax} style is a
|
The {reax} style is a
|
||||||
Fortran library, linked to LAMMPS. The {reax/c} style was initially
|
Fortran library, linked to LAMMPS. The {reax/c} style was initially
|
||||||
@ -82,7 +82,7 @@ be specified.
|
|||||||
|
|
||||||
Two examples using {pair_style reax} are provided in the examples/reax
|
Two examples using {pair_style reax} are provided in the examples/reax
|
||||||
sub-directory, along with corresponding examples for
|
sub-directory, along with corresponding examples for
|
||||||
"pair_style reax/c"_pair_reax_c.html. Note that while the energy and force
|
"pair_style reax/c"_pair_reaxc.html. Note that while the energy and force
|
||||||
calculated by both of these pair styles match very closely, the
|
calculated by both of these pair styles match very closely, the
|
||||||
contributions due to the valence angles differ slightly due to
|
contributions due to the valence angles differ slightly due to
|
||||||
the fact that with {pair_style reax/c} the default value of {thb_cutoff_sq}
|
the fact that with {pair_style reax/c} the default value of {thb_cutoff_sq}
|
||||||
@ -201,7 +201,7 @@ appropriate units if your simulation doesn't use "real" units.
|
|||||||
|
|
||||||
[Related commands:]
|
[Related commands:]
|
||||||
|
|
||||||
"pair_coeff"_pair_coeff.html, "pair_style reax/c"_pair_reax_c.html,
|
"pair_coeff"_pair_coeff.html, "pair_style reax/c"_pair_reaxc.html,
|
||||||
"fix_reax_bonds"_fix_reax_bonds.html
|
"fix_reax_bonds"_fix_reax_bonds.html
|
||||||
|
|
||||||
[Default:]
|
[Default:]
|
||||||
|
|||||||
@ -17,6 +17,7 @@ cfile = NULL or name of a control file :ulb,l
|
|||||||
zero or more keyword/value pairs may be appended :l
|
zero or more keyword/value pairs may be appended :l
|
||||||
keyword = {checkqeq} or {lgvdw} or {safezone} or {mincap}
|
keyword = {checkqeq} or {lgvdw} or {safezone} or {mincap}
|
||||||
{checkqeq} value = {yes} or {no} = whether or not to require qeq/reax fix
|
{checkqeq} value = {yes} or {no} = whether or not to require qeq/reax fix
|
||||||
|
{enobonds} value = {yes} or {no} = whether or not to tally energy of atoms with no bonds
|
||||||
{lgvdw} value = {yes} or {no} = whether or not to use a low gradient vdW correction
|
{lgvdw} value = {yes} or {no} = whether or not to use a low gradient vdW correction
|
||||||
{safezone} = factor used for array allocation
|
{safezone} = factor used for array allocation
|
||||||
{mincap} = minimum size for array allocation :pre
|
{mincap} = minimum size for array allocation :pre
|
||||||
@ -127,6 +128,13 @@ recommended value for parameter {thb} is 0.01, which can be set in the
|
|||||||
control file. Note: Force field files are different for the original
|
control file. Note: Force field files are different for the original
|
||||||
or lg corrected pair styles, using wrong ffield file generates an error message.
|
or lg corrected pair styles, using wrong ffield file generates an error message.
|
||||||
|
|
||||||
|
Using the optional keyword {enobonds} with the value {yes}, the energy
|
||||||
|
of atoms with no bonds (i.e. isolated atoms) is included in the total
|
||||||
|
potential energy and the per-atom energy of that atom. If the value
|
||||||
|
{no} is specified then the energy of atoms with no bonds is set to zero.
|
||||||
|
The latter behavior is usual not desired, as it causes discontinuities
|
||||||
|
in the potential energy when the bonding of an atom drops to zero.
|
||||||
|
|
||||||
Optional keywords {safezone} and {mincap} are used for allocating
|
Optional keywords {safezone} and {mincap} are used for allocating
|
||||||
reax/c arrays. Increasing these values can avoid memory problems, such
|
reax/c arrays. Increasing these values can avoid memory problems, such
|
||||||
as segmentation faults and bondchk failed errors, that could occur under
|
as segmentation faults and bondchk failed errors, that could occur under
|
||||||
@ -331,7 +339,7 @@ reax"_pair_reax.html
|
|||||||
|
|
||||||
[Default:]
|
[Default:]
|
||||||
|
|
||||||
The keyword defaults are checkqeq = yes, lgvdw = no, safezone = 1.2,
|
The keyword defaults are checkqeq = yes, enobonds = yes, lgvdw = no, safezone = 1.2,
|
||||||
mincap = 50.
|
mincap = 50.
|
||||||
|
|
||||||
:line
|
:line
|
||||||
@ -73,7 +73,7 @@ Pair Styles :h1
|
|||||||
pair_polymorphic
|
pair_polymorphic
|
||||||
pair_quip
|
pair_quip
|
||||||
pair_reax
|
pair_reax
|
||||||
pair_reax_c
|
pair_reaxc
|
||||||
pair_resquared
|
pair_resquared
|
||||||
pair_sdk
|
pair_sdk
|
||||||
pair_smd_hertz
|
pair_smd_hertz
|
||||||
|
|||||||
145
examples/mscg/log.31Mar17.g++.1
Normal file
145
examples/mscg/log.31Mar17.g++.1
Normal file
@ -0,0 +1,145 @@
|
|||||||
|
LAMMPS (13 Apr 2017)
|
||||||
|
units real
|
||||||
|
atom_style full
|
||||||
|
pair_style zero 10.0
|
||||||
|
|
||||||
|
read_data data.meoh
|
||||||
|
orthogonal box = (-20.6917 -20.6917 -20.6917) to (20.6917 20.6917 20.6917)
|
||||||
|
1 by 1 by 1 MPI processor grid
|
||||||
|
reading atoms ...
|
||||||
|
1000 atoms
|
||||||
|
0 = max # of 1-2 neighbors
|
||||||
|
0 = max # of 1-3 neighbors
|
||||||
|
0 = max # of 1-4 neighbors
|
||||||
|
1 = max # of special neighbors
|
||||||
|
pair_coeff * *
|
||||||
|
|
||||||
|
thermo 1
|
||||||
|
thermo_style custom step
|
||||||
|
|
||||||
|
# Test 1a: range finder functionality
|
||||||
|
fix 1 all mscg 1 range on
|
||||||
|
rerun dump.meoh first 0 last 4500 every 250 dump x y z fx fy fz
|
||||||
|
Neighbor list info ...
|
||||||
|
update every 1 steps, delay 10 steps, check yes
|
||||||
|
max neighbors/atom: 2000, page size: 100000
|
||||||
|
master list distance cutoff = 12
|
||||||
|
ghost atom cutoff = 12
|
||||||
|
binsize = 6, bins = 7 7 7
|
||||||
|
1 neighbor lists, perpetual/occasional/extra = 1 0 0
|
||||||
|
(1) pair zero, perpetual
|
||||||
|
attributes: half, newton on
|
||||||
|
pair build: half/bin/newton
|
||||||
|
stencil: half/bin/3d/newton
|
||||||
|
bin: standard
|
||||||
|
Per MPI rank memory allocation (min/avg/max) = 5.794 | 5.794 | 5.794 Mbytes
|
||||||
|
Step
|
||||||
|
0
|
||||||
|
250
|
||||||
|
500
|
||||||
|
750
|
||||||
|
1000
|
||||||
|
1250
|
||||||
|
1500
|
||||||
|
1750
|
||||||
|
2000
|
||||||
|
2250
|
||||||
|
2500
|
||||||
|
2750
|
||||||
|
3000
|
||||||
|
3250
|
||||||
|
3500
|
||||||
|
3750
|
||||||
|
4000
|
||||||
|
4250
|
||||||
|
4500
|
||||||
|
Loop time of 0.581537 on 1 procs for 19 steps with 1000 atoms
|
||||||
|
|
||||||
|
Performance: 2.823 ns/day, 8.502 hours/ns, 32.672 timesteps/s
|
||||||
|
99.2% CPU use with 1 MPI tasks x no OpenMP threads
|
||||||
|
|
||||||
|
MPI task timing breakdown:
|
||||||
|
Section | min time | avg time | max time |%varavg| %total
|
||||||
|
---------------------------------------------------------------
|
||||||
|
Pair | 0 | 0 | 0 | 0.0 | 0.00
|
||||||
|
Bond | 0 | 0 | 0 | 0.0 | 0.00
|
||||||
|
Neigh | 0 | 0 | 0 | 0.0 | 0.00
|
||||||
|
Comm | 0 | 0 | 0 | 0.0 | 0.00
|
||||||
|
Output | 0 | 0 | 0 | 0.0 | 0.00
|
||||||
|
Modify | 0 | 0 | 0 | 0.0 | 0.00
|
||||||
|
Other | | 0.5815 | | |100.00
|
||||||
|
|
||||||
|
Nlocal: 1000 ave 1000 max 1000 min
|
||||||
|
Histogram: 1 0 0 0 0 0 0 0 0 0
|
||||||
|
Nghost: 2934 ave 2934 max 2934 min
|
||||||
|
Histogram: 1 0 0 0 0 0 0 0 0 0
|
||||||
|
Neighs: 50654 ave 50654 max 50654 min
|
||||||
|
Histogram: 1 0 0 0 0 0 0 0 0 0
|
||||||
|
|
||||||
|
Total # of neighbors = 50654
|
||||||
|
Ave neighs/atom = 50.654
|
||||||
|
Ave special neighs/atom = 0
|
||||||
|
Neighbor list builds = 0
|
||||||
|
Dangerous builds = 0
|
||||||
|
print "TEST_1a mscg range finder"
|
||||||
|
TEST_1a mscg range finder
|
||||||
|
unfix 1
|
||||||
|
|
||||||
|
# Test 1b: force matching functionality
|
||||||
|
fix 1 all mscg 1
|
||||||
|
rerun dump.meoh first 0 last 4500 every 250 dump x y z fx fy fz
|
||||||
|
Per MPI rank memory allocation (min/avg/max) = 5.794 | 5.794 | 5.794 Mbytes
|
||||||
|
Step
|
||||||
|
0
|
||||||
|
250
|
||||||
|
500
|
||||||
|
750
|
||||||
|
1000
|
||||||
|
1250
|
||||||
|
1500
|
||||||
|
1750
|
||||||
|
2000
|
||||||
|
2250
|
||||||
|
2500
|
||||||
|
2750
|
||||||
|
3000
|
||||||
|
3250
|
||||||
|
3500
|
||||||
|
3750
|
||||||
|
4000
|
||||||
|
4250
|
||||||
|
4500
|
||||||
|
Loop time of 0.841917 on 1 procs for 19 steps with 1000 atoms
|
||||||
|
|
||||||
|
Performance: 1.950 ns/day, 12.309 hours/ns, 22.568 timesteps/s
|
||||||
|
99.8% CPU use with 1 MPI tasks x no OpenMP threads
|
||||||
|
|
||||||
|
MPI task timing breakdown:
|
||||||
|
Section | min time | avg time | max time |%varavg| %total
|
||||||
|
---------------------------------------------------------------
|
||||||
|
Pair | 0 | 0 | 0 | 0.0 | 0.00
|
||||||
|
Bond | 0 | 0 | 0 | 0.0 | 0.00
|
||||||
|
Neigh | 0 | 0 | 0 | 0.0 | 0.00
|
||||||
|
Comm | 0 | 0 | 0 | 0.0 | 0.00
|
||||||
|
Output | 0 | 0 | 0 | 0.0 | 0.00
|
||||||
|
Modify | 0 | 0 | 0 | 0.0 | 0.00
|
||||||
|
Other | | 0.8419 | | |100.00
|
||||||
|
|
||||||
|
Nlocal: 1000 ave 1000 max 1000 min
|
||||||
|
Histogram: 1 0 0 0 0 0 0 0 0 0
|
||||||
|
Nghost: 2934 ave 2934 max 2934 min
|
||||||
|
Histogram: 1 0 0 0 0 0 0 0 0 0
|
||||||
|
Neighs: 50654 ave 50654 max 50654 min
|
||||||
|
Histogram: 1 0 0 0 0 0 0 0 0 0
|
||||||
|
|
||||||
|
Total # of neighbors = 50654
|
||||||
|
Ave neighs/atom = 50.654
|
||||||
|
Ave special neighs/atom = 0
|
||||||
|
Neighbor list builds = 0
|
||||||
|
Dangerous builds = 0
|
||||||
|
print "TEST_1b mscg force matching"
|
||||||
|
TEST_1b mscg force matching
|
||||||
|
|
||||||
|
print TEST_DONE
|
||||||
|
TEST_DONE
|
||||||
|
Total wall time: 0:00:01
|
||||||
82
lib/Install.py
Normal file
82
lib/Install.py
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
# install.py tool to do a generic build of a library
|
||||||
|
# soft linked to by many of the lib/Install.py files
|
||||||
|
# used to automate the steps described in the corresponding lib/README
|
||||||
|
|
||||||
|
import sys,commands,os
|
||||||
|
|
||||||
|
# help message
|
||||||
|
|
||||||
|
help = """
|
||||||
|
Syntax: python Install.py -m machine -e suffix
|
||||||
|
specify -m and optionally -e, order does not matter
|
||||||
|
-m = peform a clean followed by "make -f Makefile.machine"
|
||||||
|
machine = suffix of a lib/Makefile.* file
|
||||||
|
-e = set EXTRAMAKE variable in Makefile.machine to Makefile.lammps.suffix
|
||||||
|
does not alter existing Makefile.machine
|
||||||
|
"""
|
||||||
|
|
||||||
|
# print error message or help
|
||||||
|
|
||||||
|
def error(str=None):
|
||||||
|
if not str: print help
|
||||||
|
else: print "ERROR",str
|
||||||
|
sys.exit()
|
||||||
|
|
||||||
|
# parse args
|
||||||
|
|
||||||
|
args = sys.argv[1:]
|
||||||
|
nargs = len(args)
|
||||||
|
if nargs == 0: error()
|
||||||
|
|
||||||
|
machine = None
|
||||||
|
extraflag = 0
|
||||||
|
|
||||||
|
iarg = 0
|
||||||
|
while iarg < nargs:
|
||||||
|
if args[iarg] == "-m":
|
||||||
|
if iarg+2 > nargs: error()
|
||||||
|
machine = args[iarg+1]
|
||||||
|
iarg += 2
|
||||||
|
elif args[iarg] == "-e":
|
||||||
|
if iarg+2 > nargs: error()
|
||||||
|
extraflag = 1
|
||||||
|
suffix = args[iarg+1]
|
||||||
|
iarg += 2
|
||||||
|
else: error()
|
||||||
|
|
||||||
|
# set lib from working dir
|
||||||
|
|
||||||
|
cwd = os.getcwd()
|
||||||
|
lib = os.path.basename(cwd)
|
||||||
|
|
||||||
|
# create Makefile.auto as copy of Makefile.machine
|
||||||
|
# reset EXTRAMAKE if requested
|
||||||
|
|
||||||
|
if not os.path.exists("Makefile.%s" % machine):
|
||||||
|
error("lib/%s/Makefile.%s does not exist" % (lib,machine))
|
||||||
|
|
||||||
|
lines = open("Makefile.%s" % machine,'r').readlines()
|
||||||
|
fp = open("Makefile.auto",'w')
|
||||||
|
|
||||||
|
for line in lines:
|
||||||
|
words = line.split()
|
||||||
|
if len(words) == 3 and extraflag and \
|
||||||
|
words[0] == "EXTRAMAKE" and words[1] == '=':
|
||||||
|
line = line.replace(words[2],"Makefile.lammps.%s" % suffix)
|
||||||
|
print >>fp,line,
|
||||||
|
|
||||||
|
fp.close()
|
||||||
|
|
||||||
|
# make the library via Makefile.auto
|
||||||
|
|
||||||
|
print "Building lib%s.a ..." % lib
|
||||||
|
cmd = "make -f Makefile.auto clean; make -f Makefile.auto"
|
||||||
|
txt = commands.getoutput(cmd)
|
||||||
|
print txt
|
||||||
|
|
||||||
|
if os.path.exists("lib%s.a" % lib): print "Build was successful"
|
||||||
|
else: error("Build of lib/%s/lib%s.a was NOT successful" % (lib,lib))
|
||||||
|
if not os.path.exists("Makefile.lammps"):
|
||||||
|
print "lib/%s/Makefile.lammps was NOT created" % lib
|
||||||
@ -33,14 +33,16 @@ kokkos Kokkos package for GPU and many-core acceleration
|
|||||||
from Kokkos development team (Sandia)
|
from Kokkos development team (Sandia)
|
||||||
linalg set of BLAS and LAPACK routines needed by USER-ATC package
|
linalg set of BLAS and LAPACK routines needed by USER-ATC package
|
||||||
from Axel Kohlmeyer (Temple U)
|
from Axel Kohlmeyer (Temple U)
|
||||||
poems POEMS rigid-body integration package, POEMS package
|
|
||||||
from Rudranarayan Mukherjee (RPI)
|
|
||||||
meam modified embedded atom method (MEAM) potential, MEAM package
|
meam modified embedded atom method (MEAM) potential, MEAM package
|
||||||
from Greg Wagner (Sandia)
|
from Greg Wagner (Sandia)
|
||||||
molfile hooks to VMD molfile plugins, used by the USER-MOLFILE package
|
molfile hooks to VMD molfile plugins, used by the USER-MOLFILE package
|
||||||
from Axel Kohlmeyer (Temple U) and the VMD development team
|
from Axel Kohlmeyer (Temple U) and the VMD development team
|
||||||
mscg hooks to the MSCG library, used by fix_mscg command
|
mscg hooks to the MSCG library, used by fix_mscg command
|
||||||
from Jacob Wagner and Greg Voth group (U Chicago)
|
from Jacob Wagner and Greg Voth group (U Chicago)
|
||||||
|
netcdf hooks to a NetCDF library installed on your system
|
||||||
|
from Lars Pastewka (Karlsruhe Institute of Technology)
|
||||||
|
poems POEMS rigid-body integration package, POEMS package
|
||||||
|
from Rudranarayan Mukherjee (RPI)
|
||||||
python hooks to the system Python library, used by the PYTHON package
|
python hooks to the system Python library, used by the PYTHON package
|
||||||
from the LAMMPS development team
|
from the LAMMPS development team
|
||||||
qmmm quantum mechanics/molecular mechanics coupling interface
|
qmmm quantum mechanics/molecular mechanics coupling interface
|
||||||
|
|||||||
82
lib/atc/Install.py
Normal file
82
lib/atc/Install.py
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
# install.py tool to do a generic build of a library
|
||||||
|
# soft linked to by many of the lib/Install.py files
|
||||||
|
# used to automate the steps described in the corresponding lib/README
|
||||||
|
|
||||||
|
import sys,commands,os
|
||||||
|
|
||||||
|
# help message
|
||||||
|
|
||||||
|
help = """
|
||||||
|
Syntax: python Install.py -m machine -e suffix
|
||||||
|
specify -m and optionally -e, order does not matter
|
||||||
|
-m = peform a clean followed by "make -f Makefile.machine"
|
||||||
|
machine = suffix of a lib/Makefile.* file
|
||||||
|
-e = set EXTRAMAKE variable in Makefile.machine to Makefile.lammps.suffix
|
||||||
|
does not alter existing Makefile.machine
|
||||||
|
"""
|
||||||
|
|
||||||
|
# print error message or help
|
||||||
|
|
||||||
|
def error(str=None):
|
||||||
|
if not str: print help
|
||||||
|
else: print "ERROR",str
|
||||||
|
sys.exit()
|
||||||
|
|
||||||
|
# parse args
|
||||||
|
|
||||||
|
args = sys.argv[1:]
|
||||||
|
nargs = len(args)
|
||||||
|
if nargs == 0: error()
|
||||||
|
|
||||||
|
machine = None
|
||||||
|
extraflag = 0
|
||||||
|
|
||||||
|
iarg = 0
|
||||||
|
while iarg < nargs:
|
||||||
|
if args[iarg] == "-m":
|
||||||
|
if iarg+2 > nargs: error()
|
||||||
|
machine = args[iarg+1]
|
||||||
|
iarg += 2
|
||||||
|
elif args[iarg] == "-e":
|
||||||
|
if iarg+2 > nargs: error()
|
||||||
|
extraflag = 1
|
||||||
|
suffix = args[iarg+1]
|
||||||
|
iarg += 2
|
||||||
|
else: error()
|
||||||
|
|
||||||
|
# set lib from working dir
|
||||||
|
|
||||||
|
cwd = os.getcwd()
|
||||||
|
lib = os.path.basename(cwd)
|
||||||
|
|
||||||
|
# create Makefile.auto as copy of Makefile.machine
|
||||||
|
# reset EXTRAMAKE if requested
|
||||||
|
|
||||||
|
if not os.path.exists("Makefile.%s" % machine):
|
||||||
|
error("lib/%s/Makefile.%s does not exist" % (lib,machine))
|
||||||
|
|
||||||
|
lines = open("Makefile.%s" % machine,'r').readlines()
|
||||||
|
fp = open("Makefile.auto",'w')
|
||||||
|
|
||||||
|
for line in lines:
|
||||||
|
words = line.split()
|
||||||
|
if len(words) == 3 and extraflag and \
|
||||||
|
words[0] == "EXTRAMAKE" and words[1] == '=':
|
||||||
|
line = line.replace(words[2],"Makefile.lammps.%s" % suffix)
|
||||||
|
print >>fp,line,
|
||||||
|
|
||||||
|
fp.close()
|
||||||
|
|
||||||
|
# make the library via Makefile.auto
|
||||||
|
|
||||||
|
print "Building lib%s.a ..." % lib
|
||||||
|
cmd = "make -f Makefile.auto clean; make -f Makefile.auto"
|
||||||
|
txt = commands.getoutput(cmd)
|
||||||
|
print txt
|
||||||
|
|
||||||
|
if os.path.exists("lib%s.a" % lib): print "Build was successful"
|
||||||
|
else: error("Build of lib/%s/lib%s.a was NOT successful" % (lib,lib))
|
||||||
|
if not os.path.exists("Makefile.lammps"):
|
||||||
|
print "lib/%s/Makefile.lammps was NOT created" % lib
|
||||||
@ -15,6 +15,11 @@ links against when using the USER-ATC package.
|
|||||||
This library must be built with a C++ compiler, before LAMMPS is
|
This library must be built with a C++ compiler, before LAMMPS is
|
||||||
built, so LAMMPS can link against it.
|
built, so LAMMPS can link against it.
|
||||||
|
|
||||||
|
You can type "make lib-atc" from the src directory to see help on how
|
||||||
|
to build this library via make commands, or you can do the same thing
|
||||||
|
by typing "python Install.py" from within this directory, or you can
|
||||||
|
do it manually by following the instructions below.
|
||||||
|
|
||||||
Build the library using one of the provided Makefile.* files or create
|
Build the library using one of the provided Makefile.* files or create
|
||||||
your own, specific to your compiler and system. For example:
|
your own, specific to your compiler and system. For example:
|
||||||
|
|
||||||
@ -44,16 +49,16 @@ user-atc_SYSINC = leave blank for this package
|
|||||||
user-atc_SYSLIB = BLAS and LAPACK libraries needed by this package
|
user-atc_SYSLIB = BLAS and LAPACK libraries needed by this package
|
||||||
user-atc_SYSPATH = path(s) to where those libraries are
|
user-atc_SYSPATH = path(s) to where those libraries are
|
||||||
|
|
||||||
You have several choices for these settings:
|
You have 3 choices for these settings:
|
||||||
|
|
||||||
If the 2 libraries are already installed on your system, the settings
|
a) If the 2 libraries are already installed on your system, the
|
||||||
in Makefile.lammps.installed should work.
|
settings in Makefile.lammps.installed should work.
|
||||||
|
|
||||||
If they are not, you can install them yourself, and speficy the
|
b) If they are not, you can install them yourself, and specify the
|
||||||
appropriate settings accordingly.
|
appropriate settings accordingly in a Makefile.lammps.* file
|
||||||
|
and set the EXTRAMAKE setting in Makefile.* to that file.
|
||||||
|
|
||||||
If you want to use the minimalist version of these libraries provided
|
c) Use the minimalist version of these libraries provided with LAMMPS
|
||||||
with LAMMPS in lib/linalg, then the settings in Makefile.lammps.linalg
|
in lib/linalg, by using Makefile.lammps.linalg. In this case you also
|
||||||
should work. Note that in this case you also need to build the
|
need to build the library in lib/linalg; see the lib/linalg/README
|
||||||
linear-algebra in lib/linalg; see the lib/linalg/README for more
|
file for more details.
|
||||||
details.
|
|
||||||
|
|||||||
82
lib/awpmd/Install.py
Normal file
82
lib/awpmd/Install.py
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
# install.py tool to do a generic build of a library
|
||||||
|
# soft linked to by many of the lib/Install.py files
|
||||||
|
# used to automate the steps described in the corresponding lib/README
|
||||||
|
|
||||||
|
import sys,commands,os
|
||||||
|
|
||||||
|
# help message
|
||||||
|
|
||||||
|
help = """
|
||||||
|
Syntax: python Install.py -m machine -e suffix
|
||||||
|
specify -m and optionally -e, order does not matter
|
||||||
|
-m = peform a clean followed by "make -f Makefile.machine"
|
||||||
|
machine = suffix of a lib/Makefile.* file
|
||||||
|
-e = set EXTRAMAKE variable in Makefile.machine to Makefile.lammps.suffix
|
||||||
|
does not alter existing Makefile.machine
|
||||||
|
"""
|
||||||
|
|
||||||
|
# print error message or help
|
||||||
|
|
||||||
|
def error(str=None):
|
||||||
|
if not str: print help
|
||||||
|
else: print "ERROR",str
|
||||||
|
sys.exit()
|
||||||
|
|
||||||
|
# parse args
|
||||||
|
|
||||||
|
args = sys.argv[1:]
|
||||||
|
nargs = len(args)
|
||||||
|
if nargs == 0: error()
|
||||||
|
|
||||||
|
machine = None
|
||||||
|
extraflag = 0
|
||||||
|
|
||||||
|
iarg = 0
|
||||||
|
while iarg < nargs:
|
||||||
|
if args[iarg] == "-m":
|
||||||
|
if iarg+2 > nargs: error()
|
||||||
|
machine = args[iarg+1]
|
||||||
|
iarg += 2
|
||||||
|
elif args[iarg] == "-e":
|
||||||
|
if iarg+2 > nargs: error()
|
||||||
|
extraflag = 1
|
||||||
|
suffix = args[iarg+1]
|
||||||
|
iarg += 2
|
||||||
|
else: error()
|
||||||
|
|
||||||
|
# set lib from working dir
|
||||||
|
|
||||||
|
cwd = os.getcwd()
|
||||||
|
lib = os.path.basename(cwd)
|
||||||
|
|
||||||
|
# create Makefile.auto as copy of Makefile.machine
|
||||||
|
# reset EXTRAMAKE if requested
|
||||||
|
|
||||||
|
if not os.path.exists("Makefile.%s" % machine):
|
||||||
|
error("lib/%s/Makefile.%s does not exist" % (lib,machine))
|
||||||
|
|
||||||
|
lines = open("Makefile.%s" % machine,'r').readlines()
|
||||||
|
fp = open("Makefile.auto",'w')
|
||||||
|
|
||||||
|
for line in lines:
|
||||||
|
words = line.split()
|
||||||
|
if len(words) == 3 and extraflag and \
|
||||||
|
words[0] == "EXTRAMAKE" and words[1] == '=':
|
||||||
|
line = line.replace(words[2],"Makefile.lammps.%s" % suffix)
|
||||||
|
print >>fp,line,
|
||||||
|
|
||||||
|
fp.close()
|
||||||
|
|
||||||
|
# make the library via Makefile.auto
|
||||||
|
|
||||||
|
print "Building lib%s.a ..." % lib
|
||||||
|
cmd = "make -f Makefile.auto clean; make -f Makefile.auto"
|
||||||
|
txt = commands.getoutput(cmd)
|
||||||
|
print txt
|
||||||
|
|
||||||
|
if os.path.exists("lib%s.a" % lib): print "Build was successful"
|
||||||
|
else: error("Build of lib/%s/lib%s.a was NOT successful" % (lib,lib))
|
||||||
|
if not os.path.exists("Makefile.lammps"):
|
||||||
|
print "lib/%s/Makefile.lammps was NOT created" % lib
|
||||||
@ -19,6 +19,11 @@ links against when using the USER-AWPMD package.
|
|||||||
This library must be built with a C++ compiler, before LAMMPS is
|
This library must be built with a C++ compiler, before LAMMPS is
|
||||||
built, so LAMMPS can link against it.
|
built, so LAMMPS can link against it.
|
||||||
|
|
||||||
|
You can type "make lib-awpmd" from the src directory to see help on
|
||||||
|
how to build this library via make commands, or you can do the same
|
||||||
|
thing by typing "python Install.py" from within this directory, or you
|
||||||
|
can do it manually by following the instructions below.
|
||||||
|
|
||||||
Build the library using one of the provided Makefile.* files or create
|
Build the library using one of the provided Makefile.* files or create
|
||||||
your own, specific to your compiler and system. For example:
|
your own, specific to your compiler and system. For example:
|
||||||
|
|
||||||
@ -47,16 +52,16 @@ user-awpmd_SYSINC = leave blank for this package
|
|||||||
user-awpmd_SYSLIB = BLAS and LAPACK libraries needed by this package
|
user-awpmd_SYSLIB = BLAS and LAPACK libraries needed by this package
|
||||||
user-awpmd_SYSPATH = path(s) to where those libraries are
|
user-awpmd_SYSPATH = path(s) to where those libraries are
|
||||||
|
|
||||||
You have several choices for these settings:
|
You have 3 choices for these settings:
|
||||||
|
|
||||||
If the 2 libraries are already installed on your system, the settings
|
a) If the 2 libraries are already installed on your system, the
|
||||||
in Makefile.lammps.installed should work.
|
settings in Makefile.lammps.installed should work.
|
||||||
|
|
||||||
If they are not, you can install them yourself, and speficy the
|
b) If they are not, you can install them yourself, and specify the
|
||||||
appropriate settings accordingly.
|
appropriate settings accordingly in a Makefile.lammps.* file
|
||||||
|
and set the EXTRAMAKE setting in Makefile.* to that file.
|
||||||
|
|
||||||
If you want to use the minimalist version of these libraries provided
|
c) Use the minimalist version of these libraries provided with LAMMPS
|
||||||
with LAMMPS in lib/linalg, then the settings in Makefile.lammps.linalg
|
in lib/linalg, by using Makefile.lammps.linalg. In this case you also
|
||||||
should work. Note that in this case you also need to build the
|
need to build the library in lib/linalg; see the lib/linalg/README
|
||||||
linear-algebra in lib/linalg; see the lib/linalg/README for more
|
file for more details.
|
||||||
details.
|
|
||||||
|
|||||||
82
lib/colvars/Install.py
Normal file
82
lib/colvars/Install.py
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
# install.py tool to do a generic build of a library
|
||||||
|
# soft linked to by many of the lib/Install.py files
|
||||||
|
# used to automate the steps described in the corresponding lib/README
|
||||||
|
|
||||||
|
import sys,commands,os
|
||||||
|
|
||||||
|
# help message
|
||||||
|
|
||||||
|
help = """
|
||||||
|
Syntax: python Install.py -m machine -e suffix
|
||||||
|
specify -m and optionally -e, order does not matter
|
||||||
|
-m = peform a clean followed by "make -f Makefile.machine"
|
||||||
|
machine = suffix of a lib/Makefile.* file
|
||||||
|
-e = set EXTRAMAKE variable in Makefile.machine to Makefile.lammps.suffix
|
||||||
|
does not alter existing Makefile.machine
|
||||||
|
"""
|
||||||
|
|
||||||
|
# print error message or help
|
||||||
|
|
||||||
|
def error(str=None):
|
||||||
|
if not str: print help
|
||||||
|
else: print "ERROR",str
|
||||||
|
sys.exit()
|
||||||
|
|
||||||
|
# parse args
|
||||||
|
|
||||||
|
args = sys.argv[1:]
|
||||||
|
nargs = len(args)
|
||||||
|
if nargs == 0: error()
|
||||||
|
|
||||||
|
machine = None
|
||||||
|
extraflag = 0
|
||||||
|
|
||||||
|
iarg = 0
|
||||||
|
while iarg < nargs:
|
||||||
|
if args[iarg] == "-m":
|
||||||
|
if iarg+2 > nargs: error()
|
||||||
|
machine = args[iarg+1]
|
||||||
|
iarg += 2
|
||||||
|
elif args[iarg] == "-e":
|
||||||
|
if iarg+2 > nargs: error()
|
||||||
|
extraflag = 1
|
||||||
|
suffix = args[iarg+1]
|
||||||
|
iarg += 2
|
||||||
|
else: error()
|
||||||
|
|
||||||
|
# set lib from working dir
|
||||||
|
|
||||||
|
cwd = os.getcwd()
|
||||||
|
lib = os.path.basename(cwd)
|
||||||
|
|
||||||
|
# create Makefile.auto as copy of Makefile.machine
|
||||||
|
# reset EXTRAMAKE if requested
|
||||||
|
|
||||||
|
if not os.path.exists("Makefile.%s" % machine):
|
||||||
|
error("lib/%s/Makefile.%s does not exist" % (lib,machine))
|
||||||
|
|
||||||
|
lines = open("Makefile.%s" % machine,'r').readlines()
|
||||||
|
fp = open("Makefile.auto",'w')
|
||||||
|
|
||||||
|
for line in lines:
|
||||||
|
words = line.split()
|
||||||
|
if len(words) == 3 and extraflag and \
|
||||||
|
words[0] == "EXTRAMAKE" and words[1] == '=':
|
||||||
|
line = line.replace(words[2],"Makefile.lammps.%s" % suffix)
|
||||||
|
print >>fp,line,
|
||||||
|
|
||||||
|
fp.close()
|
||||||
|
|
||||||
|
# make the library via Makefile.auto
|
||||||
|
|
||||||
|
print "Building lib%s.a ..." % lib
|
||||||
|
cmd = "make -f Makefile.auto clean; make -f Makefile.auto"
|
||||||
|
txt = commands.getoutput(cmd)
|
||||||
|
print txt
|
||||||
|
|
||||||
|
if os.path.exists("lib%s.a" % lib): print "Build was successful"
|
||||||
|
else: error("Build of lib/%s/lib%s.a was NOT successful" % (lib,lib))
|
||||||
|
if not os.path.exists("Makefile.lammps"):
|
||||||
|
print "lib/%s/Makefile.lammps was NOT created" % lib
|
||||||
@ -35,6 +35,11 @@ links against when using the USER-COLVARS package.
|
|||||||
This library must be built with a C++ compiler, before LAMMPS is
|
This library must be built with a C++ compiler, before LAMMPS is
|
||||||
built, so LAMMPS can link against it.
|
built, so LAMMPS can link against it.
|
||||||
|
|
||||||
|
You can type "make lib-colvars" from the src directory to see help on
|
||||||
|
how to build this library via make commands, or you can do the same
|
||||||
|
thing by typing "python Install.py" from within this directory, or you
|
||||||
|
can do it manually by following the instructions below.
|
||||||
|
|
||||||
Build the library using one of the provided Makefile.* files or create
|
Build the library using one of the provided Makefile.* files or create
|
||||||
your own, specific to your compiler and system. For example:
|
your own, specific to your compiler and system. For example:
|
||||||
|
|
||||||
|
|||||||
146
lib/gpu/Install.py
Normal file
146
lib/gpu/Install.py
Normal file
@ -0,0 +1,146 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
# Install.py tool to build the GPU library
|
||||||
|
# used to automate the steps described in the README file in this dir
|
||||||
|
|
||||||
|
import sys,os,re,commands
|
||||||
|
|
||||||
|
# help message
|
||||||
|
|
||||||
|
help = """
|
||||||
|
Syntax: python Install.py -i isuffix -h hdir -a arch -p precision -e esuffix -m -o osuffix
|
||||||
|
specify one or more options, order does not matter
|
||||||
|
copies an existing Makefile.isuffix in lib/gpu to Makefile.auto
|
||||||
|
optionally edits these variables in Makefile.auto:
|
||||||
|
CUDA_HOME, CUDA_ARCH, CUDA_PRECISION, EXTRAMAKE
|
||||||
|
optionally uses Makefile.auto to build the GPU library -> libgpu.a
|
||||||
|
and to copy a Makefile.lammps.esuffix -> Makefile.lammps
|
||||||
|
optionally copies Makefile.auto to a new Makefile.osuffix
|
||||||
|
|
||||||
|
-i = use Makefile.isuffix as starting point, copy to Makefile.auto
|
||||||
|
default isuffix = linux
|
||||||
|
-h = set CUDA_HOME variable in Makefile.auto to hdir
|
||||||
|
hdir = path to NVIDIA Cuda software, e.g. /usr/local/cuda
|
||||||
|
-a = set CUDA_ARCH variable in Makefile.auto to arch
|
||||||
|
use arch = ?? for K40 (Tesla)
|
||||||
|
use arch = 37 for dual K80 (Tesla)
|
||||||
|
use arch = 60 for P100 (Pascal)
|
||||||
|
-p = set CUDA_PRECISION variable in Makefile.auto to precision
|
||||||
|
use precision = double or mixed or single
|
||||||
|
-e = set EXTRAMAKE variable in Makefile.auto to Makefile.lammps.esuffix
|
||||||
|
-m = make the GPU library using Makefile.auto
|
||||||
|
first performs a "make clean"
|
||||||
|
produces libgpu.a if successful
|
||||||
|
also copies EXTRAMAKE file -> Makefile.lammps
|
||||||
|
-e can set which Makefile.lammps.esuffix file is copied
|
||||||
|
-o = copy final Makefile.auto to Makefile.osuffix
|
||||||
|
"""
|
||||||
|
|
||||||
|
# print error message or help
|
||||||
|
|
||||||
|
def error(str=None):
|
||||||
|
if not str: print help
|
||||||
|
else: print "ERROR",str
|
||||||
|
sys.exit()
|
||||||
|
|
||||||
|
# parse args
|
||||||
|
|
||||||
|
args = sys.argv[1:]
|
||||||
|
nargs = len(args)
|
||||||
|
if nargs == 0: error()
|
||||||
|
|
||||||
|
isuffix = "linux"
|
||||||
|
hflag = aflag = pflag = eflag = 0
|
||||||
|
makeflag = 0
|
||||||
|
outflag = 0
|
||||||
|
|
||||||
|
iarg = 0
|
||||||
|
while iarg < nargs:
|
||||||
|
if args[iarg] == "-i":
|
||||||
|
if iarg+2 > nargs: error()
|
||||||
|
isuffix = args[iarg+1]
|
||||||
|
iarg += 2
|
||||||
|
elif args[iarg] == "-h":
|
||||||
|
if iarg+2 > nargs: error()
|
||||||
|
hflag = 1
|
||||||
|
hdir = args[iarg+1]
|
||||||
|
iarg += 2
|
||||||
|
elif args[iarg] == "-a":
|
||||||
|
if iarg+2 > nargs: error()
|
||||||
|
aflag = 1
|
||||||
|
arch = args[iarg+1]
|
||||||
|
iarg += 2
|
||||||
|
elif args[iarg] == "-p":
|
||||||
|
if iarg+2 > nargs: error()
|
||||||
|
pflag = 1
|
||||||
|
precision = args[iarg+1]
|
||||||
|
iarg += 2
|
||||||
|
elif args[iarg] == "-e":
|
||||||
|
if iarg+2 > nargs: error()
|
||||||
|
eflag = 1
|
||||||
|
lmpsuffix = args[iarg+1]
|
||||||
|
iarg += 2
|
||||||
|
elif args[iarg] == "-m":
|
||||||
|
makeflag = 1
|
||||||
|
iarg += 1
|
||||||
|
elif args[iarg] == "-o":
|
||||||
|
if iarg+2 > nargs: error()
|
||||||
|
outflag = 1
|
||||||
|
osuffix = args[iarg+1]
|
||||||
|
iarg += 2
|
||||||
|
else: error()
|
||||||
|
|
||||||
|
if pflag:
|
||||||
|
if precision == "double": precstr = "-D_DOUBLE_DOUBLE"
|
||||||
|
elif precision == "mixed": precstr = "-D_SINGLE_DOUBLE"
|
||||||
|
elif precision == "single": precstr = "-D_SINGLE_SINGLE"
|
||||||
|
else: error("Invalid precision setting")
|
||||||
|
|
||||||
|
# create Makefile.auto
|
||||||
|
# reset EXTRAMAKE, CUDA_HOME, CUDA_ARCH, CUDA_PRECISION if requested
|
||||||
|
|
||||||
|
if not os.path.exists("Makefile.%s" % isuffix):
|
||||||
|
error("lib/gpu/Makefile.%s does not exist" % isuffix)
|
||||||
|
|
||||||
|
lines = open("Makefile.%s" % isuffix,'r').readlines()
|
||||||
|
fp = open("Makefile.auto",'w')
|
||||||
|
|
||||||
|
for line in lines:
|
||||||
|
words = line.split()
|
||||||
|
if len(words) != 3:
|
||||||
|
print >>fp,line,
|
||||||
|
continue
|
||||||
|
|
||||||
|
if hflag and words[0] == "CUDA_HOME" and words[1] == '=':
|
||||||
|
line = line.replace(words[2],hdir)
|
||||||
|
if aflag and words[0] == "CUDA_ARCH" and words[1] == '=':
|
||||||
|
line = line.replace(words[2],"-arch=sm_%s" % arch)
|
||||||
|
if pflag and words[0] == "CUDA_PRECISION" and words[1] == '=':
|
||||||
|
line = line.replace(words[2],precstr)
|
||||||
|
if eflag and words[0] == "EXTRAMAKE" and words[1] == '=':
|
||||||
|
line = line.replace(words[2],"Makefile.lammps.%s" % lmpsuffix)
|
||||||
|
|
||||||
|
print >>fp,line,
|
||||||
|
|
||||||
|
fp.close()
|
||||||
|
|
||||||
|
# perform make
|
||||||
|
# make operations copies EXTRAMAKE file to Makefile.lammps
|
||||||
|
|
||||||
|
if makeflag:
|
||||||
|
print "Building libgpu.a ..."
|
||||||
|
cmd = "rm -f libgpu.a"
|
||||||
|
commands.getoutput(cmd)
|
||||||
|
cmd = "make -f Makefile.auto clean; make -f Makefile.auto"
|
||||||
|
commands.getoutput(cmd)
|
||||||
|
if not os.path.exists("libgpu.a"):
|
||||||
|
error("Build of lib/gpu/libgpu.a was NOT successful")
|
||||||
|
if not os.path.exists("Makefile.lammps"):
|
||||||
|
error("lib/gpu/Makefile.lammps was NOT created")
|
||||||
|
|
||||||
|
# copy new Makefile.auto to Makefile.osuffix
|
||||||
|
|
||||||
|
if outflag:
|
||||||
|
print "Creating new Makefile.%s" % osuffix
|
||||||
|
cmd = "cp Makefile.auto Makefile.%s" % osuffix
|
||||||
|
commands.getoutput(cmd)
|
||||||
@ -17,6 +17,11 @@ links against when using the GPU package.
|
|||||||
This library must be built with a C++ compiler, before LAMMPS is
|
This library must be built with a C++ compiler, before LAMMPS is
|
||||||
built, so LAMMPS can link against it.
|
built, so LAMMPS can link against it.
|
||||||
|
|
||||||
|
You can type "make lib-gpu" from the src directory to see help on how
|
||||||
|
to build this library via make commands, or you can do the same thing
|
||||||
|
by typing "python Install.py" from within this directory, or you can
|
||||||
|
do it manually by following the instructions below.
|
||||||
|
|
||||||
Build the library using one of the provided Makefile.* files or create
|
Build the library using one of the provided Makefile.* files or create
|
||||||
your own, specific to your compiler and system. For example:
|
your own, specific to your compiler and system. For example:
|
||||||
|
|
||||||
@ -164,9 +169,9 @@ this directory).
|
|||||||
The gpu library supports 3 precision modes as determined by
|
The gpu library supports 3 precision modes as determined by
|
||||||
the CUDA_PRECISION variable:
|
the CUDA_PRECISION variable:
|
||||||
|
|
||||||
CUDA_PREC = -D_SINGLE_SINGLE # Single precision for all calculations
|
CUDA_PRECISION = -D_SINGLE_SINGLE # Single precision for all calculations
|
||||||
CUDA_PREC = -D_DOUBLE_DOUBLE # Double precision for all calculations
|
CUDA_PRECISION = -D_DOUBLE_DOUBLE # Double precision for all calculations
|
||||||
CUDA_PREC = -D_SINGLE_DOUBLE # Accumulation of forces, etc. in double
|
CUDA_PRECISION = -D_SINGLE_DOUBLE # Accumulation of forces, etc. in double
|
||||||
|
|
||||||
NOTE: PPPM acceleration can only be run on GPUs with compute capability>=1.1.
|
NOTE: PPPM acceleration can only be run on GPUs with compute capability>=1.1.
|
||||||
You will get the error "GPU library not compiled for this accelerator."
|
You will get the error "GPU library not compiled for this accelerator."
|
||||||
|
|||||||
82
lib/h5md/Install.py
Normal file
82
lib/h5md/Install.py
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
# install.py tool to do a generic build of a library
|
||||||
|
# soft linked to by many of the lib/Install.py files
|
||||||
|
# used to automate the steps described in the corresponding lib/README
|
||||||
|
|
||||||
|
import sys,commands,os
|
||||||
|
|
||||||
|
# help message
|
||||||
|
|
||||||
|
help = """
|
||||||
|
Syntax: python Install.py -m machine -e suffix
|
||||||
|
specify -m and optionally -e, order does not matter
|
||||||
|
-m = peform a clean followed by "make -f Makefile.machine"
|
||||||
|
machine = suffix of a lib/Makefile.* file
|
||||||
|
-e = set EXTRAMAKE variable in Makefile.machine to Makefile.lammps.suffix
|
||||||
|
does not alter existing Makefile.machine
|
||||||
|
"""
|
||||||
|
|
||||||
|
# print error message or help
|
||||||
|
|
||||||
|
def error(str=None):
|
||||||
|
if not str: print help
|
||||||
|
else: print "ERROR",str
|
||||||
|
sys.exit()
|
||||||
|
|
||||||
|
# parse args
|
||||||
|
|
||||||
|
args = sys.argv[1:]
|
||||||
|
nargs = len(args)
|
||||||
|
if nargs == 0: error()
|
||||||
|
|
||||||
|
machine = None
|
||||||
|
extraflag = 0
|
||||||
|
|
||||||
|
iarg = 0
|
||||||
|
while iarg < nargs:
|
||||||
|
if args[iarg] == "-m":
|
||||||
|
if iarg+2 > nargs: error()
|
||||||
|
machine = args[iarg+1]
|
||||||
|
iarg += 2
|
||||||
|
elif args[iarg] == "-e":
|
||||||
|
if iarg+2 > nargs: error()
|
||||||
|
extraflag = 1
|
||||||
|
suffix = args[iarg+1]
|
||||||
|
iarg += 2
|
||||||
|
else: error()
|
||||||
|
|
||||||
|
# set lib from working dir
|
||||||
|
|
||||||
|
cwd = os.getcwd()
|
||||||
|
lib = os.path.basename(cwd)
|
||||||
|
|
||||||
|
# create Makefile.auto as copy of Makefile.machine
|
||||||
|
# reset EXTRAMAKE if requested
|
||||||
|
|
||||||
|
if not os.path.exists("Makefile.%s" % machine):
|
||||||
|
error("lib/%s/Makefile.%s does not exist" % (lib,machine))
|
||||||
|
|
||||||
|
lines = open("Makefile.%s" % machine,'r').readlines()
|
||||||
|
fp = open("Makefile.auto",'w')
|
||||||
|
|
||||||
|
for line in lines:
|
||||||
|
words = line.split()
|
||||||
|
if len(words) == 3 and extraflag and \
|
||||||
|
words[0] == "EXTRAMAKE" and words[1] == '=':
|
||||||
|
line = line.replace(words[2],"Makefile.lammps.%s" % suffix)
|
||||||
|
print >>fp,line,
|
||||||
|
|
||||||
|
fp.close()
|
||||||
|
|
||||||
|
# make the library via Makefile.auto
|
||||||
|
|
||||||
|
print "Building lib%s.a ..." % lib
|
||||||
|
cmd = "make -f Makefile.auto clean; make -f Makefile.auto"
|
||||||
|
txt = commands.getoutput(cmd)
|
||||||
|
print txt
|
||||||
|
|
||||||
|
if os.path.exists("lib%s.a" % lib): print "Build was successful"
|
||||||
|
else: error("Build of lib/%s/lib%s.a was NOT successful" % (lib,lib))
|
||||||
|
if not os.path.exists("Makefile.lammps"):
|
||||||
|
print "lib/%s/Makefile.lammps was NOT created" % lib
|
||||||
@ -19,7 +19,7 @@ build/ch5md.o: src/ch5md.c | build
|
|||||||
$(CC) $(INC) $(CFLAGS) -c $< -o $@
|
$(CC) $(INC) $(CFLAGS) -c $< -o $@
|
||||||
|
|
||||||
Makefile.lammps:
|
Makefile.lammps:
|
||||||
cp Makefile.lammps.empty $@
|
cp $(EXTRAMAKE) $@
|
||||||
|
|
||||||
.PHONY: all lib clean
|
.PHONY: all lib clean
|
||||||
|
|
||||||
@ -3,6 +3,11 @@ LAMMPS under its own BSD license; see below. This library is used
|
|||||||
when the USER-H5MD package is included in a LAMMPS build and the dump
|
when the USER-H5MD package is included in a LAMMPS build and the dump
|
||||||
h5md command is invoked in a LAMMPS input script.
|
h5md command is invoked in a LAMMPS input script.
|
||||||
|
|
||||||
|
You can type "make lib-h5md" from the src directory to see help on how
|
||||||
|
to build this library via make commands, or you can do the same thing
|
||||||
|
by typing "python Install.py" from within this directory, or you can
|
||||||
|
do it manually by following the instructions below.
|
||||||
|
|
||||||
---------------------
|
---------------------
|
||||||
|
|
||||||
ch5md : Read and write H5MD files in C
|
ch5md : Read and write H5MD files in C
|
||||||
@ -17,8 +22,14 @@ molecular data, whose development is found at <http://nongnu.org/h5md/>.
|
|||||||
ch5md is developped by Pierre de Buyl and is released under the 3-clause BSD
|
ch5md is developped by Pierre de Buyl and is released under the 3-clause BSD
|
||||||
license that can be found in the file LICENSE.
|
license that can be found in the file LICENSE.
|
||||||
|
|
||||||
To use the h5md dump style in lammps, execute make in this directory then 'make
|
To use the h5md dump style in lammps, execute
|
||||||
yes-user-h5md' in the src directory of lammps. Rebuild lammps.
|
make -f Makefile.h5cc
|
||||||
|
in this directory then
|
||||||
|
make yes-user-h5md
|
||||||
|
in the src directory of LAMMPS to rebuild LAMMPS.
|
||||||
|
|
||||||
|
Note that you must have the h5cc compiler installed to use
|
||||||
|
Makefile.h5cc. It should be part
|
||||||
|
|
||||||
If HDF5 is not in a standard system location, edit Makefile.lammps accordingly.
|
If HDF5 is not in a standard system location, edit Makefile.lammps accordingly.
|
||||||
|
|
||||||
|
|||||||
52
lib/linalg/Install.py
Normal file
52
lib/linalg/Install.py
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
# install.py tool to do build of the linear algebra library
|
||||||
|
# used to automate the steps described in the README file in this dir
|
||||||
|
|
||||||
|
import sys,commands,os
|
||||||
|
|
||||||
|
# help message
|
||||||
|
|
||||||
|
help = """
|
||||||
|
Syntax: python Install.py -m machine
|
||||||
|
-m = peform a clean followed by "make -f Makefile.machine"
|
||||||
|
machine = suffix of a lib/Makefile.* file
|
||||||
|
"""
|
||||||
|
|
||||||
|
# print error message or help
|
||||||
|
|
||||||
|
def error(str=None):
|
||||||
|
if not str: print help
|
||||||
|
else: print "ERROR",str
|
||||||
|
sys.exit()
|
||||||
|
|
||||||
|
# parse args
|
||||||
|
|
||||||
|
args = sys.argv[1:]
|
||||||
|
nargs = len(args)
|
||||||
|
if nargs == 0: error()
|
||||||
|
|
||||||
|
machine = None
|
||||||
|
|
||||||
|
iarg = 0
|
||||||
|
while iarg < nargs:
|
||||||
|
if args[iarg] == "-m":
|
||||||
|
if iarg+2 > nargs: error()
|
||||||
|
machine = args[iarg+1]
|
||||||
|
iarg += 2
|
||||||
|
else: error()
|
||||||
|
|
||||||
|
# set lib from working dir
|
||||||
|
|
||||||
|
cwd = os.getcwd()
|
||||||
|
lib = os.path.basename(cwd)
|
||||||
|
|
||||||
|
# make the library
|
||||||
|
|
||||||
|
print "Building lib%s.a ..." % lib
|
||||||
|
cmd = "make -f Makefile.%s clean; make -f Makefile.%s" % (machine,machine)
|
||||||
|
txt = commands.getoutput(cmd)
|
||||||
|
print txt
|
||||||
|
|
||||||
|
if os.path.exists("lib%s.a" % lib): print "Build was successful"
|
||||||
|
else: error("Build of lib/%s/lib%s.a was NOT successful" % (lib,lib))
|
||||||
@ -3,11 +3,16 @@ USER-AWPMD packages, and possibly by other packages in the future.
|
|||||||
|
|
||||||
Note that this is an *incomplete* subset of full BLAS/LAPACK.
|
Note that this is an *incomplete* subset of full BLAS/LAPACK.
|
||||||
|
|
||||||
You should only need to build and use the resulting library in this
|
You should only need to build and use the library in this directory if
|
||||||
directory if you want to build LAMMPS with the USER-ATC and/or
|
you want to build LAMMPS with the USER-ATC and/or USER-AWPMD packages
|
||||||
USER-AWPMD packages AND you do not have any other suitable BLAS and
|
AND you do not have any other suitable BLAS and LAPACK libraries
|
||||||
LAPACK libraries installed on your system. E.g. ATLAS, GOTO-BLAS,
|
installed on your system. E.g. ATLAS, GOTO-BLAS, OpenBLAS, ACML, or
|
||||||
OpenBLAS, ACML, or MKL.
|
MKL.
|
||||||
|
|
||||||
|
You can type "make lib-linalg" from the src directory to see help on
|
||||||
|
how to build this library via make commands, or you can do the same
|
||||||
|
thing by typing "python Install.py" from within this directory, or you
|
||||||
|
can do it manually by following the instructions below.
|
||||||
|
|
||||||
Build the library using one of the provided Makefile.* files or create
|
Build the library using one of the provided Makefile.* files or create
|
||||||
your own, specific to your compiler and system. For example:
|
your own, specific to your compiler and system. For example:
|
||||||
@ -20,4 +25,5 @@ directory:
|
|||||||
liblinalg.a the library LAMMPS will link against
|
liblinalg.a the library LAMMPS will link against
|
||||||
|
|
||||||
You can then include this library and its path in the Makefile.lammps
|
You can then include this library and its path in the Makefile.lammps
|
||||||
file of any packages that need it, e.g. in lib/atc/Makefile.lammps.
|
file of any packages that need it. As an example, see the
|
||||||
|
lib/atc/Makefile.lammps.linalg file.
|
||||||
|
|||||||
82
lib/meam/Install.py
Normal file
82
lib/meam/Install.py
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
# install.py tool to do a generic build of a library
|
||||||
|
# soft linked to by many of the lib/Install.py files
|
||||||
|
# used to automate the steps described in the corresponding lib/README
|
||||||
|
|
||||||
|
import sys,commands,os
|
||||||
|
|
||||||
|
# help message
|
||||||
|
|
||||||
|
help = """
|
||||||
|
Syntax: python Install.py -m machine -e suffix
|
||||||
|
specify -m and optionally -e, order does not matter
|
||||||
|
-m = peform a clean followed by "make -f Makefile.machine"
|
||||||
|
machine = suffix of a lib/Makefile.* file
|
||||||
|
-e = set EXTRAMAKE variable in Makefile.machine to Makefile.lammps.suffix
|
||||||
|
does not alter existing Makefile.machine
|
||||||
|
"""
|
||||||
|
|
||||||
|
# print error message or help
|
||||||
|
|
||||||
|
def error(str=None):
|
||||||
|
if not str: print help
|
||||||
|
else: print "ERROR",str
|
||||||
|
sys.exit()
|
||||||
|
|
||||||
|
# parse args
|
||||||
|
|
||||||
|
args = sys.argv[1:]
|
||||||
|
nargs = len(args)
|
||||||
|
if nargs == 0: error()
|
||||||
|
|
||||||
|
machine = None
|
||||||
|
extraflag = 0
|
||||||
|
|
||||||
|
iarg = 0
|
||||||
|
while iarg < nargs:
|
||||||
|
if args[iarg] == "-m":
|
||||||
|
if iarg+2 > nargs: error()
|
||||||
|
machine = args[iarg+1]
|
||||||
|
iarg += 2
|
||||||
|
elif args[iarg] == "-e":
|
||||||
|
if iarg+2 > nargs: error()
|
||||||
|
extraflag = 1
|
||||||
|
suffix = args[iarg+1]
|
||||||
|
iarg += 2
|
||||||
|
else: error()
|
||||||
|
|
||||||
|
# set lib from working dir
|
||||||
|
|
||||||
|
cwd = os.getcwd()
|
||||||
|
lib = os.path.basename(cwd)
|
||||||
|
|
||||||
|
# create Makefile.auto as copy of Makefile.machine
|
||||||
|
# reset EXTRAMAKE if requested
|
||||||
|
|
||||||
|
if not os.path.exists("Makefile.%s" % machine):
|
||||||
|
error("lib/%s/Makefile.%s does not exist" % (lib,machine))
|
||||||
|
|
||||||
|
lines = open("Makefile.%s" % machine,'r').readlines()
|
||||||
|
fp = open("Makefile.auto",'w')
|
||||||
|
|
||||||
|
for line in lines:
|
||||||
|
words = line.split()
|
||||||
|
if len(words) == 3 and extraflag and \
|
||||||
|
words[0] == "EXTRAMAKE" and words[1] == '=':
|
||||||
|
line = line.replace(words[2],"Makefile.lammps.%s" % suffix)
|
||||||
|
print >>fp,line,
|
||||||
|
|
||||||
|
fp.close()
|
||||||
|
|
||||||
|
# make the library via Makefile.auto
|
||||||
|
|
||||||
|
print "Building lib%s.a ..." % lib
|
||||||
|
cmd = "make -f Makefile.auto clean; make -f Makefile.auto"
|
||||||
|
txt = commands.getoutput(cmd)
|
||||||
|
print txt
|
||||||
|
|
||||||
|
if os.path.exists("lib%s.a" % lib): print "Build was successful"
|
||||||
|
else: error("Build of lib/%s/lib%s.a was NOT successful" % (lib,lib))
|
||||||
|
if not os.path.exists("Makefile.lammps"):
|
||||||
|
print "lib/%s/Makefile.lammps was NOT created" % lib
|
||||||
@ -15,6 +15,11 @@ links against when using the MEAM package.
|
|||||||
This library must be built with a F90 compiler, before LAMMPS is
|
This library must be built with a F90 compiler, before LAMMPS is
|
||||||
built, so LAMMPS can link against it.
|
built, so LAMMPS can link against it.
|
||||||
|
|
||||||
|
You can type "make lib-meam" from the src directory to see help on how
|
||||||
|
to build this library via make commands, or you can do the same thing
|
||||||
|
by typing "python Install.py" from within this directory, or you can
|
||||||
|
do it manually by following the instructions below.
|
||||||
|
|
||||||
Build the library using one of the provided Makefile.* files or create
|
Build the library using one of the provided Makefile.* files or create
|
||||||
your own, specific to your compiler and system. For example:
|
your own, specific to your compiler and system. For example:
|
||||||
|
|
||||||
|
|||||||
122
lib/mscg/Install.py
Normal file
122
lib/mscg/Install.py
Normal file
@ -0,0 +1,122 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
# Install.py tool to download, unpack, build, and link to the MS-CG library
|
||||||
|
# used to automate the steps described in the README file in this dir
|
||||||
|
|
||||||
|
import sys,os,re,commands
|
||||||
|
|
||||||
|
# help message
|
||||||
|
|
||||||
|
help = """
|
||||||
|
Syntax: python Install.py -h hpath hdir -g -b [suffix] -l
|
||||||
|
specify one or more options, order does not matter
|
||||||
|
-h = set home dir of MS-CG to be hpath/hdir
|
||||||
|
hpath can be full path, contain '~' or '.' chars
|
||||||
|
default hpath = . = lib/mscg
|
||||||
|
default hdir = MSCG-release-master = what GitHub zipfile unpacks to
|
||||||
|
-g = grab (download) zipfile from MS-CG GitHub website
|
||||||
|
unpack it to hpath/hdir
|
||||||
|
hpath must already exist
|
||||||
|
if hdir already exists, it will be deleted before unpack
|
||||||
|
-b = build MS-CG library in its src dir
|
||||||
|
optional suffix specifies which src/Make/Makefile.suffix to use
|
||||||
|
default suffix = g++_simple
|
||||||
|
-l = create 2 softlinks (includelink,liblink) in lib/mscg to MS-CG src dir
|
||||||
|
"""
|
||||||
|
|
||||||
|
# settings
|
||||||
|
|
||||||
|
url = "https://github.com/uchicago-voth/MSCG-release/archive/master.zip"
|
||||||
|
zipfile = "MS-CG-master.zip"
|
||||||
|
zipdir = "MSCG-release-master"
|
||||||
|
|
||||||
|
# print error message or help
|
||||||
|
|
||||||
|
def error(str=None):
|
||||||
|
if not str: print help
|
||||||
|
else: print "ERROR",str
|
||||||
|
sys.exit()
|
||||||
|
|
||||||
|
# expand to full path name
|
||||||
|
# process leading '~' or relative path
|
||||||
|
|
||||||
|
def fullpath(path):
|
||||||
|
return os.path.abspath(os.path.expanduser(path))
|
||||||
|
|
||||||
|
# parse args
|
||||||
|
|
||||||
|
args = sys.argv[1:]
|
||||||
|
nargs = len(args)
|
||||||
|
if nargs == 0: error()
|
||||||
|
|
||||||
|
homepath = "."
|
||||||
|
homedir = zipdir
|
||||||
|
|
||||||
|
grabflag = 0
|
||||||
|
buildflag = 0
|
||||||
|
msuffix = "g++_simple"
|
||||||
|
linkflag = 0
|
||||||
|
|
||||||
|
iarg = 0
|
||||||
|
while iarg < nargs:
|
||||||
|
if args[iarg] == "-h":
|
||||||
|
if iarg+3 > nargs: error()
|
||||||
|
homepath = args[iarg+1]
|
||||||
|
homedir = args[iarg+2]
|
||||||
|
iarg += 3
|
||||||
|
elif args[iarg] == "-g":
|
||||||
|
grabflag = 1
|
||||||
|
iarg += 1
|
||||||
|
elif args[iarg] == "-b":
|
||||||
|
buildflag = 1
|
||||||
|
if iarg+1 < nargs and args[iarg+1][0] != '-':
|
||||||
|
msuffix = args[iarg+1]
|
||||||
|
iarg += 1
|
||||||
|
iarg += 1
|
||||||
|
elif args[iarg] == "-l":
|
||||||
|
linkflag = 1
|
||||||
|
iarg += 1
|
||||||
|
else: error()
|
||||||
|
|
||||||
|
homepath = fullpath(homepath)
|
||||||
|
if not os.path.isdir(homepath): error("MS-CG path does not exist")
|
||||||
|
homedir = "%s/%s" % (homepath,homedir)
|
||||||
|
|
||||||
|
# download and unpack MS-CG zipfile
|
||||||
|
|
||||||
|
if grabflag:
|
||||||
|
print "Downloading MS-CG ..."
|
||||||
|
cmd = "curl -L %s > %s/%s" % (url,homepath,zipfile)
|
||||||
|
print cmd
|
||||||
|
print commands.getoutput(cmd)
|
||||||
|
|
||||||
|
print "Unpacking MS-CG zipfile ..."
|
||||||
|
if os.path.exists("%s/%s" % (homepath,zipdir)):
|
||||||
|
commands.getoutput("rm -rf %s/%s" % (homepath,zipdir))
|
||||||
|
cmd = "cd %s; unzip %s" % (homepath,zipfile)
|
||||||
|
commands.getoutput(cmd)
|
||||||
|
if os.path.basename(homedir) != zipdir:
|
||||||
|
if os.path.exists(homedir): commands.getoutput("rm -rf %s" % homedir)
|
||||||
|
os.rename("%s/%s" % (homepath,zipdir),homedir)
|
||||||
|
|
||||||
|
# build MS-CG
|
||||||
|
|
||||||
|
if buildflag:
|
||||||
|
print "Building MS-CG ..."
|
||||||
|
cmd = "cd %s/src; cp Make/Makefile.%s .; make -f Makefile.%s" % \
|
||||||
|
(homedir,msuffix,msuffix)
|
||||||
|
txt = commands.getoutput(cmd)
|
||||||
|
print txt
|
||||||
|
|
||||||
|
# create 2 links in lib/mscg to MS-CG src dir
|
||||||
|
|
||||||
|
if linkflag:
|
||||||
|
print "Creating links to MS-CG include and lib files"
|
||||||
|
if os.path.isfile("includelink") or os.path.islink("includelink"):
|
||||||
|
os.remove("includelink")
|
||||||
|
if os.path.isfile("liblink") or os.path.islink("liblink"):
|
||||||
|
os.remove("liblink")
|
||||||
|
cmd = "ln -s %s/src includelink" % homedir
|
||||||
|
commands.getoutput(cmd)
|
||||||
|
cmd = "ln -s %s/src liblink" % homedir
|
||||||
|
commands.getoutput(cmd)
|
||||||
@ -1,5 +1,5 @@
|
|||||||
# Settings that the LAMMPS build will import when this package library is used
|
# Settings that the LAMMPS build will import when this package library is used
|
||||||
|
|
||||||
mscg_SYSINC =
|
mscg_SYSINC = -std=c++11
|
||||||
mscg_SYSLIB = -lm -lgsl -llapack -lcblas
|
mscg_SYSLIB = -lm -lgsl -llapack -lgslcblas
|
||||||
mscg_SYSPATH =
|
mscg_SYSPATH =
|
||||||
|
|||||||
@ -6,6 +6,15 @@ The MS-CG library is available at
|
|||||||
https://github.com/uchicago-voth/MSCG-release and was developed by
|
https://github.com/uchicago-voth/MSCG-release and was developed by
|
||||||
Jacob Wagner in Greg Voth's group at the University of Chicago.
|
Jacob Wagner in Greg Voth's group at the University of Chicago.
|
||||||
|
|
||||||
|
This library requires a compiler with C++11 support (e.g., g++ v4.9+),
|
||||||
|
LAPACK, and the GNU scientific library (GSL v 2.1+).
|
||||||
|
|
||||||
|
You can type "make lib-mscg" from the src directory to see help on how
|
||||||
|
to download and build this library via make commands, or you can do
|
||||||
|
the same thing by typing "python Install.py" from within this
|
||||||
|
directory, or you can do it manually by following the instructions
|
||||||
|
below.
|
||||||
|
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
You must perform the following steps yourself.
|
You must perform the following steps yourself.
|
||||||
@ -14,16 +23,21 @@ You must perform the following steps yourself.
|
|||||||
either as a tarball or via SVN, and unpack the tarball either in
|
either as a tarball or via SVN, and unpack the tarball either in
|
||||||
this /lib/mscg directory or somewhere else on your system.
|
this /lib/mscg directory or somewhere else on your system.
|
||||||
|
|
||||||
2. Compile MS-CG from within its home directory using your makefile choice:
|
2. Ensure that you have LAPACK and GSL (or Intel MKL) as well as a compiler
|
||||||
% make -f Makefile."name" libmscg.a
|
with support for C++11.
|
||||||
|
|
||||||
3. There is no need to install MS-CG if you only wish
|
3. Compile MS-CG from within its home directory using your makefile of choice:
|
||||||
|
% make -f Makefile."name" libmscg.a
|
||||||
|
It is recommended that you start with Makefile.g++_simple
|
||||||
|
for most machines
|
||||||
|
|
||||||
|
4. There is no need to install MS-CG if you only wish
|
||||||
to use it from LAMMPS.
|
to use it from LAMMPS.
|
||||||
|
|
||||||
4. Create two soft links in this dir (lib/mscg) to the MS-CG src
|
5. Create two soft links in this dir (lib/mscg) to the MS-CG src
|
||||||
directory. E.g if you built MS-CG in this dir:
|
directory. E.g if you built MS-CG in this dir:
|
||||||
% ln -s mscgfm-master/src includelink
|
% ln -s src includelink
|
||||||
% ln -s mscgfm-master/src liblink
|
% ln -s src liblink
|
||||||
These links could instead be set to the include and lib
|
These links could instead be set to the include and lib
|
||||||
directories created by a MS-CG install, e.g.
|
directories created by a MS-CG install, e.g.
|
||||||
% ln -s /usr/local/include includelink
|
% ln -s /usr/local/include includelink
|
||||||
@ -46,8 +60,8 @@ somewhere else, you will also need to repeat steps 1,2,3.
|
|||||||
|
|
||||||
The Makefile.lammps file in this directory is there for compatibility
|
The Makefile.lammps file in this directory is there for compatibility
|
||||||
with the way other libraries under the lib dir are linked with by
|
with the way other libraries under the lib dir are linked with by
|
||||||
LAMMPS. MS-CG requires the GSL, LAPACK, and BLAS libraries as listed
|
LAMMPS. MS-CG requires the GSL and LAPACK libraries as listed in
|
||||||
in Makefile.lammps. If they are not in default locations where your
|
Makefile.lammps. If they are not in default locations where your
|
||||||
LD_LIBRARY_PATH environment settings can find them, then you should
|
LD_LIBRARY_PATH environment settings can find them, then you should
|
||||||
add the approrpriate -L paths to the mscg_SYSPATH variable in
|
add the approrpriate -L paths to the mscg_SYSPATH variable in
|
||||||
Makefile.lammps.
|
Makefile.lammps.
|
||||||
|
|||||||
@ -1,6 +1,9 @@
|
|||||||
The Makefile.lammps file in this directory is used when building
|
The Makefile.lammps file in this directory is used when building
|
||||||
LAMMPS with packages that make use of the NetCDF library or its
|
LAMMPS with packages that make use of the NetCDF library or its
|
||||||
parallel version. The file has several settings needed to compile
|
parallel version. For example, the USER-NETCDF package which adds
|
||||||
|
dump netcdf and dump netcdf/mpiio commands.
|
||||||
|
|
||||||
|
The file has several settings needed to compile
|
||||||
and link LAMMPS with the NetCDF and parallel NetCDF support.
|
and link LAMMPS with the NetCDF and parallel NetCDF support.
|
||||||
For any regular NetCDF installation, all required flags should be
|
For any regular NetCDF installation, all required flags should be
|
||||||
autodetected. Please note that parallel NetCDF support is
|
autodetected. Please note that parallel NetCDF support is
|
||||||
|
|||||||
82
lib/poems/Install.py
Normal file
82
lib/poems/Install.py
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
# install.py tool to do a generic build of a library
|
||||||
|
# soft linked to by many of the lib/Install.py files
|
||||||
|
# used to automate the steps described in the corresponding lib/README
|
||||||
|
|
||||||
|
import sys,commands,os
|
||||||
|
|
||||||
|
# help message
|
||||||
|
|
||||||
|
help = """
|
||||||
|
Syntax: python Install.py -m machine -e suffix
|
||||||
|
specify -m and optionally -e, order does not matter
|
||||||
|
-m = peform a clean followed by "make -f Makefile.machine"
|
||||||
|
machine = suffix of a lib/Makefile.* file
|
||||||
|
-e = set EXTRAMAKE variable in Makefile.machine to Makefile.lammps.suffix
|
||||||
|
does not alter existing Makefile.machine
|
||||||
|
"""
|
||||||
|
|
||||||
|
# print error message or help
|
||||||
|
|
||||||
|
def error(str=None):
|
||||||
|
if not str: print help
|
||||||
|
else: print "ERROR",str
|
||||||
|
sys.exit()
|
||||||
|
|
||||||
|
# parse args
|
||||||
|
|
||||||
|
args = sys.argv[1:]
|
||||||
|
nargs = len(args)
|
||||||
|
if nargs == 0: error()
|
||||||
|
|
||||||
|
machine = None
|
||||||
|
extraflag = 0
|
||||||
|
|
||||||
|
iarg = 0
|
||||||
|
while iarg < nargs:
|
||||||
|
if args[iarg] == "-m":
|
||||||
|
if iarg+2 > nargs: error()
|
||||||
|
machine = args[iarg+1]
|
||||||
|
iarg += 2
|
||||||
|
elif args[iarg] == "-e":
|
||||||
|
if iarg+2 > nargs: error()
|
||||||
|
extraflag = 1
|
||||||
|
suffix = args[iarg+1]
|
||||||
|
iarg += 2
|
||||||
|
else: error()
|
||||||
|
|
||||||
|
# set lib from working dir
|
||||||
|
|
||||||
|
cwd = os.getcwd()
|
||||||
|
lib = os.path.basename(cwd)
|
||||||
|
|
||||||
|
# create Makefile.auto as copy of Makefile.machine
|
||||||
|
# reset EXTRAMAKE if requested
|
||||||
|
|
||||||
|
if not os.path.exists("Makefile.%s" % machine):
|
||||||
|
error("lib/%s/Makefile.%s does not exist" % (lib,machine))
|
||||||
|
|
||||||
|
lines = open("Makefile.%s" % machine,'r').readlines()
|
||||||
|
fp = open("Makefile.auto",'w')
|
||||||
|
|
||||||
|
for line in lines:
|
||||||
|
words = line.split()
|
||||||
|
if len(words) == 3 and extraflag and \
|
||||||
|
words[0] == "EXTRAMAKE" and words[1] == '=':
|
||||||
|
line = line.replace(words[2],"Makefile.lammps.%s" % suffix)
|
||||||
|
print >>fp,line,
|
||||||
|
|
||||||
|
fp.close()
|
||||||
|
|
||||||
|
# make the library via Makefile.auto
|
||||||
|
|
||||||
|
print "Building lib%s.a ..." % lib
|
||||||
|
cmd = "make -f Makefile.auto clean; make -f Makefile.auto"
|
||||||
|
txt = commands.getoutput(cmd)
|
||||||
|
print txt
|
||||||
|
|
||||||
|
if os.path.exists("lib%s.a" % lib): print "Build was successful"
|
||||||
|
else: error("Build of lib/%s/lib%s.a was NOT successful" % (lib,lib))
|
||||||
|
if not os.path.exists("Makefile.lammps"):
|
||||||
|
print "lib/%s/Makefile.lammps was NOT created" % lib
|
||||||
@ -40,6 +40,11 @@ links against when using the POEMA package.
|
|||||||
This library must be built with a C++ compiler, before LAMMPS is
|
This library must be built with a C++ compiler, before LAMMPS is
|
||||||
built, so LAMMPS can link against it.
|
built, so LAMMPS can link against it.
|
||||||
|
|
||||||
|
You can type "make lib-poems" from the src directory to see help on
|
||||||
|
how to build this library via make commands, or you can do the same
|
||||||
|
thing by typing "python Install.py" from within this directory, or you
|
||||||
|
can do it manually by following the instructions below.
|
||||||
|
|
||||||
Build the library using one of the provided Makefile.* files or create
|
Build the library using one of the provided Makefile.* files or create
|
||||||
your own, specific to your compiler and system. For example:
|
your own, specific to your compiler and system. For example:
|
||||||
|
|
||||||
|
|||||||
82
lib/qmmm/Install.py
Normal file
82
lib/qmmm/Install.py
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
# install.py tool to do a generic build of a library
|
||||||
|
# soft linked to by many of the lib/Install.py files
|
||||||
|
# used to automate the steps described in the corresponding lib/README
|
||||||
|
|
||||||
|
import sys,commands,os
|
||||||
|
|
||||||
|
# help message
|
||||||
|
|
||||||
|
help = """
|
||||||
|
Syntax: python Install.py -m machine -e suffix
|
||||||
|
specify -m and optionally -e, order does not matter
|
||||||
|
-m = peform a clean followed by "make -f Makefile.machine"
|
||||||
|
machine = suffix of a lib/Makefile.* file
|
||||||
|
-e = set EXTRAMAKE variable in Makefile.machine to Makefile.lammps.suffix
|
||||||
|
does not alter existing Makefile.machine
|
||||||
|
"""
|
||||||
|
|
||||||
|
# print error message or help
|
||||||
|
|
||||||
|
def error(str=None):
|
||||||
|
if not str: print help
|
||||||
|
else: print "ERROR",str
|
||||||
|
sys.exit()
|
||||||
|
|
||||||
|
# parse args
|
||||||
|
|
||||||
|
args = sys.argv[1:]
|
||||||
|
nargs = len(args)
|
||||||
|
if nargs == 0: error()
|
||||||
|
|
||||||
|
machine = None
|
||||||
|
extraflag = 0
|
||||||
|
|
||||||
|
iarg = 0
|
||||||
|
while iarg < nargs:
|
||||||
|
if args[iarg] == "-m":
|
||||||
|
if iarg+2 > nargs: error()
|
||||||
|
machine = args[iarg+1]
|
||||||
|
iarg += 2
|
||||||
|
elif args[iarg] == "-e":
|
||||||
|
if iarg+2 > nargs: error()
|
||||||
|
extraflag = 1
|
||||||
|
suffix = args[iarg+1]
|
||||||
|
iarg += 2
|
||||||
|
else: error()
|
||||||
|
|
||||||
|
# set lib from working dir
|
||||||
|
|
||||||
|
cwd = os.getcwd()
|
||||||
|
lib = os.path.basename(cwd)
|
||||||
|
|
||||||
|
# create Makefile.auto as copy of Makefile.machine
|
||||||
|
# reset EXTRAMAKE if requested
|
||||||
|
|
||||||
|
if not os.path.exists("Makefile.%s" % machine):
|
||||||
|
error("lib/%s/Makefile.%s does not exist" % (lib,machine))
|
||||||
|
|
||||||
|
lines = open("Makefile.%s" % machine,'r').readlines()
|
||||||
|
fp = open("Makefile.auto",'w')
|
||||||
|
|
||||||
|
for line in lines:
|
||||||
|
words = line.split()
|
||||||
|
if len(words) == 3 and extraflag and \
|
||||||
|
words[0] == "EXTRAMAKE" and words[1] == '=':
|
||||||
|
line = line.replace(words[2],"Makefile.lammps.%s" % suffix)
|
||||||
|
print >>fp,line,
|
||||||
|
|
||||||
|
fp.close()
|
||||||
|
|
||||||
|
# make the library via Makefile.auto
|
||||||
|
|
||||||
|
print "Building lib%s.a ..." % lib
|
||||||
|
cmd = "make -f Makefile.auto clean; make -f Makefile.auto"
|
||||||
|
txt = commands.getoutput(cmd)
|
||||||
|
print txt
|
||||||
|
|
||||||
|
if os.path.exists("lib%s.a" % lib): print "Build was successful"
|
||||||
|
else: error("Build of lib/%s/lib%s.a was NOT successful" % (lib,lib))
|
||||||
|
if not os.path.exists("Makefile.lammps"):
|
||||||
|
print "lib/%s/Makefile.lammps was NOT created" % lib
|
||||||
@ -18,6 +18,15 @@ the only option. Adding support for a different QM code will require
|
|||||||
to write a new version of the top-level wrapper code, pwqmmm.c, and
|
to write a new version of the top-level wrapper code, pwqmmm.c, and
|
||||||
also an interface layer into the QM code similar to the one in QE.
|
also an interface layer into the QM code similar to the one in QE.
|
||||||
|
|
||||||
|
You can type "make lib-qmmm" from the src directory to see help on how
|
||||||
|
to build this library (steps 1 and 2 below) via make commands, or you
|
||||||
|
can do the same thing by typing "python Install.py" from within this
|
||||||
|
directory, or you can do it manually by following the instructions
|
||||||
|
below.
|
||||||
|
|
||||||
|
However you perform steps 1 and 2, you will need to perform steps 3
|
||||||
|
and 4 manually, as outlined below.
|
||||||
|
|
||||||
-------------------------------------------------
|
-------------------------------------------------
|
||||||
|
|
||||||
WARNING: This is experimental code under developement and is provided
|
WARNING: This is experimental code under developement and is provided
|
||||||
|
|||||||
82
lib/reax/Install.py
Normal file
82
lib/reax/Install.py
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
# install.py tool to do a generic build of a library
|
||||||
|
# soft linked to by many of the lib/Install.py files
|
||||||
|
# used to automate the steps described in the corresponding lib/README
|
||||||
|
|
||||||
|
import sys,commands,os
|
||||||
|
|
||||||
|
# help message
|
||||||
|
|
||||||
|
help = """
|
||||||
|
Syntax: python Install.py -m machine -e suffix
|
||||||
|
specify -m and optionally -e, order does not matter
|
||||||
|
-m = peform a clean followed by "make -f Makefile.machine"
|
||||||
|
machine = suffix of a lib/Makefile.* file
|
||||||
|
-e = set EXTRAMAKE variable in Makefile.machine to Makefile.lammps.suffix
|
||||||
|
does not alter existing Makefile.machine
|
||||||
|
"""
|
||||||
|
|
||||||
|
# print error message or help
|
||||||
|
|
||||||
|
def error(str=None):
|
||||||
|
if not str: print help
|
||||||
|
else: print "ERROR",str
|
||||||
|
sys.exit()
|
||||||
|
|
||||||
|
# parse args
|
||||||
|
|
||||||
|
args = sys.argv[1:]
|
||||||
|
nargs = len(args)
|
||||||
|
if nargs == 0: error()
|
||||||
|
|
||||||
|
machine = None
|
||||||
|
extraflag = 0
|
||||||
|
|
||||||
|
iarg = 0
|
||||||
|
while iarg < nargs:
|
||||||
|
if args[iarg] == "-m":
|
||||||
|
if iarg+2 > nargs: error()
|
||||||
|
machine = args[iarg+1]
|
||||||
|
iarg += 2
|
||||||
|
elif args[iarg] == "-e":
|
||||||
|
if iarg+2 > nargs: error()
|
||||||
|
extraflag = 1
|
||||||
|
suffix = args[iarg+1]
|
||||||
|
iarg += 2
|
||||||
|
else: error()
|
||||||
|
|
||||||
|
# set lib from working dir
|
||||||
|
|
||||||
|
cwd = os.getcwd()
|
||||||
|
lib = os.path.basename(cwd)
|
||||||
|
|
||||||
|
# create Makefile.auto as copy of Makefile.machine
|
||||||
|
# reset EXTRAMAKE if requested
|
||||||
|
|
||||||
|
if not os.path.exists("Makefile.%s" % machine):
|
||||||
|
error("lib/%s/Makefile.%s does not exist" % (lib,machine))
|
||||||
|
|
||||||
|
lines = open("Makefile.%s" % machine,'r').readlines()
|
||||||
|
fp = open("Makefile.auto",'w')
|
||||||
|
|
||||||
|
for line in lines:
|
||||||
|
words = line.split()
|
||||||
|
if len(words) == 3 and extraflag and \
|
||||||
|
words[0] == "EXTRAMAKE" and words[1] == '=':
|
||||||
|
line = line.replace(words[2],"Makefile.lammps.%s" % suffix)
|
||||||
|
print >>fp,line,
|
||||||
|
|
||||||
|
fp.close()
|
||||||
|
|
||||||
|
# make the library via Makefile.auto
|
||||||
|
|
||||||
|
print "Building lib%s.a ..." % lib
|
||||||
|
cmd = "make -f Makefile.auto clean; make -f Makefile.auto"
|
||||||
|
txt = commands.getoutput(cmd)
|
||||||
|
print txt
|
||||||
|
|
||||||
|
if os.path.exists("lib%s.a" % lib): print "Build was successful"
|
||||||
|
else: error("Build of lib/%s/lib%s.a was NOT successful" % (lib,lib))
|
||||||
|
if not os.path.exists("Makefile.lammps"):
|
||||||
|
print "lib/%s/Makefile.lammps was NOT created" % lib
|
||||||
@ -17,6 +17,11 @@ links against when using the REAX package.
|
|||||||
This library must be built with a F90 compiler, before LAMMPS is
|
This library must be built with a F90 compiler, before LAMMPS is
|
||||||
built, so LAMMPS can link against it.
|
built, so LAMMPS can link against it.
|
||||||
|
|
||||||
|
You can type "make lib-reax" from the src directory to see help on how
|
||||||
|
to build this library via make commands, or you can do the same thing
|
||||||
|
by typing "python Install.py" from within this directory, or you can
|
||||||
|
do it manually by following the instructions below.
|
||||||
|
|
||||||
Build the library using one of the provided Makefile.* files or create
|
Build the library using one of the provided Makefile.* files or create
|
||||||
your own, specific to your compiler and system. For example:
|
your own, specific to your compiler and system. For example:
|
||||||
|
|
||||||
|
|||||||
103
lib/smd/Install.py
Normal file
103
lib/smd/Install.py
Normal file
@ -0,0 +1,103 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
# Install.py tool to download, unpack, and point to the Eigen library
|
||||||
|
# used to automate the steps described in the README file in this dir
|
||||||
|
|
||||||
|
import sys,os,re,glob,commands
|
||||||
|
|
||||||
|
# help message
|
||||||
|
|
||||||
|
help = """
|
||||||
|
Syntax: python Install.py -h hpath hdir -g -l
|
||||||
|
specify one or more options, order does not matter
|
||||||
|
-h = set home dir of Eigen to be hpath/hdir
|
||||||
|
hpath can be full path, contain '~' or '.' chars
|
||||||
|
default hpath = . = lib/smd
|
||||||
|
default hdir = "ee" = what tarball unpacks to (eigen-eigen-*)
|
||||||
|
-g = grab (download) tarball from http://eigen.tuxfamily.org website
|
||||||
|
unpack it to hpath/hdir
|
||||||
|
hpath must already exist
|
||||||
|
if hdir already exists, it will be deleted before unpack
|
||||||
|
-l = create softlink (includelink) in lib/smd to Eigen src dir
|
||||||
|
"""
|
||||||
|
|
||||||
|
# settings
|
||||||
|
|
||||||
|
url = "http://bitbucket.org/eigen/eigen/get/3.3.3.tar.gz"
|
||||||
|
tarball = "eigen.tar.gz"
|
||||||
|
|
||||||
|
# print error message or help
|
||||||
|
|
||||||
|
def error(str=None):
|
||||||
|
if not str: print help
|
||||||
|
else: print "ERROR",str
|
||||||
|
sys.exit()
|
||||||
|
|
||||||
|
# expand to full path name
|
||||||
|
# process leading '~' or relative path
|
||||||
|
|
||||||
|
def fullpath(path):
|
||||||
|
return os.path.abspath(os.path.expanduser(path))
|
||||||
|
|
||||||
|
# parse args
|
||||||
|
|
||||||
|
args = sys.argv[1:]
|
||||||
|
nargs = len(args)
|
||||||
|
if nargs == 0: error()
|
||||||
|
|
||||||
|
homepath = "."
|
||||||
|
homedir = "ee"
|
||||||
|
|
||||||
|
grabflag = 0
|
||||||
|
linkflag = 0
|
||||||
|
|
||||||
|
iarg = 0
|
||||||
|
while iarg < nargs:
|
||||||
|
if args[iarg] == "-h":
|
||||||
|
if iarg+3 > nargs: error()
|
||||||
|
homepath = args[iarg+1]
|
||||||
|
homedir = args[iarg+2]
|
||||||
|
iarg += 3
|
||||||
|
elif args[iarg] == "-g":
|
||||||
|
grabflag = 1
|
||||||
|
iarg += 1
|
||||||
|
elif args[iarg] == "-l":
|
||||||
|
linkflag = 1
|
||||||
|
iarg += 1
|
||||||
|
else: error()
|
||||||
|
|
||||||
|
homepath = fullpath(homepath)
|
||||||
|
if not os.path.isdir(homepath): error("Eigen path does not exist")
|
||||||
|
|
||||||
|
# download and unpack Eigen tarball
|
||||||
|
# glob to find name of dir it unpacks to
|
||||||
|
|
||||||
|
if grabflag:
|
||||||
|
print "Downloading Eigen ..."
|
||||||
|
cmd = "curl -L %s > %s/%s" % (url,homepath,tarball)
|
||||||
|
print cmd
|
||||||
|
print commands.getoutput(cmd)
|
||||||
|
|
||||||
|
print "Unpacking Eigen tarball ..."
|
||||||
|
edir = glob.glob("%s/eigen-eigen-*" % homepath)
|
||||||
|
for one in edir:
|
||||||
|
if os.path.isdir(one): commands.getoutput("rm -rf %s" % one)
|
||||||
|
cmd = "cd %s; tar zxvf %s" % (homepath,tarball)
|
||||||
|
commands.getoutput(cmd)
|
||||||
|
if homedir != "ee":
|
||||||
|
if os.path.exists(homedir): commands.getoutput("rm -rf %s" % homedir)
|
||||||
|
edir = glob.glob("%s/eigen-eigen-*" % homepath)
|
||||||
|
os.rename(edir[0],"%s/%s" % (homepath,homedir))
|
||||||
|
|
||||||
|
# create link in lib/smd to Eigen src dir
|
||||||
|
|
||||||
|
if linkflag:
|
||||||
|
print "Creating link to Eigen files"
|
||||||
|
if os.path.isfile("includelink") or os.path.islink("includelink"):
|
||||||
|
os.remove("includelink")
|
||||||
|
if homedir == "ee":
|
||||||
|
edir = glob.glob("%s/eigen-eigen-*" % homepath)
|
||||||
|
linkdir = edir[0]
|
||||||
|
else: linkdir = "%s/%s" % (homepath,homedir)
|
||||||
|
cmd = "ln -s %s includelink" % linkdir
|
||||||
|
commands.getoutput(cmd)
|
||||||
@ -4,9 +4,12 @@ to use the USER-SMD package in a LAMMPS input script.
|
|||||||
The Eigen library is available at http://eigen.tuxfamily.org. It's
|
The Eigen library is available at http://eigen.tuxfamily.org. It's
|
||||||
a general C++ template library for linear algebra.
|
a general C++ template library for linear algebra.
|
||||||
|
|
||||||
You must perform the following steps yourself, or you can use the
|
You can type "make lib-smd" from the src directory to see help on how
|
||||||
install.py Python script to automate any or all steps of the process.
|
to download build this library via make commands, or you can do the
|
||||||
Type "python install.py" for instructions.
|
same thing by typing "python Install.py" from within this directory,
|
||||||
|
or you can do it manually by following the instructions below.
|
||||||
|
|
||||||
|
Instructions:
|
||||||
|
|
||||||
1. Download the Eigen tarball at http://eigen.tuxfamily.org and
|
1. Download the Eigen tarball at http://eigen.tuxfamily.org and
|
||||||
unpack the tarball either in this /lib/smd directory or somewhere
|
unpack the tarball either in this /lib/smd directory or somewhere
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
|
|
||||||
# install.py tool to download, unpack, build, and link to the Voro++ library
|
# Install.py tool to download, unpack, build, and link to the Voro++ library
|
||||||
# used to automate the steps described in the README file in this dir
|
# used to automate the steps described in the README file in this dir
|
||||||
|
|
||||||
import sys,os,re,urllib,commands
|
import sys,os,re,urllib,commands
|
||||||
@ -8,19 +8,20 @@ import sys,os,re,urllib,commands
|
|||||||
# help message
|
# help message
|
||||||
|
|
||||||
help = """
|
help = """
|
||||||
Syntax: install.py -v version -g gdir [gname] -b bdir -l ldir
|
Syntax: python Install.py -v version -h hpath hdir -g -b -l
|
||||||
specify one or more options, order does not matter
|
specify one or more options, order does not matter
|
||||||
gdir,bdir,ldir can be paths relative to lib/latte, full paths, or contain ~
|
|
||||||
-v = version of Voro++ to download and build
|
-v = version of Voro++ to download and build
|
||||||
default = voro++-0.4.6 (current as of Jan 2015)
|
default version = voro++-0.4.6 (current as of Jan 2015)
|
||||||
-g = grab (download) from math.lbl.gov/voro++ website
|
-h = set home dir of Voro++ to be hpath/hdir
|
||||||
unpack tarfile in gdir to produce version dir (e.g. voro++-0.4.6)
|
hpath can be full path, contain '~' or '.' chars
|
||||||
if optional gname specified, rename version dir to gname within gdir
|
default hpath = . = lib/voronoi
|
||||||
-b = build Voro++, bdir = Voro++ home directory
|
default hdir = voro++-0.4.6 = what tarball unpacks to
|
||||||
note that bdir must include the version suffix unless renamed
|
-g = grab (download) tarball from math.lbl.gov/voro++ website
|
||||||
-l = create 2 softlinks (includelink,liblink)
|
unpack it to hpath/hdir
|
||||||
in lib/voronoi to src dir of ldir = Voro++ home directory
|
hpath must already exist
|
||||||
note that ldir must include the version suffix unless renamed
|
if hdir already exists, it will be deleted before unpack
|
||||||
|
-b = build Voro++ library in its src dir
|
||||||
|
-l = create 2 softlinks (includelink,liblink) in lib/voronoi to Voro++ src dir
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# settings
|
# settings
|
||||||
@ -47,6 +48,9 @@ args = sys.argv[1:]
|
|||||||
nargs = len(args)
|
nargs = len(args)
|
||||||
if nargs == 0: error()
|
if nargs == 0: error()
|
||||||
|
|
||||||
|
homepath = "."
|
||||||
|
homedir = version
|
||||||
|
|
||||||
grabflag = 0
|
grabflag = 0
|
||||||
buildflag = 0
|
buildflag = 0
|
||||||
linkflag = 0
|
linkflag = 0
|
||||||
@ -57,48 +61,46 @@ while iarg < nargs:
|
|||||||
if iarg+2 > nargs: error()
|
if iarg+2 > nargs: error()
|
||||||
version = args[iarg+1]
|
version = args[iarg+1]
|
||||||
iarg += 2
|
iarg += 2
|
||||||
|
elif args[iarg] == "-h":
|
||||||
|
if iarg+3 > nargs: error()
|
||||||
|
homepath = args[iarg+1]
|
||||||
|
homedir = args[iarg+2]
|
||||||
|
iarg += 3
|
||||||
elif args[iarg] == "-g":
|
elif args[iarg] == "-g":
|
||||||
if iarg+2 > nargs: error()
|
|
||||||
grabflag = 1
|
grabflag = 1
|
||||||
grabdir = args[iarg+1]
|
iarg += 1
|
||||||
grabname = None
|
|
||||||
if iarg+2 < nargs and args[iarg+2][0] != '-':
|
|
||||||
grabname = args[iarg+2]
|
|
||||||
iarg += 1
|
|
||||||
iarg += 2
|
|
||||||
elif args[iarg] == "-b":
|
elif args[iarg] == "-b":
|
||||||
if iarg+2 > nargs: error()
|
|
||||||
buildflag = 1
|
buildflag = 1
|
||||||
builddir = args[iarg+1]
|
iarg += 1
|
||||||
iarg += 2
|
|
||||||
elif args[iarg] == "-l":
|
elif args[iarg] == "-l":
|
||||||
if iarg+2 > nargs: error()
|
|
||||||
linkflag = 1
|
linkflag = 1
|
||||||
linkdir = args[iarg+1]
|
iarg += 1
|
||||||
iarg += 2
|
|
||||||
else: error()
|
else: error()
|
||||||
|
|
||||||
|
homepath = fullpath(homepath)
|
||||||
|
if not os.path.isdir(homepath): error("Voro++ path does not exist")
|
||||||
|
homedir = "%s/%s" % (homepath,homedir)
|
||||||
|
|
||||||
# download and unpack Voro++ tarball
|
# download and unpack Voro++ tarball
|
||||||
|
|
||||||
if grabflag:
|
if grabflag:
|
||||||
print "Downloading Voro++ ..."
|
print "Downloading Voro++ ..."
|
||||||
grabdir = fullpath(grabdir)
|
urllib.urlretrieve(url,"%s/%s.tar.gz" % (homepath,version))
|
||||||
if not os.path.isdir(grabdir): error("Grab directory does not exist")
|
|
||||||
urllib.urlretrieve(url,"%s/%s.tar.gz" % (grabdir,version))
|
|
||||||
|
|
||||||
print "Unpacking Voro++ tarball ..."
|
print "Unpacking Voro++ tarball ..."
|
||||||
tardir = "%s/%s" % (grabdir,version)
|
if os.path.exists("%s/%s" % (homepath,version)):
|
||||||
if os.path.exists(tardir): commands.getoutput("rm -rf %s" % tardir)
|
commands.getoutput("rm -rf %s/%s" % (homepath,version))
|
||||||
cmd = "cd %s; tar zxvf %s.tar.gz" % (grabdir,version)
|
cmd = "cd %s; tar zxvf %s.tar.gz" % (homepath,version)
|
||||||
txt = commands.getoutput(cmd)
|
commands.getoutput(cmd)
|
||||||
print tardir,grabdir,grabname
|
if os.path.basename(homedir) != version:
|
||||||
if grabname: os.rename(tardir,"%s/%s" % (grabdir,grabname))
|
if os.path.exists(homedir): commands.getoutput("rm -rf %s" % homedir)
|
||||||
|
os.rename("%s/%s" % (homepath,version),homedir)
|
||||||
|
|
||||||
# build Voro++
|
# build Voro++
|
||||||
|
|
||||||
if buildflag:
|
if buildflag:
|
||||||
print "Building Voro++ ..."
|
print "Building Voro++ ..."
|
||||||
cmd = "cd %s; make" % builddir
|
cmd = "cd %s; make" % homedir
|
||||||
txt = commands.getoutput(cmd)
|
txt = commands.getoutput(cmd)
|
||||||
print txt
|
print txt
|
||||||
|
|
||||||
@ -110,7 +112,7 @@ if linkflag:
|
|||||||
os.remove("includelink")
|
os.remove("includelink")
|
||||||
if os.path.isfile("liblink") or os.path.islink("liblink"):
|
if os.path.isfile("liblink") or os.path.islink("liblink"):
|
||||||
os.remove("liblink")
|
os.remove("liblink")
|
||||||
cmd = "ln -s %s/src includelink" % linkdir
|
cmd = "ln -s %s/src includelink" % homedir
|
||||||
commands.getoutput(cmd)
|
commands.getoutput(cmd)
|
||||||
cmd = "ln -s %s/src liblink" % linkdir
|
cmd = "ln -s %s/src liblink" % homedir
|
||||||
commands.getoutput(cmd)
|
commands.getoutput(cmd)
|
||||||
|
|||||||
@ -6,11 +6,15 @@ The Voro++ library is available at http://math.lbl.gov/voro++ and was
|
|||||||
developed by Chris H. Rycroft while at UC Berkeley / Lawrence Berkeley
|
developed by Chris H. Rycroft while at UC Berkeley / Lawrence Berkeley
|
||||||
Laboratory.
|
Laboratory.
|
||||||
|
|
||||||
|
You can type "make lib-voronoi" from the src directory to see help on
|
||||||
|
how to download and build this library via make commands, or you can
|
||||||
|
do the same thing by typing "python Install.py" from within this
|
||||||
|
directory, or you can do it manually by following the instructions
|
||||||
|
below.
|
||||||
|
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
You must perform the following steps yourself, or you can use the
|
Instructions:
|
||||||
Install.py Python script to automate any or all steps of the process.
|
|
||||||
Type "python Install.py" for instructions.
|
|
||||||
|
|
||||||
1. Download Voro++ at http://math.lbl.gov/voro++/download
|
1. Download Voro++ at http://math.lbl.gov/voro++/download
|
||||||
either as a tarball or via SVN, and unpack the
|
either as a tarball or via SVN, and unpack the
|
||||||
|
|||||||
@ -1,13 +1,12 @@
|
|||||||
# Settings that the LAMMPS build will import when this package library is used
|
# Settings that the LAMMPS build will import when this package library is used
|
||||||
#
|
|
||||||
# settings for VTK-5.8.0 on RHEL/CentOS 6.x
|
# settings for VTK-5.8.0 on RHEL/CentOS 6.x
|
||||||
vtk_SYSINC = -I/usr/include/vtk
|
vtk_SYSINC = -I/usr/include/vtk
|
||||||
vtk_SYSLIB = -lvtkCommon -lvtkIO
|
vtk_SYSLIB = -lvtkCommon -lvtkIO
|
||||||
vtk_SYSPATH = -L/usr/lib64/vtk
|
vtk_SYSPATH = -L/usr/lib64/vtk
|
||||||
#
|
|
||||||
# settings for VTK 6.2.0 on Fedora 23
|
# settings for VTK 6.2.0 on Fedora 23
|
||||||
#vtk_SYSINC = -I/usr/include/vtk
|
#vtk_SYSINC = -I/usr/include/vtk
|
||||||
#vtk_SYSLIB = -lvtkCommonCore -lvtkIOCore -lvtkCommonDataModel -lvtkIOXML -lvtkIOLegacy -lvtkIOParallelXML
|
#vtk_SYSLIB = -lvtkCommonCore -lvtkIOCore -lvtkCommonDataModel -lvtkIOXML -lvtkIOLegacy -lvtkIOParallelXML
|
||||||
#vtk_SYSPATH = -L/usr/lib64/vtk
|
#vtk_SYSPATH = -L/usr/lib64/vtk
|
||||||
#
|
|
||||||
|
|
||||||
|
|||||||
@ -1,14 +1,15 @@
|
|||||||
The Makefile.lammps file in this directory is used when building LAMMPS with
|
The Makefile.lammps file in this directory is used when building
|
||||||
its USER-VTK package installed. The file has several settings needed to
|
LAMMPS with its USER-VTK package installed. The file has several
|
||||||
compile and link LAMMPS with the VTK library. You should choose a
|
settings needed to compile and link LAMMPS with the VTK library. You
|
||||||
Makefile.lammps.* file compatible with your system and your version of VTK, and
|
should choose a Makefile.lammps.* file compatible with your system and
|
||||||
copy it to Makefile.lammps before building LAMMPS itself. You may need to edit
|
your version of VTK, and copy it to Makefile.lammps before building
|
||||||
one of the provided files to match your system.
|
LAMMPS itself. You may need to edit one of the provided files to
|
||||||
|
match your system.
|
||||||
|
|
||||||
If you create a new Makefile.lammps file suitable for some version of VTK on
|
If you create a new Makefile.lammps file suitable for some version of
|
||||||
some system, that is not a match to one of the provided Makefile.lammps.*
|
VTK on some system, that is not a match to one of the provided
|
||||||
files, you can send it to the developers, and we can include it in the
|
Makefile.lammps.* files, you can send it to the developers, and we can
|
||||||
distribution for others to use.
|
include it in the distribution for others to use.
|
||||||
|
|
||||||
To illustrate, these are example settings from the
|
To illustrate, these are example settings from the
|
||||||
Makefile.lammps.ubuntu14.04_vtk6 file:
|
Makefile.lammps.ubuntu14.04_vtk6 file:
|
||||||
@ -19,10 +20,11 @@ vtk_SYSPATH =
|
|||||||
|
|
||||||
vtk_SYSINC refers to the include directory of the installed VTK library
|
vtk_SYSINC refers to the include directory of the installed VTK library
|
||||||
|
|
||||||
vtk_SYSLIB refers to the libraries needed to link to from an application
|
vtk_SYSLIB refers to the libraries needed to link to from an
|
||||||
(LAMMPS in this case) to "embed" VTK in the application. VTK consists of
|
application (LAMMPS in this case) to "embed" VTK in the
|
||||||
multiple shared libraries which are needed when using the USER-VTK package.
|
application. VTK consists of multiple shared libraries which are
|
||||||
|
needed when using the USER-VTK package.
|
||||||
|
|
||||||
vtk_SYSPATH = refers to the path (e.g. -L/usr/local/lib) where the VTK library
|
vtk_SYSPATH = refers to the path (e.g. -L/usr/local/lib) where the VTK
|
||||||
can be found. You may not need this setting if the path is already included in
|
library can be found. You may not need this setting if the path is
|
||||||
your LD_LIBRARY_PATH environment variable.
|
already included in your LD_LIBRARY_PATH environment variable.
|
||||||
|
|||||||
@ -2294,12 +2294,12 @@ void PairReaxCKokkos<DeviceType>::operator()(PairReaxComputeMulti2<NEIGHFLAG,EVF
|
|||||||
int numbonds = d_bo_num[i];
|
int numbonds = d_bo_num[i];
|
||||||
|
|
||||||
e_lp = 0.0;
|
e_lp = 0.0;
|
||||||
if (numbonds > 0)
|
if (numbonds > 0 || control->enobondsflag)
|
||||||
e_lp = p_lp2 * d_Delta_lp[i] * inv_expvd2;
|
e_lp = p_lp2 * d_Delta_lp[i] * inv_expvd2;
|
||||||
const F_FLOAT dElp = p_lp2 * inv_expvd2 + 75.0 * p_lp2 * d_Delta_lp[i] * expvd2 * inv_expvd2*inv_expvd2;
|
const F_FLOAT dElp = p_lp2 * inv_expvd2 + 75.0 * p_lp2 * d_Delta_lp[i] * expvd2 * inv_expvd2*inv_expvd2;
|
||||||
const F_FLOAT CElp = dElp * d_dDelta_lp[i];
|
const F_FLOAT CElp = dElp * d_dDelta_lp[i];
|
||||||
|
|
||||||
if (numbonds > 0)
|
if (numbonds > 0 || control->enobondsflag)
|
||||||
a_CdDelta[i] += CElp;
|
a_CdDelta[i] += CElp;
|
||||||
|
|
||||||
if (eflag) ev.ereax[0] += e_lp;
|
if (eflag) ev.ereax[0] += e_lp;
|
||||||
@ -2336,7 +2336,7 @@ void PairReaxCKokkos<DeviceType>::operator()(PairReaxComputeMulti2<NEIGHFLAG,EVF
|
|||||||
const F_FLOAT inv_exp_ovun8 = 1.0 / (1.0 + exp_ovun8);
|
const F_FLOAT inv_exp_ovun8 = 1.0 / (1.0 + exp_ovun8);
|
||||||
|
|
||||||
e_un = 0;
|
e_un = 0;
|
||||||
if (numbonds > 0)
|
if (numbonds > 0 || control->enobondsflag)
|
||||||
e_un = -p_ovun5 * (1.0 - exp_ovun6) * inv_exp_ovun2n * inv_exp_ovun8;
|
e_un = -p_ovun5 * (1.0 - exp_ovun6) * inv_exp_ovun2n * inv_exp_ovun8;
|
||||||
|
|
||||||
if (eflag) ev.ereax[2] += e_un;
|
if (eflag) ev.ereax[2] += e_un;
|
||||||
@ -2356,7 +2356,7 @@ void PairReaxCKokkos<DeviceType>::operator()(PairReaxComputeMulti2<NEIGHFLAG,EVF
|
|||||||
// multibody forces
|
// multibody forces
|
||||||
|
|
||||||
a_CdDelta[i] += CEover3;
|
a_CdDelta[i] += CEover3;
|
||||||
if (numbonds > 0)
|
if (numbonds > 0 || control->enobondsflag)
|
||||||
a_CdDelta[i] += CEunder3;
|
a_CdDelta[i] += CEunder3;
|
||||||
|
|
||||||
const int j_start = d_bo_first[i];
|
const int j_start = d_bo_first[i];
|
||||||
|
|||||||
@ -57,6 +57,10 @@ PairLJCharmmfswCoulLong::PairLJCharmmfswCoulLong(LAMMPS *lmp) : Pair(lmp)
|
|||||||
implicit = 0;
|
implicit = 0;
|
||||||
mix_flag = ARITHMETIC;
|
mix_flag = ARITHMETIC;
|
||||||
writedata = 1;
|
writedata = 1;
|
||||||
|
|
||||||
|
// short-range/long-range flag accessed by DihedralCharmmfsw
|
||||||
|
|
||||||
|
dihedflag = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
@ -669,10 +673,6 @@ void PairLJCharmmfswCoulLong::settings(int narg, char **arg)
|
|||||||
cut_lj = force->numeric(FLERR,arg[1]);
|
cut_lj = force->numeric(FLERR,arg[1]);
|
||||||
if (narg == 2) cut_coul = cut_lj;
|
if (narg == 2) cut_coul = cut_lj;
|
||||||
else cut_coul = force->numeric(FLERR,arg[2]);
|
else cut_coul = force->numeric(FLERR,arg[2]);
|
||||||
|
|
||||||
// indicates pair_style being used for dihedral_charmm
|
|
||||||
|
|
||||||
dihedflag = 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
/* ----------------------------------------------------------------------
|
||||||
|
|||||||
@ -42,6 +42,10 @@ PairLJCharmmfswCoulCharmmfsh::PairLJCharmmfswCoulCharmmfsh(LAMMPS *lmp) :
|
|||||||
implicit = 0;
|
implicit = 0;
|
||||||
mix_flag = ARITHMETIC;
|
mix_flag = ARITHMETIC;
|
||||||
writedata = 1;
|
writedata = 1;
|
||||||
|
|
||||||
|
// short-range/long-range flag accessed by DihedralCharmmfsw
|
||||||
|
|
||||||
|
dihedflag = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
@ -235,10 +239,6 @@ void PairLJCharmmfswCoulCharmmfsh::settings(int narg, char **arg)
|
|||||||
} else {
|
} else {
|
||||||
cut_coul = force->numeric(FLERR,arg[2]);
|
cut_coul = force->numeric(FLERR,arg[2]);
|
||||||
}
|
}
|
||||||
|
|
||||||
// indicates pair_style being used for dihedral_charmm
|
|
||||||
|
|
||||||
dihedflag = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
/* ----------------------------------------------------------------------
|
||||||
@ -535,7 +535,7 @@ void *PairLJCharmmfswCoulCharmmfsh::extract(const char *str, int &dim)
|
|||||||
dim = 0;
|
dim = 0;
|
||||||
if (strcmp(str,"implicit") == 0) return (void *) &implicit;
|
if (strcmp(str,"implicit") == 0) return (void *) &implicit;
|
||||||
|
|
||||||
// info extracted by dihedral_charmmf
|
// info extracted by dihedral_charmmfsw
|
||||||
|
|
||||||
if (strcmp(str,"cut_coul") == 0) return (void *) &cut_coul;
|
if (strcmp(str,"cut_coul") == 0) return (void *) &cut_coul;
|
||||||
if (strcmp(str,"cut_lj_inner") == 0) return (void *) &cut_lj_inner;
|
if (strcmp(str,"cut_lj_inner") == 0) return (void *) &cut_lj_inner;
|
||||||
|
|||||||
34
src/Makefile
34
src/Makefile
@ -46,39 +46,37 @@ endif
|
|||||||
# PACKAGE = standard packages
|
# PACKAGE = standard packages
|
||||||
# PACKUSER = user packagse
|
# PACKUSER = user packagse
|
||||||
# PACKLIB = all packages that require an additional lib
|
# PACKLIB = all packages that require an additional lib
|
||||||
|
# should be PACKSYS + PACKINT + PACKEXT
|
||||||
# PACKSYS = subset that reqiure a common system library
|
# PACKSYS = subset that reqiure a common system library
|
||||||
|
# include MPIIO and LB b/c require full MPI, not just STUBS
|
||||||
# PACKINT = subset that require an internal (provided) library
|
# PACKINT = subset that require an internal (provided) library
|
||||||
# PACKEXT = subset that require an external (downloaded) library
|
# PACKEXT = subset that require an external (downloaded) library
|
||||||
# PACKLIB = PACKSYS + PACKING + PACKEXT
|
|
||||||
# PACKSCRIPT = libs under lammps/lib that have an Install.py script
|
|
||||||
|
|
||||||
PACKAGE = asphere body class2 colloid compress coreshell dipole gpu \
|
PACKAGE = asphere body class2 colloid compress coreshell dipole gpu \
|
||||||
granular kim kokkos kspace manybody mc meam misc molecule \
|
granular kim kokkos kspace manybody mc meam misc molecule \
|
||||||
mpiio mscg opt peri poems \
|
mpiio mscg opt peri poems \
|
||||||
python qeq reax replica rigid shock snap srd voronoi
|
python qeq reax replica rigid shock snap srd voronoi
|
||||||
|
|
||||||
PACKUSER = user-atc user-awpmd user-cgsdk user-cgdna user-colvars \
|
PACKUSER = user-atc user-awpmd user-cgdna user-cgsdk user-colvars \
|
||||||
user-diffraction user-dpd user-drude user-eff user-fep user-h5md \
|
user-diffraction user-dpd user-drude user-eff user-fep user-h5md \
|
||||||
user-intel user-lb user-manifold user-mgpt user-misc user-molfile \
|
user-intel user-lb user-manifold user-mgpt user-misc user-molfile \
|
||||||
user-nc-dump user-omp user-phonon user-qmmm user-qtb \
|
user-netcdf user-omp user-phonon user-qmmm user-qtb \
|
||||||
user-quip user-reaxc user-smd user-smtbq user-sph user-tally \
|
user-quip user-reaxc user-smd user-smtbq user-sph user-tally \
|
||||||
user-vtk
|
user-vtk
|
||||||
|
|
||||||
PACKLIB = compress gpu kim kokkos meam mpiio mscg poems \
|
PACKLIB = compress gpu kim kokkos meam mpiio mscg poems \
|
||||||
python reax voronoi \
|
python reax voronoi \
|
||||||
user-atc user-awpmd user-colvars user-h5md user-molfile \
|
user-atc user-awpmd user-colvars user-h5md user-lb user-molfile \
|
||||||
user-nc-dump user-qmmm user-quip user-smd user-vtk
|
user-netcdf user-qmmm user-quip user-smd user-vtk
|
||||||
|
|
||||||
PACKSYS = compress mpiio python
|
PACKSYS = compress mpiio python user-lb
|
||||||
|
|
||||||
PACKINT = gpu kokkos meam poems reax user-atc user-awpmd user-colvars
|
PACKINT = gpu kokkos meam poems reax user-atc user-awpmd user-colvars
|
||||||
|
|
||||||
PACKEXT = kim mscg voronoi \
|
PACKEXT = kim mscg voronoi \
|
||||||
user-h5md user-molfile user-nc-dump user-qmmm user-quip \
|
user-h5md user-molfile user-netcdf user-qmmm user-quip \
|
||||||
user-smd user-vtk
|
user-smd user-vtk
|
||||||
|
|
||||||
PACKSCRIPT = voronoi
|
|
||||||
|
|
||||||
PACKALL = $(PACKAGE) $(PACKUSER)
|
PACKALL = $(PACKAGE) $(PACKUSER)
|
||||||
|
|
||||||
PACKAGEUC = $(shell echo $(PACKAGE) | tr a-z A-Z)
|
PACKAGEUC = $(shell echo $(PACKAGE) | tr a-z A-Z)
|
||||||
@ -87,6 +85,7 @@ PACKUSERUC = $(shell echo $(PACKUSER) | tr a-z A-Z)
|
|||||||
YESDIR = $(shell echo $(@:yes-%=%) | tr a-z A-Z)
|
YESDIR = $(shell echo $(@:yes-%=%) | tr a-z A-Z)
|
||||||
NODIR = $(shell echo $(@:no-%=%) | tr a-z A-Z)
|
NODIR = $(shell echo $(@:no-%=%) | tr a-z A-Z)
|
||||||
LIBDIR = $(shell echo $(@:lib-%=%))
|
LIBDIR = $(shell echo $(@:lib-%=%))
|
||||||
|
LIBUSERDIR = $(shell echo $(@:lib-user-%=%))
|
||||||
|
|
||||||
# List of all targets
|
# List of all targets
|
||||||
|
|
||||||
@ -108,7 +107,7 @@ help:
|
|||||||
@echo 'make no-standard (no-std) remove all standard pkgs'
|
@echo 'make no-standard (no-std) remove all standard pkgs'
|
||||||
@echo 'make yes-user install all user pkgs'
|
@echo 'make yes-user install all user pkgs'
|
||||||
@echo 'make no-user remove all user pkgs'
|
@echo 'make no-user remove all user pkgs'
|
||||||
@echo 'make yes-lib install all pkgs with libs (incldued or ext)'
|
@echo 'make yes-lib install all pkgs with libs (included or ext)'
|
||||||
@echo 'make no-lib remove all pkgs with libs (included or ext)'
|
@echo 'make no-lib remove all pkgs with libs (included or ext)'
|
||||||
@echo 'make yes-ext install all pkgs with external libs'
|
@echo 'make yes-ext install all pkgs with external libs'
|
||||||
@echo 'make no-ext remove all pkgs with external libs'
|
@echo 'make no-ext remove all pkgs with external libs'
|
||||||
@ -273,7 +272,7 @@ package:
|
|||||||
@echo 'make package-overwrite replace package files with src files'
|
@echo 'make package-overwrite replace package files with src files'
|
||||||
@echo 'make package-diff (pd) diff src files against package file'
|
@echo 'make package-diff (pd) diff src files against package file'
|
||||||
@echo ''
|
@echo ''
|
||||||
@echo 'make lib-package download/build/install a package library'
|
@echo 'make lib-package build and/or download a package library'
|
||||||
|
|
||||||
yes-all:
|
yes-all:
|
||||||
@for p in $(PACKALL); do $(MAKE) yes-$$p; done
|
@for p in $(PACKALL); do $(MAKE) yes-$$p; done
|
||||||
@ -338,11 +337,14 @@ no-%:
|
|||||||
# download/build/install a package library
|
# download/build/install a package library
|
||||||
|
|
||||||
lib-%:
|
lib-%:
|
||||||
@if [ ! -e ../lib/$(LIBDIR)/Install.py ]; then \
|
@if [ -e ../lib/$(LIBDIR)/Install.py ]; then \
|
||||||
echo "Install script for lib $(@:lib-%=%) does not exist"; \
|
echo "Installing lib $(@:lib-%=%)"; \
|
||||||
else \
|
|
||||||
echo "Installing lib for package $(@:lib-%=%)"; \
|
|
||||||
cd ../lib/$(LIBDIR); python Install.py $(args); \
|
cd ../lib/$(LIBDIR); python Install.py $(args); \
|
||||||
|
elif [ -e ../lib/$(LIBUSERDIR)/Install.py ]; then \
|
||||||
|
echo "Installing lib $(@:lib-user-%=%)"; \
|
||||||
|
cd ../lib/$(LIBUSERDIR); python Install.py $(args); \
|
||||||
|
else \
|
||||||
|
echo "Install script for lib $(@:lib-%=%) does not exist"; \
|
||||||
fi;
|
fi;
|
||||||
|
|
||||||
# status = list src files that differ from package files
|
# status = list src files that differ from package files
|
||||||
|
|||||||
@ -1419,12 +1419,14 @@ void FixShake::shake(int m)
|
|||||||
domain->minimum_image(r01);
|
domain->minimum_image(r01);
|
||||||
|
|
||||||
// s01 = distance vec after unconstrained update, with PBC
|
// s01 = distance vec after unconstrained update, with PBC
|
||||||
|
// use Domain::minimum_image_once(), not minimum_image()
|
||||||
|
// b/c xshake values might be huge, due to e.g. fix gcmc
|
||||||
|
|
||||||
double s01[3];
|
double s01[3];
|
||||||
s01[0] = xshake[i0][0] - xshake[i1][0];
|
s01[0] = xshake[i0][0] - xshake[i1][0];
|
||||||
s01[1] = xshake[i0][1] - xshake[i1][1];
|
s01[1] = xshake[i0][1] - xshake[i1][1];
|
||||||
s01[2] = xshake[i0][2] - xshake[i1][2];
|
s01[2] = xshake[i0][2] - xshake[i1][2];
|
||||||
domain->minimum_image(s01);
|
domain->minimum_image_once(s01);
|
||||||
|
|
||||||
// scalar distances between atoms
|
// scalar distances between atoms
|
||||||
|
|
||||||
@ -1526,18 +1528,20 @@ void FixShake::shake3(int m)
|
|||||||
domain->minimum_image(r02);
|
domain->minimum_image(r02);
|
||||||
|
|
||||||
// s01,s02 = distance vec after unconstrained update, with PBC
|
// s01,s02 = distance vec after unconstrained update, with PBC
|
||||||
|
// use Domain::minimum_image_once(), not minimum_image()
|
||||||
|
// b/c xshake values might be huge, due to e.g. fix gcmc
|
||||||
|
|
||||||
double s01[3];
|
double s01[3];
|
||||||
s01[0] = xshake[i0][0] - xshake[i1][0];
|
s01[0] = xshake[i0][0] - xshake[i1][0];
|
||||||
s01[1] = xshake[i0][1] - xshake[i1][1];
|
s01[1] = xshake[i0][1] - xshake[i1][1];
|
||||||
s01[2] = xshake[i0][2] - xshake[i1][2];
|
s01[2] = xshake[i0][2] - xshake[i1][2];
|
||||||
domain->minimum_image(s01);
|
domain->minimum_image_once(s01);
|
||||||
|
|
||||||
double s02[3];
|
double s02[3];
|
||||||
s02[0] = xshake[i0][0] - xshake[i2][0];
|
s02[0] = xshake[i0][0] - xshake[i2][0];
|
||||||
s02[1] = xshake[i0][1] - xshake[i2][1];
|
s02[1] = xshake[i0][1] - xshake[i2][1];
|
||||||
s02[2] = xshake[i0][2] - xshake[i2][2];
|
s02[2] = xshake[i0][2] - xshake[i2][2];
|
||||||
domain->minimum_image(s02);
|
domain->minimum_image_once(s02);
|
||||||
|
|
||||||
// scalar distances between atoms
|
// scalar distances between atoms
|
||||||
|
|
||||||
@ -1699,24 +1703,26 @@ void FixShake::shake4(int m)
|
|||||||
domain->minimum_image(r03);
|
domain->minimum_image(r03);
|
||||||
|
|
||||||
// s01,s02,s03 = distance vec after unconstrained update, with PBC
|
// s01,s02,s03 = distance vec after unconstrained update, with PBC
|
||||||
|
// use Domain::minimum_image_once(), not minimum_image()
|
||||||
|
// b/c xshake values might be huge, due to e.g. fix gcmc
|
||||||
|
|
||||||
double s01[3];
|
double s01[3];
|
||||||
s01[0] = xshake[i0][0] - xshake[i1][0];
|
s01[0] = xshake[i0][0] - xshake[i1][0];
|
||||||
s01[1] = xshake[i0][1] - xshake[i1][1];
|
s01[1] = xshake[i0][1] - xshake[i1][1];
|
||||||
s01[2] = xshake[i0][2] - xshake[i1][2];
|
s01[2] = xshake[i0][2] - xshake[i1][2];
|
||||||
domain->minimum_image(s01);
|
domain->minimum_image_once(s01);
|
||||||
|
|
||||||
double s02[3];
|
double s02[3];
|
||||||
s02[0] = xshake[i0][0] - xshake[i2][0];
|
s02[0] = xshake[i0][0] - xshake[i2][0];
|
||||||
s02[1] = xshake[i0][1] - xshake[i2][1];
|
s02[1] = xshake[i0][1] - xshake[i2][1];
|
||||||
s02[2] = xshake[i0][2] - xshake[i2][2];
|
s02[2] = xshake[i0][2] - xshake[i2][2];
|
||||||
domain->minimum_image(s02);
|
domain->minimum_image_once(s02);
|
||||||
|
|
||||||
double s03[3];
|
double s03[3];
|
||||||
s03[0] = xshake[i0][0] - xshake[i3][0];
|
s03[0] = xshake[i0][0] - xshake[i3][0];
|
||||||
s03[1] = xshake[i0][1] - xshake[i3][1];
|
s03[1] = xshake[i0][1] - xshake[i3][1];
|
||||||
s03[2] = xshake[i0][2] - xshake[i3][2];
|
s03[2] = xshake[i0][2] - xshake[i3][2];
|
||||||
domain->minimum_image(s03);
|
domain->minimum_image_once(s03);
|
||||||
|
|
||||||
// scalar distances between atoms
|
// scalar distances between atoms
|
||||||
|
|
||||||
@ -1941,24 +1947,26 @@ void FixShake::shake3angle(int m)
|
|||||||
domain->minimum_image(r12);
|
domain->minimum_image(r12);
|
||||||
|
|
||||||
// s01,s02,s12 = distance vec after unconstrained update, with PBC
|
// s01,s02,s12 = distance vec after unconstrained update, with PBC
|
||||||
|
// use Domain::minimum_image_once(), not minimum_image()
|
||||||
|
// b/c xshake values might be huge, due to e.g. fix gcmc
|
||||||
|
|
||||||
double s01[3];
|
double s01[3];
|
||||||
s01[0] = xshake[i0][0] - xshake[i1][0];
|
s01[0] = xshake[i0][0] - xshake[i1][0];
|
||||||
s01[1] = xshake[i0][1] - xshake[i1][1];
|
s01[1] = xshake[i0][1] - xshake[i1][1];
|
||||||
s01[2] = xshake[i0][2] - xshake[i1][2];
|
s01[2] = xshake[i0][2] - xshake[i1][2];
|
||||||
domain->minimum_image(s01);
|
domain->minimum_image_once(s01);
|
||||||
|
|
||||||
double s02[3];
|
double s02[3];
|
||||||
s02[0] = xshake[i0][0] - xshake[i2][0];
|
s02[0] = xshake[i0][0] - xshake[i2][0];
|
||||||
s02[1] = xshake[i0][1] - xshake[i2][1];
|
s02[1] = xshake[i0][1] - xshake[i2][1];
|
||||||
s02[2] = xshake[i0][2] - xshake[i2][2];
|
s02[2] = xshake[i0][2] - xshake[i2][2];
|
||||||
domain->minimum_image(s02);
|
domain->minimum_image_once(s02);
|
||||||
|
|
||||||
double s12[3];
|
double s12[3];
|
||||||
s12[0] = xshake[i1][0] - xshake[i2][0];
|
s12[0] = xshake[i1][0] - xshake[i2][0];
|
||||||
s12[1] = xshake[i1][1] - xshake[i2][1];
|
s12[1] = xshake[i1][1] - xshake[i2][1];
|
||||||
s12[2] = xshake[i1][2] - xshake[i2][2];
|
s12[2] = xshake[i1][2] - xshake[i2][2];
|
||||||
domain->minimum_image(s12);
|
domain->minimum_image_once(s12);
|
||||||
|
|
||||||
// scalar distances between atoms
|
// scalar distances between atoms
|
||||||
|
|
||||||
@ -2055,6 +2063,7 @@ void FixShake::shake3angle(int m)
|
|||||||
double quad1,quad2,quad3,b1,b2,b3,lamda01_new,lamda02_new,lamda12_new;
|
double quad1,quad2,quad3,b1,b2,b3,lamda01_new,lamda02_new,lamda12_new;
|
||||||
|
|
||||||
while (!done && niter < max_iter) {
|
while (!done && niter < max_iter) {
|
||||||
|
|
||||||
quad1 = quad1_0101 * lamda01*lamda01 +
|
quad1 = quad1_0101 * lamda01*lamda01 +
|
||||||
quad1_0202 * lamda02*lamda02 +
|
quad1_0202 * lamda02*lamda02 +
|
||||||
quad1_1212 * lamda12*lamda12 +
|
quad1_1212 * lamda12*lamda12 +
|
||||||
|
|||||||
@ -48,7 +48,8 @@ ComputeSNAAtom::ComputeSNAAtom(LAMMPS *lmp, int narg, char **arg) :
|
|||||||
diagonalstyle = 0;
|
diagonalstyle = 0;
|
||||||
rmin0 = 0.0;
|
rmin0 = 0.0;
|
||||||
switchflag = 1;
|
switchflag = 1;
|
||||||
bzeroflag = 0;
|
bzeroflag = 1;
|
||||||
|
quadraticflag = 0;
|
||||||
|
|
||||||
// offset by 1 to match up with types
|
// offset by 1 to match up with types
|
||||||
|
|
||||||
@ -106,6 +107,11 @@ ComputeSNAAtom::ComputeSNAAtom(LAMMPS *lmp, int narg, char **arg) :
|
|||||||
error->all(FLERR,"Illegal compute sna/atom command");
|
error->all(FLERR,"Illegal compute sna/atom command");
|
||||||
bzeroflag = atoi(arg[iarg+1]);
|
bzeroflag = atoi(arg[iarg+1]);
|
||||||
iarg += 2;
|
iarg += 2;
|
||||||
|
} else if (strcmp(arg[iarg],"quadraticflag") == 0) {
|
||||||
|
if (iarg+2 > narg)
|
||||||
|
error->all(FLERR,"Illegal compute sna/atom command");
|
||||||
|
quadraticflag = atoi(arg[iarg+1]);
|
||||||
|
iarg += 2;
|
||||||
} else error->all(FLERR,"Illegal compute sna/atom command");
|
} else error->all(FLERR,"Illegal compute sna/atom command");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -122,8 +128,9 @@ ComputeSNAAtom::ComputeSNAAtom(LAMMPS *lmp, int narg, char **arg) :
|
|||||||
}
|
}
|
||||||
|
|
||||||
ncoeff = snaptr[0]->ncoeff;
|
ncoeff = snaptr[0]->ncoeff;
|
||||||
peratom_flag = 1;
|
|
||||||
size_peratom_cols = ncoeff;
|
size_peratom_cols = ncoeff;
|
||||||
|
if (quadraticflag) size_peratom_cols += ncoeff*ncoeff;
|
||||||
|
peratom_flag = 1;
|
||||||
|
|
||||||
nmax = 0;
|
nmax = 0;
|
||||||
njmax = 0;
|
njmax = 0;
|
||||||
@ -264,8 +271,16 @@ void ComputeSNAAtom::compute_peratom()
|
|||||||
snaptr[tid]->copy_bi2bvec();
|
snaptr[tid]->copy_bi2bvec();
|
||||||
for (int icoeff = 0; icoeff < ncoeff; icoeff++)
|
for (int icoeff = 0; icoeff < ncoeff; icoeff++)
|
||||||
sna[i][icoeff] = snaptr[tid]->bvec[icoeff];
|
sna[i][icoeff] = snaptr[tid]->bvec[icoeff];
|
||||||
|
if (quadraticflag) {
|
||||||
|
int ncount = ncoeff;
|
||||||
|
for (int icoeff = 0; icoeff < ncoeff; icoeff++) {
|
||||||
|
double bi = snaptr[tid]->bvec[icoeff];
|
||||||
|
for (int jcoeff = 0; jcoeff < ncoeff; jcoeff++)
|
||||||
|
sna[i][ncount++] = bi*snaptr[tid]->bvec[jcoeff];
|
||||||
|
}
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
for (int icoeff = 0; icoeff < ncoeff; icoeff++)
|
for (int icoeff = 0; icoeff < size_peratom_cols; icoeff++)
|
||||||
sna[i][icoeff] = 0.0;
|
sna[i][icoeff] = 0.0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -44,7 +44,7 @@ class ComputeSNAAtom : public Compute {
|
|||||||
double *wjelem;
|
double *wjelem;
|
||||||
class SNA** snaptr;
|
class SNA** snaptr;
|
||||||
double cutmax;
|
double cutmax;
|
||||||
|
int quadraticflag;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -48,9 +48,11 @@ ComputeSNADAtom::ComputeSNADAtom(LAMMPS *lmp, int narg, char **arg) :
|
|||||||
diagonalstyle = 0;
|
diagonalstyle = 0;
|
||||||
rmin0 = 0.0;
|
rmin0 = 0.0;
|
||||||
switchflag = 1;
|
switchflag = 1;
|
||||||
bzeroflag = 0;
|
bzeroflag = 1;
|
||||||
|
quadraticflag = 0;
|
||||||
|
|
||||||
// process required arguments
|
// process required arguments
|
||||||
|
|
||||||
memory->create(radelem,ntypes+1,"sna/atom:radelem"); // offset by 1 to match up with types
|
memory->create(radelem,ntypes+1,"sna/atom:radelem"); // offset by 1 to match up with types
|
||||||
memory->create(wjelem,ntypes+1,"sna/atom:wjelem");
|
memory->create(wjelem,ntypes+1,"sna/atom:wjelem");
|
||||||
rcutfac = atof(arg[3]);
|
rcutfac = atof(arg[3]);
|
||||||
@ -60,11 +62,15 @@ ComputeSNADAtom::ComputeSNADAtom(LAMMPS *lmp, int narg, char **arg) :
|
|||||||
radelem[i+1] = atof(arg[6+i]);
|
radelem[i+1] = atof(arg[6+i]);
|
||||||
for(int i = 0; i < ntypes; i++)
|
for(int i = 0; i < ntypes; i++)
|
||||||
wjelem[i+1] = atof(arg[6+ntypes+i]);
|
wjelem[i+1] = atof(arg[6+ntypes+i]);
|
||||||
|
|
||||||
// construct cutsq
|
// construct cutsq
|
||||||
|
|
||||||
double cut;
|
double cut;
|
||||||
|
cutmax = 0.0;
|
||||||
memory->create(cutsq,ntypes+1,ntypes+1,"sna/atom:cutsq");
|
memory->create(cutsq,ntypes+1,ntypes+1,"sna/atom:cutsq");
|
||||||
for(int i = 1; i <= ntypes; i++) {
|
for(int i = 1; i <= ntypes; i++) {
|
||||||
cut = 2.0*radelem[i]*rcutfac;
|
cut = 2.0*radelem[i]*rcutfac;
|
||||||
|
if (cut > cutmax) cutmax = cut;
|
||||||
cutsq[i][i] = cut*cut;
|
cutsq[i][i] = cut*cut;
|
||||||
for(int j = i+1; j <= ntypes; j++) {
|
for(int j = i+1; j <= ntypes; j++) {
|
||||||
cut = (radelem[i]+radelem[j])*rcutfac;
|
cut = (radelem[i]+radelem[j])*rcutfac;
|
||||||
@ -94,6 +100,11 @@ ComputeSNADAtom::ComputeSNADAtom(LAMMPS *lmp, int narg, char **arg) :
|
|||||||
error->all(FLERR,"Illegal compute snad/atom command");
|
error->all(FLERR,"Illegal compute snad/atom command");
|
||||||
switchflag = atoi(arg[iarg+1]);
|
switchflag = atoi(arg[iarg+1]);
|
||||||
iarg += 2;
|
iarg += 2;
|
||||||
|
} else if (strcmp(arg[iarg],"quadraticflag") == 0) {
|
||||||
|
if (iarg+2 > narg)
|
||||||
|
error->all(FLERR,"Illegal compute snad/atom command");
|
||||||
|
quadraticflag = atoi(arg[iarg+1]);
|
||||||
|
iarg += 2;
|
||||||
} else error->all(FLERR,"Illegal compute snad/atom command");
|
} else error->all(FLERR,"Illegal compute snad/atom command");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -110,9 +121,19 @@ ComputeSNADAtom::ComputeSNADAtom(LAMMPS *lmp, int narg, char **arg) :
|
|||||||
}
|
}
|
||||||
|
|
||||||
ncoeff = snaptr[0]->ncoeff;
|
ncoeff = snaptr[0]->ncoeff;
|
||||||
peratom_flag = 1;
|
twoncoeff = 2*ncoeff;
|
||||||
size_peratom_cols = 3*ncoeff*atom->ntypes;
|
threencoeff = 3*ncoeff;
|
||||||
|
size_peratom_cols = threencoeff*atom->ntypes;
|
||||||
|
if (quadraticflag) {
|
||||||
|
ncoeffsq = ncoeff*ncoeff;
|
||||||
|
twoncoeffsq = 2*ncoeffsq;
|
||||||
|
threencoeffsq = 3*ncoeffsq;
|
||||||
|
size_peratom_cols +=
|
||||||
|
threencoeffsq*atom->ntypes;
|
||||||
|
}
|
||||||
comm_reverse = size_peratom_cols;
|
comm_reverse = size_peratom_cols;
|
||||||
|
peratom_flag = 1;
|
||||||
|
|
||||||
nmax = 0;
|
nmax = 0;
|
||||||
njmax = 0;
|
njmax = 0;
|
||||||
snad = NULL;
|
snad = NULL;
|
||||||
@ -136,10 +157,9 @@ void ComputeSNADAtom::init()
|
|||||||
{
|
{
|
||||||
if (force->pair == NULL)
|
if (force->pair == NULL)
|
||||||
error->all(FLERR,"Compute snad/atom requires a pair style be defined");
|
error->all(FLERR,"Compute snad/atom requires a pair style be defined");
|
||||||
// TODO: Not sure what to do with this error check since cutoff radius is not
|
|
||||||
// a single number
|
if (cutmax > force->pair->cutforce)
|
||||||
//if (sqrt(cutsq) > force->pair->cutforce)
|
error->all(FLERR,"Compute sna/atom cutoff is longer than pairwise cutoff");
|
||||||
//error->all(FLERR,"Compute snad/atom cutoff is longer than pairwise cutoff");
|
|
||||||
|
|
||||||
// need an occasional full neighbor list
|
// need an occasional full neighbor list
|
||||||
|
|
||||||
@ -228,7 +248,9 @@ void ComputeSNADAtom::compute_peratom()
|
|||||||
const int* const jlist = firstneigh[i];
|
const int* const jlist = firstneigh[i];
|
||||||
const int jnum = numneigh[i];
|
const int jnum = numneigh[i];
|
||||||
|
|
||||||
const int typeoffset = 3*ncoeff*(atom->type[i]-1);
|
const int typeoffset = threencoeff*(atom->type[i]-1);
|
||||||
|
const int quadraticoffset = threencoeff*atom->ntypes +
|
||||||
|
threencoeffsq*(atom->type[i]-1);
|
||||||
|
|
||||||
// insure rij, inside, and typej are of size jnum
|
// insure rij, inside, and typej are of size jnum
|
||||||
|
|
||||||
@ -262,6 +284,10 @@ void ComputeSNADAtom::compute_peratom()
|
|||||||
|
|
||||||
snaptr[tid]->compute_ui(ninside);
|
snaptr[tid]->compute_ui(ninside);
|
||||||
snaptr[tid]->compute_zi();
|
snaptr[tid]->compute_zi();
|
||||||
|
if (quadraticflag) {
|
||||||
|
snaptr[tid]->compute_bi();
|
||||||
|
snaptr[tid]->copy_bi2bvec();
|
||||||
|
}
|
||||||
|
|
||||||
for (int jj = 0; jj < ninside; jj++) {
|
for (int jj = 0; jj < ninside; jj++) {
|
||||||
const int j = snaptr[tid]->inside[jj];
|
const int j = snaptr[tid]->inside[jj];
|
||||||
@ -279,11 +305,38 @@ void ComputeSNADAtom::compute_peratom()
|
|||||||
for (int icoeff = 0; icoeff < ncoeff; icoeff++) {
|
for (int icoeff = 0; icoeff < ncoeff; icoeff++) {
|
||||||
snadi[icoeff] += snaptr[tid]->dbvec[icoeff][0];
|
snadi[icoeff] += snaptr[tid]->dbvec[icoeff][0];
|
||||||
snadi[icoeff+ncoeff] += snaptr[tid]->dbvec[icoeff][1];
|
snadi[icoeff+ncoeff] += snaptr[tid]->dbvec[icoeff][1];
|
||||||
snadi[icoeff+2*ncoeff] += snaptr[tid]->dbvec[icoeff][2];
|
snadi[icoeff+twoncoeff] += snaptr[tid]->dbvec[icoeff][2];
|
||||||
snadj[icoeff] -= snaptr[tid]->dbvec[icoeff][0];
|
snadj[icoeff] -= snaptr[tid]->dbvec[icoeff][0];
|
||||||
snadj[icoeff+ncoeff] -= snaptr[tid]->dbvec[icoeff][1];
|
snadj[icoeff+ncoeff] -= snaptr[tid]->dbvec[icoeff][1];
|
||||||
snadj[icoeff+2*ncoeff] -= snaptr[tid]->dbvec[icoeff][2];
|
snadj[icoeff+twoncoeff] -= snaptr[tid]->dbvec[icoeff][2];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (quadraticflag) {
|
||||||
|
double *snadi = snad[i]+quadraticoffset;
|
||||||
|
double *snadj = snad[j]+quadraticoffset;
|
||||||
|
int ncount = 0;
|
||||||
|
for (int icoeff = 0; icoeff < ncoeff; icoeff++) {
|
||||||
|
double bi = snaptr[tid]->bvec[icoeff];
|
||||||
|
double bix = snaptr[tid]->dbvec[icoeff][0];
|
||||||
|
double biy = snaptr[tid]->dbvec[icoeff][1];
|
||||||
|
double biz = snaptr[tid]->dbvec[icoeff][2];
|
||||||
|
for (int jcoeff = 0; jcoeff < ncoeff; jcoeff++) {
|
||||||
|
double dbxtmp = bi*snaptr[tid]->dbvec[jcoeff][0]
|
||||||
|
+ bix*snaptr[tid]->bvec[jcoeff];
|
||||||
|
double dbytmp = bi*snaptr[tid]->dbvec[jcoeff][1]
|
||||||
|
+ biy*snaptr[tid]->bvec[jcoeff];
|
||||||
|
double dbztmp = bi*snaptr[tid]->dbvec[jcoeff][2]
|
||||||
|
+ biz*snaptr[tid]->bvec[jcoeff];
|
||||||
|
snadi[ncount] += dbxtmp;
|
||||||
|
snadi[ncount+ncoeffsq] += dbytmp;
|
||||||
|
snadi[ncount+twoncoeffsq] += dbztmp;
|
||||||
|
snadj[ncount] -= dbxtmp;
|
||||||
|
snadj[ncount+ncoeffsq] -= dbytmp;
|
||||||
|
snadj[ncount+twoncoeffsq] -= dbztmp;
|
||||||
|
ncount++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -331,7 +384,8 @@ double ComputeSNADAtom::memory_usage()
|
|||||||
double bytes = nmax*size_peratom_cols * sizeof(double);
|
double bytes = nmax*size_peratom_cols * sizeof(double);
|
||||||
bytes += 3*njmax*sizeof(double);
|
bytes += 3*njmax*sizeof(double);
|
||||||
bytes += njmax*sizeof(int);
|
bytes += njmax*sizeof(int);
|
||||||
bytes += ncoeff*3;
|
bytes += threencoeff*atom->ntypes;
|
||||||
|
if (quadraticflag) bytes += threencoeffsq*atom->ntypes;
|
||||||
bytes += snaptr[0]->memory_usage()*comm->nthreads;
|
bytes += snaptr[0]->memory_usage()*comm->nthreads;
|
||||||
return bytes;
|
return bytes;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -37,7 +37,7 @@ class ComputeSNADAtom : public Compute {
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
int nmax, njmax, diagonalstyle;
|
int nmax, njmax, diagonalstyle;
|
||||||
int ncoeff;
|
int ncoeff, twoncoeff, threencoeff, ncoeffsq, twoncoeffsq, threencoeffsq;
|
||||||
double **cutsq;
|
double **cutsq;
|
||||||
class NeighList *list;
|
class NeighList *list;
|
||||||
double **snad;
|
double **snad;
|
||||||
@ -45,7 +45,8 @@ class ComputeSNADAtom : public Compute {
|
|||||||
double *radelem;
|
double *radelem;
|
||||||
double *wjelem;
|
double *wjelem;
|
||||||
class SNA** snaptr;
|
class SNA** snaptr;
|
||||||
|
double cutmax;
|
||||||
|
int quadraticflag;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -38,8 +38,6 @@ ComputeSNAVAtom::ComputeSNAVAtom(LAMMPS *lmp, int narg, char **arg) :
|
|||||||
radelem = NULL;
|
radelem = NULL;
|
||||||
wjelem = NULL;
|
wjelem = NULL;
|
||||||
|
|
||||||
nvirial = 6;
|
|
||||||
|
|
||||||
int ntypes = atom->ntypes;
|
int ntypes = atom->ntypes;
|
||||||
int nargmin = 6+2*ntypes;
|
int nargmin = 6+2*ntypes;
|
||||||
|
|
||||||
@ -50,9 +48,11 @@ ComputeSNAVAtom::ComputeSNAVAtom(LAMMPS *lmp, int narg, char **arg) :
|
|||||||
diagonalstyle = 0;
|
diagonalstyle = 0;
|
||||||
rmin0 = 0.0;
|
rmin0 = 0.0;
|
||||||
switchflag = 1;
|
switchflag = 1;
|
||||||
bzeroflag = 0;
|
bzeroflag = 1;
|
||||||
|
quadraticflag = 0;
|
||||||
|
|
||||||
// process required arguments
|
// process required arguments
|
||||||
|
|
||||||
memory->create(radelem,ntypes+1,"sna/atom:radelem"); // offset by 1 to match up with types
|
memory->create(radelem,ntypes+1,"sna/atom:radelem"); // offset by 1 to match up with types
|
||||||
memory->create(wjelem,ntypes+1,"sna/atom:wjelem");
|
memory->create(wjelem,ntypes+1,"sna/atom:wjelem");
|
||||||
rcutfac = atof(arg[3]);
|
rcutfac = atof(arg[3]);
|
||||||
@ -96,6 +96,11 @@ ComputeSNAVAtom::ComputeSNAVAtom(LAMMPS *lmp, int narg, char **arg) :
|
|||||||
error->all(FLERR,"Illegal compute snav/atom command");
|
error->all(FLERR,"Illegal compute snav/atom command");
|
||||||
switchflag = atoi(arg[iarg+1]);
|
switchflag = atoi(arg[iarg+1]);
|
||||||
iarg += 2;
|
iarg += 2;
|
||||||
|
} else if (strcmp(arg[iarg],"quadraticflag") == 0) {
|
||||||
|
if (iarg+2 > narg)
|
||||||
|
error->all(FLERR,"Illegal compute snav/atom command");
|
||||||
|
quadraticflag = atoi(arg[iarg+1]);
|
||||||
|
iarg += 2;
|
||||||
} else error->all(FLERR,"Illegal compute snav/atom command");
|
} else error->all(FLERR,"Illegal compute snav/atom command");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -112,9 +117,24 @@ ComputeSNAVAtom::ComputeSNAVAtom(LAMMPS *lmp, int narg, char **arg) :
|
|||||||
}
|
}
|
||||||
|
|
||||||
ncoeff = snaptr[0]->ncoeff;
|
ncoeff = snaptr[0]->ncoeff;
|
||||||
peratom_flag = 1;
|
twoncoeff = 2*ncoeff;
|
||||||
size_peratom_cols = nvirial*ncoeff*atom->ntypes;
|
threencoeff = 3*ncoeff;
|
||||||
|
fourncoeff = 4*ncoeff;
|
||||||
|
fivencoeff = 5*ncoeff;
|
||||||
|
sixncoeff = 6*ncoeff;
|
||||||
|
size_peratom_cols = sixncoeff*atom->ntypes;
|
||||||
|
if (quadraticflag) {
|
||||||
|
ncoeffsq = ncoeff*ncoeff;
|
||||||
|
twoncoeffsq = 2*ncoeffsq;
|
||||||
|
threencoeffsq = 3*ncoeffsq;
|
||||||
|
fourncoeffsq = 4*ncoeffsq;
|
||||||
|
fivencoeffsq = 5*ncoeffsq;
|
||||||
|
sixncoeffsq = 6*ncoeffsq;
|
||||||
|
size_peratom_cols +=
|
||||||
|
sixncoeffsq*atom->ntypes;
|
||||||
|
}
|
||||||
comm_reverse = size_peratom_cols;
|
comm_reverse = size_peratom_cols;
|
||||||
|
peratom_flag = 1;
|
||||||
|
|
||||||
nmax = 0;
|
nmax = 0;
|
||||||
njmax = 0;
|
njmax = 0;
|
||||||
@ -231,7 +251,9 @@ void ComputeSNAVAtom::compute_peratom()
|
|||||||
const int* const jlist = firstneigh[i];
|
const int* const jlist = firstneigh[i];
|
||||||
const int jnum = numneigh[i];
|
const int jnum = numneigh[i];
|
||||||
|
|
||||||
const int typeoffset = nvirial*ncoeff*(atom->type[i]-1);
|
const int typeoffset = sixncoeff*(atom->type[i]-1);
|
||||||
|
const int quadraticoffset = sixncoeff*atom->ntypes +
|
||||||
|
sixncoeffsq*(atom->type[i]-1);
|
||||||
|
|
||||||
// insure rij, inside, and typej are of size jnum
|
// insure rij, inside, and typej are of size jnum
|
||||||
|
|
||||||
@ -265,6 +287,10 @@ void ComputeSNAVAtom::compute_peratom()
|
|||||||
|
|
||||||
snaptr[tid]->compute_ui(ninside);
|
snaptr[tid]->compute_ui(ninside);
|
||||||
snaptr[tid]->compute_zi();
|
snaptr[tid]->compute_zi();
|
||||||
|
if (quadraticflag) {
|
||||||
|
snaptr[tid]->compute_bi();
|
||||||
|
snaptr[tid]->copy_bi2bvec();
|
||||||
|
}
|
||||||
|
|
||||||
for (int jj = 0; jj < ninside; jj++) {
|
for (int jj = 0; jj < ninside; jj++) {
|
||||||
const int j = snaptr[tid]->inside[jj];
|
const int j = snaptr[tid]->inside[jj];
|
||||||
@ -281,19 +307,52 @@ void ComputeSNAVAtom::compute_peratom()
|
|||||||
double *snavj = snav[j]+typeoffset;
|
double *snavj = snav[j]+typeoffset;
|
||||||
|
|
||||||
for (int icoeff = 0; icoeff < ncoeff; icoeff++) {
|
for (int icoeff = 0; icoeff < ncoeff; icoeff++) {
|
||||||
snavi[icoeff] += snaptr[tid]->dbvec[icoeff][0]*xtmp;
|
snavi[icoeff] += snaptr[tid]->dbvec[icoeff][0]*xtmp;
|
||||||
snavi[icoeff+ncoeff] += snaptr[tid]->dbvec[icoeff][1]*ytmp;
|
snavi[icoeff+ncoeff] += snaptr[tid]->dbvec[icoeff][1]*ytmp;
|
||||||
snavi[icoeff+2*ncoeff] += snaptr[tid]->dbvec[icoeff][2]*ztmp;
|
snavi[icoeff+twoncoeff] += snaptr[tid]->dbvec[icoeff][2]*ztmp;
|
||||||
snavi[icoeff+3*ncoeff] += snaptr[tid]->dbvec[icoeff][1]*ztmp;
|
snavi[icoeff+threencoeff] += snaptr[tid]->dbvec[icoeff][1]*ztmp;
|
||||||
snavi[icoeff+4*ncoeff] += snaptr[tid]->dbvec[icoeff][0]*ztmp;
|
snavi[icoeff+fourncoeff] += snaptr[tid]->dbvec[icoeff][0]*ztmp;
|
||||||
snavi[icoeff+5*ncoeff] += snaptr[tid]->dbvec[icoeff][0]*ytmp;
|
snavi[icoeff+fivencoeff] += snaptr[tid]->dbvec[icoeff][0]*ytmp;
|
||||||
snavj[icoeff] -= snaptr[tid]->dbvec[icoeff][0]*x[j][0];
|
snavj[icoeff] -= snaptr[tid]->dbvec[icoeff][0]*x[j][0];
|
||||||
snavj[icoeff+ncoeff] -= snaptr[tid]->dbvec[icoeff][1]*x[j][1];
|
snavj[icoeff+ncoeff] -= snaptr[tid]->dbvec[icoeff][1]*x[j][1];
|
||||||
snavj[icoeff+2*ncoeff] -= snaptr[tid]->dbvec[icoeff][2]*x[j][2];
|
snavj[icoeff+twoncoeff] -= snaptr[tid]->dbvec[icoeff][2]*x[j][2];
|
||||||
snavj[icoeff+3*ncoeff] -= snaptr[tid]->dbvec[icoeff][1]*x[j][2];
|
snavj[icoeff+threencoeff] -= snaptr[tid]->dbvec[icoeff][1]*x[j][2];
|
||||||
snavj[icoeff+4*ncoeff] -= snaptr[tid]->dbvec[icoeff][0]*x[j][2];
|
snavj[icoeff+fourncoeff] -= snaptr[tid]->dbvec[icoeff][0]*x[j][2];
|
||||||
snavj[icoeff+5*ncoeff] -= snaptr[tid]->dbvec[icoeff][0]*x[j][1];
|
snavj[icoeff+fivencoeff] -= snaptr[tid]->dbvec[icoeff][0]*x[j][1];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (quadraticflag) {
|
||||||
|
double *snavi = snav[i]+quadraticoffset;
|
||||||
|
double *snavj = snav[j]+quadraticoffset;
|
||||||
|
int ncount = 0;
|
||||||
|
for (int icoeff = 0; icoeff < ncoeff; icoeff++) {
|
||||||
|
double bi = snaptr[tid]->bvec[icoeff];
|
||||||
|
double bix = snaptr[tid]->dbvec[icoeff][0];
|
||||||
|
double biy = snaptr[tid]->dbvec[icoeff][1];
|
||||||
|
double biz = snaptr[tid]->dbvec[icoeff][2];
|
||||||
|
for (int jcoeff = 0; jcoeff < ncoeff; jcoeff++) {
|
||||||
|
double dbxtmp = bi*snaptr[tid]->dbvec[jcoeff][0]
|
||||||
|
+ bix*snaptr[tid]->bvec[jcoeff];
|
||||||
|
double dbytmp = bi*snaptr[tid]->dbvec[jcoeff][1]
|
||||||
|
+ biy*snaptr[tid]->bvec[jcoeff];
|
||||||
|
double dbztmp = bi*snaptr[tid]->dbvec[jcoeff][2]
|
||||||
|
+ biz*snaptr[tid]->bvec[jcoeff];
|
||||||
|
snavi[ncount] += dbxtmp*xtmp;
|
||||||
|
snavi[ncount+ncoeffsq] += dbytmp*ytmp;
|
||||||
|
snavi[ncount+twoncoeffsq] += dbztmp*ztmp;
|
||||||
|
snavi[ncount+threencoeffsq] += dbytmp*ztmp;
|
||||||
|
snavi[ncount+fourncoeffsq] += dbxtmp*ztmp;
|
||||||
|
snavi[ncount+fivencoeffsq] += dbxtmp*ytmp;
|
||||||
|
snavj[ncount] -= dbxtmp*x[j][0];
|
||||||
|
snavj[ncount+ncoeffsq] -= dbytmp*x[j][1];
|
||||||
|
snavj[ncount+twoncoeffsq] -= dbztmp*x[j][2];
|
||||||
|
snavj[ncount+threencoeffsq] -= dbytmp*x[j][2];
|
||||||
|
snavj[ncount+fourncoeffsq] -= dbxtmp*x[j][2];
|
||||||
|
snavj[ncount+fivencoeffsq] -= dbxtmp*x[j][1];
|
||||||
|
ncount++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -341,7 +400,8 @@ double ComputeSNAVAtom::memory_usage()
|
|||||||
double bytes = nmax*size_peratom_cols * sizeof(double);
|
double bytes = nmax*size_peratom_cols * sizeof(double);
|
||||||
bytes += 3*njmax*sizeof(double);
|
bytes += 3*njmax*sizeof(double);
|
||||||
bytes += njmax*sizeof(int);
|
bytes += njmax*sizeof(int);
|
||||||
bytes += ncoeff*nvirial;
|
bytes += sixncoeff*atom->ntypes;
|
||||||
|
if (quadraticflag) bytes += sixncoeffsq*atom->ntypes;
|
||||||
bytes += snaptr[0]->memory_usage()*comm->nthreads;
|
bytes += snaptr[0]->memory_usage()*comm->nthreads;
|
||||||
return bytes;
|
return bytes;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -37,16 +37,17 @@ class ComputeSNAVAtom : public Compute {
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
int nmax, njmax, diagonalstyle;
|
int nmax, njmax, diagonalstyle;
|
||||||
int ncoeff,nvirial;
|
int ncoeff, twoncoeff, threencoeff, fourncoeff, fivencoeff, sixncoeff;
|
||||||
|
int ncoeffsq, twoncoeffsq, threencoeffsq, fourncoeffsq, fivencoeffsq, sixncoeffsq;
|
||||||
double **cutsq;
|
double **cutsq;
|
||||||
class NeighList *list;
|
class NeighList *list;
|
||||||
double **snav;
|
double **snav;
|
||||||
double rcutfac;
|
double rcutfac;
|
||||||
double *radelem;
|
double *radelem;
|
||||||
double *wjelem;
|
double *wjelem;
|
||||||
|
|
||||||
class SNA** snaptr;
|
class SNA** snaptr;
|
||||||
|
double cutmax;
|
||||||
|
int quadraticflag;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1635,7 +1635,8 @@ void PairSNAP::read_files(char *coefffilename, char *paramfilename)
|
|||||||
rmin0 = 0.0;
|
rmin0 = 0.0;
|
||||||
diagonalstyle = 3;
|
diagonalstyle = 3;
|
||||||
switchflag = 1;
|
switchflag = 1;
|
||||||
bzeroflag = 0;
|
bzeroflag = 1;
|
||||||
|
|
||||||
// open SNAP parameter file on proc 0
|
// open SNAP parameter file on proc 0
|
||||||
|
|
||||||
FILE *fpparam;
|
FILE *fpparam;
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
USER-NC-DUMP
|
USER-NETCDF
|
||||||
============
|
============
|
||||||
|
|
||||||
This package provides the nc and (optionally) the nc/mpiio dump styles.
|
This package provides the netcf and netcdf/mpiio dump styles.
|
||||||
See the doc page for dump nc or dump nc/mpiio command for how to use them.
|
See the doc page for dump nc or dump nc/mpiio command for how to use them.
|
||||||
Compiling these dump styles requires having the netCDF library installed
|
Compiling these dump styles requires having the netCDF library installed
|
||||||
on your system. See lib/netcdf/README for additional details.
|
on your system. See lib/netcdf/README for additional details.
|
||||||
@ -32,14 +32,14 @@
|
|||||||
|
|
||||||
See the README file in the top-level LAMMPS directory.
|
See the README file in the top-level LAMMPS directory.
|
||||||
------------------------------------------------------------------------- */
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
#if defined(LMP_HAS_NETCDF)
|
#if defined(LMP_HAS_NETCDF)
|
||||||
|
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#include <netcdf.h>
|
#include <netcdf.h>
|
||||||
|
#include "dump_netcdf.h"
|
||||||
#include "atom.h"
|
#include "atom.h"
|
||||||
#include "comm.h"
|
#include "comm.h"
|
||||||
#include "compute.h"
|
#include "compute.h"
|
||||||
@ -56,8 +56,6 @@
|
|||||||
#include "variable.h"
|
#include "variable.h"
|
||||||
#include "force.h"
|
#include "force.h"
|
||||||
|
|
||||||
#include "dump_nc.h"
|
|
||||||
|
|
||||||
using namespace LAMMPS_NS;
|
using namespace LAMMPS_NS;
|
||||||
using namespace MathConst;
|
using namespace MathConst;
|
||||||
|
|
||||||
@ -91,7 +89,7 @@ const int THIS_IS_A_BIGINT = -4;
|
|||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
DumpNC::DumpNC(LAMMPS *lmp, int narg, char **arg) :
|
DumpNetCDF::DumpNetCDF(LAMMPS *lmp, int narg, char **arg) :
|
||||||
DumpCustom(lmp, narg, arg)
|
DumpCustom(lmp, narg, arg)
|
||||||
{
|
{
|
||||||
// arrays for data rearrangement
|
// arrays for data rearrangement
|
||||||
@ -224,7 +222,7 @@ DumpNC::DumpNC(LAMMPS *lmp, int narg, char **arg) :
|
|||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
DumpNC::~DumpNC()
|
DumpNetCDF::~DumpNetCDF()
|
||||||
{
|
{
|
||||||
closefile();
|
closefile();
|
||||||
|
|
||||||
@ -238,7 +236,7 @@ DumpNC::~DumpNC()
|
|||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
void DumpNC::openfile()
|
void DumpNetCDF::openfile()
|
||||||
{
|
{
|
||||||
// now the computes and fixes have been initialized, so we can query
|
// now the computes and fixes have been initialized, so we can query
|
||||||
// for the size of vector quantities
|
// for the size of vector quantities
|
||||||
@ -594,12 +592,12 @@ void DumpNC::openfile()
|
|||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
void DumpNC::closefile()
|
void DumpNetCDF::closefile()
|
||||||
{
|
{
|
||||||
if (filewriter && singlefile_opened) {
|
if (filewriter && singlefile_opened) {
|
||||||
NCERR( nc_close(ncid) );
|
NCERR( nc_close(ncid) );
|
||||||
singlefile_opened = 0;
|
singlefile_opened = 0;
|
||||||
// append next time DumpNC::openfile is called
|
// append next time DumpNetCDF::openfile is called
|
||||||
append_flag = 1;
|
append_flag = 1;
|
||||||
// write to next frame upon next open
|
// write to next frame upon next open
|
||||||
framei++;
|
framei++;
|
||||||
@ -608,7 +606,7 @@ void DumpNC::closefile()
|
|||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
void DumpNC::write()
|
void DumpNetCDF::write()
|
||||||
{
|
{
|
||||||
// open file
|
// open file
|
||||||
|
|
||||||
@ -678,7 +676,7 @@ void DumpNC::write()
|
|||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
void DumpNC::write_header(bigint n)
|
void DumpNetCDF::write_header(bigint n)
|
||||||
{
|
{
|
||||||
size_t start[2];
|
size_t start[2];
|
||||||
|
|
||||||
@ -753,7 +751,7 @@ void DumpNC::write_header(bigint n)
|
|||||||
write head of block (mass & element name) only if has atoms of the type
|
write head of block (mass & element name) only if has atoms of the type
|
||||||
------------------------------------------------------------------------- */
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
void DumpNC::write_data(int n, double *mybuf)
|
void DumpNetCDF::write_data(int n, double *mybuf)
|
||||||
{
|
{
|
||||||
size_t start[NC_MAX_VAR_DIMS], count[NC_MAX_VAR_DIMS];
|
size_t start[NC_MAX_VAR_DIMS], count[NC_MAX_VAR_DIMS];
|
||||||
ptrdiff_t stride[NC_MAX_VAR_DIMS];
|
ptrdiff_t stride[NC_MAX_VAR_DIMS];
|
||||||
@ -761,18 +759,17 @@ void DumpNC::write_data(int n, double *mybuf)
|
|||||||
if (!int_buffer) {
|
if (!int_buffer) {
|
||||||
n_buffer = n;
|
n_buffer = n;
|
||||||
int_buffer = (int *)
|
int_buffer = (int *)
|
||||||
memory->smalloc(n*sizeof(int), "DumpNC::int_buffer");
|
memory->smalloc(n*sizeof(int),"dump::int_buffer");
|
||||||
double_buffer = (double *)
|
double_buffer = (double *)
|
||||||
memory->smalloc(n*sizeof(double), "DumpNC::double_buffer");
|
memory->smalloc(n*sizeof(double),"dump::double_buffer");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (n > n_buffer) {
|
if (n > n_buffer) {
|
||||||
n_buffer = n;
|
n_buffer = n;
|
||||||
int_buffer = (int *)
|
int_buffer = (int *)
|
||||||
memory->srealloc(int_buffer, n*sizeof(int), "DumpNC::int_buffer");
|
memory->srealloc(int_buffer, n*sizeof(int),"dump::int_buffer");
|
||||||
double_buffer = (double *)
|
double_buffer = (double *)
|
||||||
memory->srealloc(double_buffer, n*sizeof(double),
|
memory->srealloc(double_buffer, n*sizeof(double),"dump::double_buffer");
|
||||||
"DumpNC::double_buffer");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
start[0] = framei-1;
|
start[0] = framei-1;
|
||||||
@ -887,7 +884,7 @@ void DumpNC::write_data(int n, double *mybuf)
|
|||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
int DumpNC::modify_param(int narg, char **arg)
|
int DumpNetCDF::modify_param(int narg, char **arg)
|
||||||
{
|
{
|
||||||
int iarg = 0;
|
int iarg = 0;
|
||||||
if (strcmp(arg[iarg],"double") == 0) {
|
if (strcmp(arg[iarg],"double") == 0) {
|
||||||
@ -925,17 +922,17 @@ int DumpNC::modify_param(int narg, char **arg)
|
|||||||
|
|
||||||
if (!strcmp(arg[iarg],"step")) {
|
if (!strcmp(arg[iarg],"step")) {
|
||||||
perframe[i].type = THIS_IS_A_BIGINT;
|
perframe[i].type = THIS_IS_A_BIGINT;
|
||||||
perframe[i].compute = &DumpNC::compute_step;
|
perframe[i].compute = &DumpNetCDF::compute_step;
|
||||||
strcpy(perframe[i].name, arg[iarg]);
|
strcpy(perframe[i].name, arg[iarg]);
|
||||||
}
|
}
|
||||||
else if (!strcmp(arg[iarg],"elapsed")) {
|
else if (!strcmp(arg[iarg],"elapsed")) {
|
||||||
perframe[i].type = THIS_IS_A_BIGINT;
|
perframe[i].type = THIS_IS_A_BIGINT;
|
||||||
perframe[i].compute = &DumpNC::compute_elapsed;
|
perframe[i].compute = &DumpNetCDF::compute_elapsed;
|
||||||
strcpy(perframe[i].name, arg[iarg]);
|
strcpy(perframe[i].name, arg[iarg]);
|
||||||
}
|
}
|
||||||
else if (!strcmp(arg[iarg],"elaplong")) {
|
else if (!strcmp(arg[iarg],"elaplong")) {
|
||||||
perframe[i].type = THIS_IS_A_BIGINT;
|
perframe[i].type = THIS_IS_A_BIGINT;
|
||||||
perframe[i].compute = &DumpNC::compute_elapsed_long;
|
perframe[i].compute = &DumpNetCDF::compute_elapsed_long;
|
||||||
strcpy(perframe[i].name, arg[iarg]);
|
strcpy(perframe[i].name, arg[iarg]);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -1036,7 +1033,7 @@ int DumpNC::modify_param(int narg, char **arg)
|
|||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
void DumpNC::write_prmtop()
|
void DumpNetCDF::write_prmtop()
|
||||||
{
|
{
|
||||||
char fn[1024];
|
char fn[1024];
|
||||||
char tmp[81];
|
char tmp[81];
|
||||||
@ -1098,7 +1095,7 @@ void DumpNC::write_prmtop()
|
|||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
void DumpNC::ncerr(int err, const char *descr, int line)
|
void DumpNetCDF::ncerr(int err, const char *descr, int line)
|
||||||
{
|
{
|
||||||
if (err != NC_NOERR) {
|
if (err != NC_NOERR) {
|
||||||
char errstr[1024];
|
char errstr[1024];
|
||||||
@ -1122,21 +1119,21 @@ void DumpNC::ncerr(int err, const char *descr, int line)
|
|||||||
customize a new keyword by adding a method
|
customize a new keyword by adding a method
|
||||||
------------------------------------------------------------------------- */
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
void DumpNC::compute_step(void *r)
|
void DumpNetCDF::compute_step(void *r)
|
||||||
{
|
{
|
||||||
*((bigint *) r) = update->ntimestep;
|
*((bigint *) r) = update->ntimestep;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
void DumpNC::compute_elapsed(void *r)
|
void DumpNetCDF::compute_elapsed(void *r)
|
||||||
{
|
{
|
||||||
*((bigint *) r) = update->ntimestep - update->firststep;
|
*((bigint *) r) = update->ntimestep - update->firststep;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
void DumpNC::compute_elapsed_long(void *r)
|
void DumpNetCDF::compute_elapsed_long(void *r)
|
||||||
{
|
{
|
||||||
*((bigint *) r) = update->ntimestep - update->beginstep;
|
*((bigint *) r) = update->ntimestep - update->beginstep;
|
||||||
}
|
}
|
||||||
@ -32,16 +32,17 @@
|
|||||||
|
|
||||||
See the README file in the top-level LAMMPS directory.
|
See the README file in the top-level LAMMPS directory.
|
||||||
------------------------------------------------------------------------- */
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
#if defined(LMP_HAS_NETCDF)
|
#if defined(LMP_HAS_NETCDF)
|
||||||
|
|
||||||
#ifdef DUMP_CLASS
|
#ifdef DUMP_CLASS
|
||||||
|
|
||||||
DumpStyle(nc,DumpNC)
|
DumpStyle(netcdf,DumpNetCDF)
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
#ifndef LMP_DUMP_NC_H
|
#ifndef LMP_DUMP_NETCDF_H
|
||||||
#define LMP_DUMP_NC_H
|
#define LMP_DUMP_NETCDFC_H
|
||||||
|
|
||||||
#include "dump_custom.h"
|
#include "dump_custom.h"
|
||||||
|
|
||||||
@ -50,10 +51,10 @@ namespace LAMMPS_NS {
|
|||||||
const int NC_FIELD_NAME_MAX = 100;
|
const int NC_FIELD_NAME_MAX = 100;
|
||||||
const int DUMP_NC_MAX_DIMS = 100;
|
const int DUMP_NC_MAX_DIMS = 100;
|
||||||
|
|
||||||
class DumpNC : public DumpCustom {
|
class DumpNetCDF : public DumpCustom {
|
||||||
public:
|
public:
|
||||||
DumpNC(class LAMMPS *, int, char **);
|
DumpNetCDF(class LAMMPS *, int, char **);
|
||||||
virtual ~DumpNC();
|
virtual ~DumpNetCDF();
|
||||||
virtual void write();
|
virtual void write();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@ -68,7 +69,7 @@ class DumpNC : public DumpCustom {
|
|||||||
int ndumped; // number of enties written for this prop.
|
int ndumped; // number of enties written for this prop.
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef void (DumpNC::*funcptr_t)(void *);
|
typedef void (DumpNetCDF::*funcptr_t)(void *);
|
||||||
|
|
||||||
// per-frame quantities (variables, fixes or computes)
|
// per-frame quantities (variables, fixes or computes)
|
||||||
struct nc_perframe_t {
|
struct nc_perframe_t {
|
||||||
@ -32,14 +32,14 @@
|
|||||||
|
|
||||||
See the README file in the top-level LAMMPS directory.
|
See the README file in the top-level LAMMPS directory.
|
||||||
------------------------------------------------------------------------- */
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
#if defined(LMP_HAS_PNETCDF)
|
#if defined(LMP_HAS_PNETCDF)
|
||||||
|
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#include <pnetcdf.h>
|
#include <pnetcdf.h>
|
||||||
|
#include "dump_netcdf_mpiio.h"
|
||||||
#include "atom.h"
|
#include "atom.h"
|
||||||
#include "comm.h"
|
#include "comm.h"
|
||||||
#include "compute.h"
|
#include "compute.h"
|
||||||
@ -56,8 +56,6 @@
|
|||||||
#include "variable.h"
|
#include "variable.h"
|
||||||
#include "force.h"
|
#include "force.h"
|
||||||
|
|
||||||
#include "dump_nc_mpiio.h"
|
|
||||||
|
|
||||||
using namespace LAMMPS_NS;
|
using namespace LAMMPS_NS;
|
||||||
using namespace MathConst;
|
using namespace MathConst;
|
||||||
|
|
||||||
@ -91,7 +89,7 @@ const int THIS_IS_A_BIGINT = -4;
|
|||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
DumpNCMPIIO::DumpNCMPIIO(LAMMPS *lmp, int narg, char **arg) :
|
DumpNetCDFMPIIO::DumpNetCDFMPIIO(LAMMPS *lmp, int narg, char **arg) :
|
||||||
DumpCustom(lmp, narg, arg)
|
DumpCustom(lmp, narg, arg)
|
||||||
{
|
{
|
||||||
// arrays for data rearrangement
|
// arrays for data rearrangement
|
||||||
@ -217,7 +215,7 @@ DumpNCMPIIO::DumpNCMPIIO(LAMMPS *lmp, int narg, char **arg) :
|
|||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
DumpNCMPIIO::~DumpNCMPIIO()
|
DumpNetCDFMPIIO::~DumpNetCDFMPIIO()
|
||||||
{
|
{
|
||||||
closefile();
|
closefile();
|
||||||
|
|
||||||
@ -231,7 +229,7 @@ DumpNCMPIIO::~DumpNCMPIIO()
|
|||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
void DumpNCMPIIO::openfile()
|
void DumpNetCDFMPIIO::openfile()
|
||||||
{
|
{
|
||||||
// now the computes and fixes have been initialized, so we can query
|
// now the computes and fixes have been initialized, so we can query
|
||||||
// for the size of vector quantities
|
// for the size of vector quantities
|
||||||
@ -570,12 +568,12 @@ void DumpNCMPIIO::openfile()
|
|||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
void DumpNCMPIIO::closefile()
|
void DumpNetCDFMPIIO::closefile()
|
||||||
{
|
{
|
||||||
if (singlefile_opened) {
|
if (singlefile_opened) {
|
||||||
NCERR( ncmpi_close(ncid) );
|
NCERR( ncmpi_close(ncid) );
|
||||||
singlefile_opened = 0;
|
singlefile_opened = 0;
|
||||||
// append next time DumpNCMPIIO::openfile is called
|
// append next time DumpNetCDFMPIIO::openfile is called
|
||||||
append_flag = 1;
|
append_flag = 1;
|
||||||
// write to next frame upon next open
|
// write to next frame upon next open
|
||||||
framei++;
|
framei++;
|
||||||
@ -584,7 +582,7 @@ void DumpNCMPIIO::closefile()
|
|||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
void DumpNCMPIIO::write()
|
void DumpNetCDFMPIIO::write()
|
||||||
{
|
{
|
||||||
// open file
|
// open file
|
||||||
|
|
||||||
@ -687,7 +685,7 @@ void DumpNCMPIIO::write()
|
|||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
void DumpNCMPIIO::write_time_and_cell()
|
void DumpNetCDFMPIIO::write_time_and_cell()
|
||||||
{
|
{
|
||||||
MPI_Offset start[2];
|
MPI_Offset start[2];
|
||||||
|
|
||||||
@ -759,7 +757,7 @@ void DumpNCMPIIO::write_time_and_cell()
|
|||||||
write head of block (mass & element name) only if has atoms of the type
|
write head of block (mass & element name) only if has atoms of the type
|
||||||
------------------------------------------------------------------------- */
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
void DumpNCMPIIO::write_data(int n, double *mybuf)
|
void DumpNetCDFMPIIO::write_data(int n, double *mybuf)
|
||||||
{
|
{
|
||||||
MPI_Offset start[NC_MAX_VAR_DIMS], count[NC_MAX_VAR_DIMS];
|
MPI_Offset start[NC_MAX_VAR_DIMS], count[NC_MAX_VAR_DIMS];
|
||||||
MPI_Offset stride[NC_MAX_VAR_DIMS];
|
MPI_Offset stride[NC_MAX_VAR_DIMS];
|
||||||
@ -767,19 +765,18 @@ void DumpNCMPIIO::write_data(int n, double *mybuf)
|
|||||||
if (!int_buffer) {
|
if (!int_buffer) {
|
||||||
n_buffer = std::max(1, n);
|
n_buffer = std::max(1, n);
|
||||||
int_buffer = (int *)
|
int_buffer = (int *)
|
||||||
memory->smalloc(n_buffer*sizeof(int), "DumpNCMPIIO::int_buffer");
|
memory->smalloc(n_buffer*sizeof(int),"dump::int_buffer");
|
||||||
double_buffer = (double *)
|
double_buffer = (double *)
|
||||||
memory->smalloc(n_buffer*sizeof(double), "DumpNCMPIIO::double_buffer");
|
memory->smalloc(n_buffer*sizeof(double),"dump::double_buffer");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (n > n_buffer) {
|
if (n > n_buffer) {
|
||||||
n_buffer = std::max(1, n);
|
n_buffer = std::max(1, n);
|
||||||
int_buffer = (int *)
|
int_buffer = (int *)
|
||||||
memory->srealloc(int_buffer, n_buffer*sizeof(int),
|
memory->srealloc(int_buffer, n_buffer*sizeof(int),"dump::int_buffer");
|
||||||
"DumpNCMPIIO::int_buffer");
|
|
||||||
double_buffer = (double *)
|
double_buffer = (double *)
|
||||||
memory->srealloc(double_buffer, n_buffer*sizeof(double),
|
memory->srealloc(double_buffer, n_buffer*sizeof(double),
|
||||||
"DumpNCMPIIO::double_buffer");
|
"dump::double_buffer");
|
||||||
}
|
}
|
||||||
|
|
||||||
start[0] = framei-1;
|
start[0] = framei-1;
|
||||||
@ -882,7 +879,7 @@ void DumpNCMPIIO::write_data(int n, double *mybuf)
|
|||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
int DumpNCMPIIO::modify_param(int narg, char **arg)
|
int DumpNetCDFMPIIO::modify_param(int narg, char **arg)
|
||||||
{
|
{
|
||||||
int iarg = 0;
|
int iarg = 0;
|
||||||
if (strcmp(arg[iarg],"double") == 0) {
|
if (strcmp(arg[iarg],"double") == 0) {
|
||||||
@ -920,17 +917,17 @@ int DumpNCMPIIO::modify_param(int narg, char **arg)
|
|||||||
|
|
||||||
if (!strcmp(arg[iarg],"step")) {
|
if (!strcmp(arg[iarg],"step")) {
|
||||||
perframe[i].type = THIS_IS_A_BIGINT;
|
perframe[i].type = THIS_IS_A_BIGINT;
|
||||||
perframe[i].compute = &DumpNCMPIIO::compute_step;
|
perframe[i].compute = &DumpNetCDFMPIIO::compute_step;
|
||||||
strcpy(perframe[i].name, arg[iarg]);
|
strcpy(perframe[i].name, arg[iarg]);
|
||||||
}
|
}
|
||||||
else if (!strcmp(arg[iarg],"elapsed")) {
|
else if (!strcmp(arg[iarg],"elapsed")) {
|
||||||
perframe[i].type = THIS_IS_A_BIGINT;
|
perframe[i].type = THIS_IS_A_BIGINT;
|
||||||
perframe[i].compute = &DumpNCMPIIO::compute_elapsed;
|
perframe[i].compute = &DumpNetCDFMPIIO::compute_elapsed;
|
||||||
strcpy(perframe[i].name, arg[iarg]);
|
strcpy(perframe[i].name, arg[iarg]);
|
||||||
}
|
}
|
||||||
else if (!strcmp(arg[iarg],"elaplong")) {
|
else if (!strcmp(arg[iarg],"elaplong")) {
|
||||||
perframe[i].type = THIS_IS_A_BIGINT;
|
perframe[i].type = THIS_IS_A_BIGINT;
|
||||||
perframe[i].compute = &DumpNCMPIIO::compute_elapsed_long;
|
perframe[i].compute = &DumpNetCDFMPIIO::compute_elapsed_long;
|
||||||
strcpy(perframe[i].name, arg[iarg]);
|
strcpy(perframe[i].name, arg[iarg]);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -1031,7 +1028,7 @@ int DumpNCMPIIO::modify_param(int narg, char **arg)
|
|||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
void DumpNCMPIIO::ncerr(int err, const char *descr, int line)
|
void DumpNetCDFMPIIO::ncerr(int err, const char *descr, int line)
|
||||||
{
|
{
|
||||||
if (err != NC_NOERR) {
|
if (err != NC_NOERR) {
|
||||||
char errstr[1024];
|
char errstr[1024];
|
||||||
@ -1055,21 +1052,21 @@ void DumpNCMPIIO::ncerr(int err, const char *descr, int line)
|
|||||||
customize a new keyword by adding a method
|
customize a new keyword by adding a method
|
||||||
------------------------------------------------------------------------- */
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
void DumpNCMPIIO::compute_step(void *r)
|
void DumpNetCDFMPIIO::compute_step(void *r)
|
||||||
{
|
{
|
||||||
*((bigint *) r) = update->ntimestep;
|
*((bigint *) r) = update->ntimestep;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
void DumpNCMPIIO::compute_elapsed(void *r)
|
void DumpNetCDFMPIIO::compute_elapsed(void *r)
|
||||||
{
|
{
|
||||||
*((bigint *) r) = update->ntimestep - update->firststep;
|
*((bigint *) r) = update->ntimestep - update->firststep;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
void DumpNCMPIIO::compute_elapsed_long(void *r)
|
void DumpNetCDFMPIIO::compute_elapsed_long(void *r)
|
||||||
{
|
{
|
||||||
*((bigint *) r) = update->ntimestep - update->beginstep;
|
*((bigint *) r) = update->ntimestep - update->beginstep;
|
||||||
}
|
}
|
||||||
@ -32,16 +32,17 @@
|
|||||||
|
|
||||||
See the README file in the top-level LAMMPS directory.
|
See the README file in the top-level LAMMPS directory.
|
||||||
------------------------------------------------------------------------- */
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
#if defined(LMP_HAS_PNETCDF)
|
#if defined(LMP_HAS_PNETCDF)
|
||||||
|
|
||||||
#ifdef DUMP_CLASS
|
#ifdef DUMP_CLASS
|
||||||
|
|
||||||
DumpStyle(nc/mpiio,DumpNCMPIIO)
|
DumpStyle(netcdf/mpiio,DumpNetCDFMPIIO)
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
#ifndef LMP_DUMP_NC_MPIIO_H
|
#ifndef LMP_DUMP_NETCDF_MPIIO_H
|
||||||
#define LMP_DUMP_NC_MPIIO_H
|
#define LMP_DUMP_NETCDF_MPIIO_H
|
||||||
|
|
||||||
#include "dump_custom.h"
|
#include "dump_custom.h"
|
||||||
|
|
||||||
@ -50,10 +51,10 @@ namespace LAMMPS_NS {
|
|||||||
const int NC_MPIIO_FIELD_NAME_MAX = 100;
|
const int NC_MPIIO_FIELD_NAME_MAX = 100;
|
||||||
const int DUMP_NC_MPIIO_MAX_DIMS = 100;
|
const int DUMP_NC_MPIIO_MAX_DIMS = 100;
|
||||||
|
|
||||||
class DumpNCMPIIO : public DumpCustom {
|
class DumpNetCDFMPIIO : public DumpCustom {
|
||||||
public:
|
public:
|
||||||
DumpNCMPIIO(class LAMMPS *, int, char **);
|
DumpNetCDFMPIIO(class LAMMPS *, int, char **);
|
||||||
virtual ~DumpNCMPIIO();
|
virtual ~DumpNetCDFMPIIO();
|
||||||
virtual void write();
|
virtual void write();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@ -24,7 +24,7 @@
|
|||||||
|
|
||||||
#include "reaxc_defs.h"
|
#include "reaxc_defs.h"
|
||||||
#include "reaxc_types.h"
|
#include "reaxc_types.h"
|
||||||
#include "pair_reax_c.h"
|
#include "pair_reaxc.h"
|
||||||
|
|
||||||
using namespace LAMMPS_NS;
|
using namespace LAMMPS_NS;
|
||||||
|
|
||||||
@ -71,7 +71,7 @@ ComputeSpecAtom::ComputeSpecAtom(LAMMPS *lmp, int narg, char **arg) :
|
|||||||
} else if (strcmp(arg[iarg],"vz") == 0) {
|
} else if (strcmp(arg[iarg],"vz") == 0) {
|
||||||
pack_choice[i] = &ComputeSpecAtom::pack_vz;
|
pack_choice[i] = &ComputeSpecAtom::pack_vz;
|
||||||
|
|
||||||
// from pair_reax_c
|
// from pair_reaxc
|
||||||
} else if (strcmp(arg[iarg],"abo01") == 0) {
|
} else if (strcmp(arg[iarg],"abo01") == 0) {
|
||||||
pack_choice[i] = &ComputeSpecAtom::pack_abo01;
|
pack_choice[i] = &ComputeSpecAtom::pack_abo01;
|
||||||
} else if (strcmp(arg[iarg],"abo02") == 0) {
|
} else if (strcmp(arg[iarg],"abo02") == 0) {
|
||||||
|
|||||||
@ -23,7 +23,7 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include "fix_qeq_reax.h"
|
#include "fix_qeq_reax.h"
|
||||||
#include "pair_reax_c.h"
|
#include "pair_reaxc.h"
|
||||||
#include "atom.h"
|
#include "atom.h"
|
||||||
#include "comm.h"
|
#include "comm.h"
|
||||||
#include "domain.h"
|
#include "domain.h"
|
||||||
|
|||||||
@ -21,7 +21,7 @@
|
|||||||
Algorithmic Techniques", Parallel Computing, in press.
|
Algorithmic Techniques", Parallel Computing, in press.
|
||||||
------------------------------------------------------------------------- */
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
#include "fix_reax_c.h"
|
#include "fix_reaxc.h"
|
||||||
#include "atom.h"
|
#include "atom.h"
|
||||||
#include "pair.h"
|
#include "pair.h"
|
||||||
#include "comm.h"
|
#include "comm.h"
|
||||||
@ -21,7 +21,7 @@
|
|||||||
#include "fix_reaxc_bonds.h"
|
#include "fix_reaxc_bonds.h"
|
||||||
#include "atom.h"
|
#include "atom.h"
|
||||||
#include "update.h"
|
#include "update.h"
|
||||||
#include "pair_reax_c.h"
|
#include "pair_reaxc.h"
|
||||||
#include "modify.h"
|
#include "modify.h"
|
||||||
#include "neighbor.h"
|
#include "neighbor.h"
|
||||||
#include "neigh_list.h"
|
#include "neigh_list.h"
|
||||||
|
|||||||
@ -24,7 +24,7 @@
|
|||||||
#include "fix_reaxc_species.h"
|
#include "fix_reaxc_species.h"
|
||||||
#include "domain.h"
|
#include "domain.h"
|
||||||
#include "update.h"
|
#include "update.h"
|
||||||
#include "pair_reax_c.h"
|
#include "pair_reaxc.h"
|
||||||
#include "modify.h"
|
#include "modify.h"
|
||||||
#include "neighbor.h"
|
#include "neighbor.h"
|
||||||
#include "neigh_list.h"
|
#include "neigh_list.h"
|
||||||
|
|||||||
@ -23,7 +23,7 @@ FixStyle(reax/c/species,FixReaxCSpecies)
|
|||||||
#include "fix.h"
|
#include "fix.h"
|
||||||
#include "pointers.h"
|
#include "pointers.h"
|
||||||
|
|
||||||
#include "pair_reax_c.h"
|
#include "pair_reaxc.h"
|
||||||
#include "reaxc_types.h"
|
#include "reaxc_types.h"
|
||||||
#include "reaxc_defs.h"
|
#include "reaxc_defs.h"
|
||||||
|
|
||||||
|
|||||||
@ -20,7 +20,7 @@
|
|||||||
Hybrid and hybrid/overlay compatibility added by Ray Shan (Sandia)
|
Hybrid and hybrid/overlay compatibility added by Ray Shan (Sandia)
|
||||||
------------------------------------------------------------------------- */
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
#include "pair_reax_c.h"
|
#include "pair_reaxc.h"
|
||||||
#include "atom.h"
|
#include "atom.h"
|
||||||
#include "update.h"
|
#include "update.h"
|
||||||
#include "force.h"
|
#include "force.h"
|
||||||
@ -30,7 +30,7 @@
|
|||||||
#include "neigh_request.h"
|
#include "neigh_request.h"
|
||||||
#include "modify.h"
|
#include "modify.h"
|
||||||
#include "fix.h"
|
#include "fix.h"
|
||||||
#include "fix_reax_c.h"
|
#include "fix_reaxc.h"
|
||||||
#include "citeme.h"
|
#include "citeme.h"
|
||||||
#include "memory.h"
|
#include "memory.h"
|
||||||
#include "error.h"
|
#include "error.h"
|
||||||
@ -223,6 +223,7 @@ void PairReaxC::settings(int narg, char **arg)
|
|||||||
|
|
||||||
qeqflag = 1;
|
qeqflag = 1;
|
||||||
control->lgflag = 0;
|
control->lgflag = 0;
|
||||||
|
control->enobondsflag = 1;
|
||||||
system->mincap = MIN_CAP;
|
system->mincap = MIN_CAP;
|
||||||
system->safezone = SAFE_ZONE;
|
system->safezone = SAFE_ZONE;
|
||||||
system->saferzone = SAFER_ZONE;
|
system->saferzone = SAFER_ZONE;
|
||||||
@ -238,7 +239,13 @@ void PairReaxC::settings(int narg, char **arg)
|
|||||||
else if (strcmp(arg[iarg+1],"no") == 0) qeqflag = 0;
|
else if (strcmp(arg[iarg+1],"no") == 0) qeqflag = 0;
|
||||||
else error->all(FLERR,"Illegal pair_style reax/c command");
|
else error->all(FLERR,"Illegal pair_style reax/c command");
|
||||||
iarg += 2;
|
iarg += 2;
|
||||||
} else if (strcmp(arg[iarg],"lgvdw") == 0) {
|
} else if (strcmp(arg[iarg],"enobonds") == 0) {
|
||||||
|
if (iarg+2 > narg) error->all(FLERR,"Illegal pair_style reax/c command");
|
||||||
|
if (strcmp(arg[iarg+1],"yes") == 0) control->enobondsflag = 1;
|
||||||
|
else if (strcmp(arg[iarg+1],"no") == 0) control->enobondsflag = 0;
|
||||||
|
else error->all(FLERR,"Illegal pair_style reax/c command");
|
||||||
|
iarg += 2;
|
||||||
|
} else if (strcmp(arg[iarg],"lgvdw") == 0) {
|
||||||
if (iarg+2 > narg) error->all(FLERR,"Illegal pair_style reax/c command");
|
if (iarg+2 > narg) error->all(FLERR,"Illegal pair_style reax/c command");
|
||||||
if (strcmp(arg[iarg+1],"yes") == 0) control->lgflag = 1;
|
if (strcmp(arg[iarg+1],"yes") == 0) control->lgflag = 1;
|
||||||
else if (strcmp(arg[iarg+1],"no") == 0) control->lgflag = 0;
|
else if (strcmp(arg[iarg+1],"no") == 0) control->lgflag = 0;
|
||||||
@ -24,7 +24,7 @@
|
|||||||
<http://www.gnu.org/licenses/>.
|
<http://www.gnu.org/licenses/>.
|
||||||
----------------------------------------------------------------------*/
|
----------------------------------------------------------------------*/
|
||||||
|
|
||||||
#include "pair_reax_c.h"
|
#include "pair_reaxc.h"
|
||||||
#include "reaxc_allocate.h"
|
#include "reaxc_allocate.h"
|
||||||
#include "reaxc_list.h"
|
#include "reaxc_list.h"
|
||||||
#include "reaxc_reset_tools.h"
|
#include "reaxc_reset_tools.h"
|
||||||
|
|||||||
@ -24,7 +24,7 @@
|
|||||||
<http://www.gnu.org/licenses/>.
|
<http://www.gnu.org/licenses/>.
|
||||||
----------------------------------------------------------------------*/
|
----------------------------------------------------------------------*/
|
||||||
|
|
||||||
#include "pair_reax_c.h"
|
#include "pair_reaxc.h"
|
||||||
#include "reaxc_types.h"
|
#include "reaxc_types.h"
|
||||||
#include "reaxc_bond_orders.h"
|
#include "reaxc_bond_orders.h"
|
||||||
#include "reaxc_list.h"
|
#include "reaxc_list.h"
|
||||||
|
|||||||
@ -24,7 +24,7 @@
|
|||||||
<http://www.gnu.org/licenses/>.
|
<http://www.gnu.org/licenses/>.
|
||||||
----------------------------------------------------------------------*/
|
----------------------------------------------------------------------*/
|
||||||
|
|
||||||
#include "pair_reax_c.h"
|
#include "pair_reaxc.h"
|
||||||
#include "reaxc_bonds.h"
|
#include "reaxc_bonds.h"
|
||||||
#include "reaxc_bond_orders.h"
|
#include "reaxc_bond_orders.h"
|
||||||
#include "reaxc_list.h"
|
#include "reaxc_list.h"
|
||||||
|
|||||||
@ -24,7 +24,7 @@
|
|||||||
<http://www.gnu.org/licenses/>.
|
<http://www.gnu.org/licenses/>.
|
||||||
----------------------------------------------------------------------*/
|
----------------------------------------------------------------------*/
|
||||||
|
|
||||||
#include "pair_reax_c.h"
|
#include "pair_reaxc.h"
|
||||||
#include "reaxc_control.h"
|
#include "reaxc_control.h"
|
||||||
#include "reaxc_tool_box.h"
|
#include "reaxc_tool_box.h"
|
||||||
|
|
||||||
|
|||||||
@ -116,8 +116,8 @@
|
|||||||
|
|
||||||
#define MAX_BOND 20
|
#define MAX_BOND 20
|
||||||
|
|
||||||
#define MAXREAXBOND 24 /* used in fix_reaxc_bonds.cpp and pair_reax_c.cpp */
|
#define MAXREAXBOND 24 /* used in fix_reaxc_bonds.cpp and pair_reaxc.cpp */
|
||||||
#define MAXSPECBOND 24 /* used in fix_reaxc_species.cpp and pair_reax_c.cpp */
|
#define MAXSPECBOND 24 /* used in fix_reaxc_species.cpp and pair_reaxc.cpp */
|
||||||
|
|
||||||
/******************* ENUMERATIONS *************************/
|
/******************* ENUMERATIONS *************************/
|
||||||
enum geo_formats { CUSTOM, PDB, ASCII_RESTART, BINARY_RESTART, GF_N };
|
enum geo_formats { CUSTOM, PDB, ASCII_RESTART, BINARY_RESTART, GF_N };
|
||||||
|
|||||||
@ -24,7 +24,7 @@
|
|||||||
<http://www.gnu.org/licenses/>.
|
<http://www.gnu.org/licenses/>.
|
||||||
----------------------------------------------------------------------*/
|
----------------------------------------------------------------------*/
|
||||||
|
|
||||||
#include "pair_reax_c.h"
|
#include "pair_reaxc.h"
|
||||||
#include "error.h"
|
#include "error.h"
|
||||||
#include "reaxc_ffield.h"
|
#include "reaxc_ffield.h"
|
||||||
#include "reaxc_tool_box.h"
|
#include "reaxc_tool_box.h"
|
||||||
|
|||||||
@ -24,7 +24,7 @@
|
|||||||
<http://www.gnu.org/licenses/>.
|
<http://www.gnu.org/licenses/>.
|
||||||
----------------------------------------------------------------------*/
|
----------------------------------------------------------------------*/
|
||||||
|
|
||||||
#include "pair_reax_c.h"
|
#include "pair_reaxc.h"
|
||||||
#include "reaxc_forces.h"
|
#include "reaxc_forces.h"
|
||||||
#include "reaxc_bond_orders.h"
|
#include "reaxc_bond_orders.h"
|
||||||
#include "reaxc_bonds.h"
|
#include "reaxc_bonds.h"
|
||||||
|
|||||||
@ -24,7 +24,7 @@
|
|||||||
<http://www.gnu.org/licenses/>.
|
<http://www.gnu.org/licenses/>.
|
||||||
----------------------------------------------------------------------*/
|
----------------------------------------------------------------------*/
|
||||||
|
|
||||||
#include "pair_reax_c.h"
|
#include "pair_reaxc.h"
|
||||||
#include "reaxc_hydrogen_bonds.h"
|
#include "reaxc_hydrogen_bonds.h"
|
||||||
#include "reaxc_bond_orders.h"
|
#include "reaxc_bond_orders.h"
|
||||||
#include "reaxc_list.h"
|
#include "reaxc_list.h"
|
||||||
|
|||||||
@ -24,7 +24,7 @@
|
|||||||
<http://www.gnu.org/licenses/>.
|
<http://www.gnu.org/licenses/>.
|
||||||
----------------------------------------------------------------------*/
|
----------------------------------------------------------------------*/
|
||||||
|
|
||||||
#include "pair_reax_c.h"
|
#include "pair_reaxc.h"
|
||||||
#include "reaxc_init_md.h"
|
#include "reaxc_init_md.h"
|
||||||
#include "reaxc_allocate.h"
|
#include "reaxc_allocate.h"
|
||||||
#include "reaxc_forces.h"
|
#include "reaxc_forces.h"
|
||||||
|
|||||||
@ -24,7 +24,7 @@
|
|||||||
<http://www.gnu.org/licenses/>.
|
<http://www.gnu.org/licenses/>.
|
||||||
----------------------------------------------------------------------*/
|
----------------------------------------------------------------------*/
|
||||||
|
|
||||||
#include "pair_reax_c.h"
|
#include "pair_reaxc.h"
|
||||||
#include "update.h"
|
#include "update.h"
|
||||||
#include "reaxc_io_tools.h"
|
#include "reaxc_io_tools.h"
|
||||||
#include "reaxc_list.h"
|
#include "reaxc_list.h"
|
||||||
|
|||||||
@ -24,7 +24,7 @@
|
|||||||
<http://www.gnu.org/licenses/>.
|
<http://www.gnu.org/licenses/>.
|
||||||
----------------------------------------------------------------------*/
|
----------------------------------------------------------------------*/
|
||||||
|
|
||||||
#include "pair_reax_c.h"
|
#include "pair_reaxc.h"
|
||||||
#include "reaxc_list.h"
|
#include "reaxc_list.h"
|
||||||
#include "reaxc_tool_box.h"
|
#include "reaxc_tool_box.h"
|
||||||
|
|
||||||
|
|||||||
@ -24,7 +24,7 @@
|
|||||||
<http://www.gnu.org/licenses/>.
|
<http://www.gnu.org/licenses/>.
|
||||||
----------------------------------------------------------------------*/
|
----------------------------------------------------------------------*/
|
||||||
|
|
||||||
#include "pair_reax_c.h"
|
#include "pair_reaxc.h"
|
||||||
#include "reaxc_lookup.h"
|
#include "reaxc_lookup.h"
|
||||||
#include "reaxc_nonbonded.h"
|
#include "reaxc_nonbonded.h"
|
||||||
#include "reaxc_tool_box.h"
|
#include "reaxc_tool_box.h"
|
||||||
|
|||||||
@ -24,7 +24,7 @@
|
|||||||
<http://www.gnu.org/licenses/>.
|
<http://www.gnu.org/licenses/>.
|
||||||
----------------------------------------------------------------------*/
|
----------------------------------------------------------------------*/
|
||||||
|
|
||||||
#include "pair_reax_c.h"
|
#include "pair_reaxc.h"
|
||||||
#include "reaxc_multi_body.h"
|
#include "reaxc_multi_body.h"
|
||||||
#include "reaxc_bond_orders.h"
|
#include "reaxc_bond_orders.h"
|
||||||
#include "reaxc_list.h"
|
#include "reaxc_list.h"
|
||||||
@ -79,7 +79,7 @@ void Atom_Energy( reax_system *system, control_params *control,
|
|||||||
numbonds ++;
|
numbonds ++;
|
||||||
|
|
||||||
/* calculate the energy */
|
/* calculate the energy */
|
||||||
if (numbonds > 0)
|
if (numbonds > 0 || control->enobondsflag)
|
||||||
data->my_en.e_lp += e_lp =
|
data->my_en.e_lp += e_lp =
|
||||||
p_lp2 * workspace->Delta_lp[i] * inv_expvd2;
|
p_lp2 * workspace->Delta_lp[i] * inv_expvd2;
|
||||||
|
|
||||||
@ -87,7 +87,8 @@ void Atom_Energy( reax_system *system, control_params *control,
|
|||||||
75 * p_lp2 * workspace->Delta_lp[i] * expvd2 * SQR(inv_expvd2);
|
75 * p_lp2 * workspace->Delta_lp[i] * expvd2 * SQR(inv_expvd2);
|
||||||
CElp = dElp * workspace->dDelta_lp[i];
|
CElp = dElp * workspace->dDelta_lp[i];
|
||||||
|
|
||||||
if (numbonds > 0) workspace->CdDelta[i] += CElp; // lp - 1st term
|
if (numbonds > 0 || control->enobondsflag)
|
||||||
|
workspace->CdDelta[i] += CElp; // lp - 1st term
|
||||||
|
|
||||||
/* tally into per-atom energy */
|
/* tally into per-atom energy */
|
||||||
if( system->pair_ptr->evflag)
|
if( system->pair_ptr->evflag)
|
||||||
@ -187,7 +188,7 @@ void Atom_Energy( reax_system *system, control_params *control,
|
|||||||
for( pj = Start_Index(i, bonds); pj < End_Index(i, bonds); ++pj )
|
for( pj = Start_Index(i, bonds); pj < End_Index(i, bonds); ++pj )
|
||||||
numbonds ++;
|
numbonds ++;
|
||||||
|
|
||||||
if (numbonds > 0)
|
if (numbonds > 0 || control->enobondsflag)
|
||||||
data->my_en.e_un += e_un =
|
data->my_en.e_un += e_un =
|
||||||
-p_ovun5 * (1.0 - exp_ovun6) * inv_exp_ovun2n * inv_exp_ovun8;
|
-p_ovun5 * (1.0 - exp_ovun6) * inv_exp_ovun2n * inv_exp_ovun8;
|
||||||
|
|
||||||
@ -202,13 +203,15 @@ void Atom_Energy( reax_system *system, control_params *control,
|
|||||||
/* tally into per-atom energy */
|
/* tally into per-atom energy */
|
||||||
if( system->pair_ptr->evflag) {
|
if( system->pair_ptr->evflag) {
|
||||||
eng_tmp = e_ov;
|
eng_tmp = e_ov;
|
||||||
if (numbonds > 0) eng_tmp += e_un;
|
if (numbonds > 0 || control->enobondsflag)
|
||||||
|
eng_tmp += e_un;
|
||||||
system->pair_ptr->ev_tally(i,i,system->n,1,eng_tmp,0.0,0.0,0.0,0.0,0.0);
|
system->pair_ptr->ev_tally(i,i,system->n,1,eng_tmp,0.0,0.0,0.0,0.0,0.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* forces */
|
/* forces */
|
||||||
workspace->CdDelta[i] += CEover3; // OvCoor - 2nd term
|
workspace->CdDelta[i] += CEover3; // OvCoor - 2nd term
|
||||||
if (numbonds > 0) workspace->CdDelta[i] += CEunder3; // UnCoor - 1st term
|
if (numbonds > 0 || control->enobondsflag)
|
||||||
|
workspace->CdDelta[i] += CEunder3; // UnCoor - 1st term
|
||||||
|
|
||||||
for( pj = Start_Index(i, bonds); pj < End_Index(i, bonds); ++pj ) {
|
for( pj = Start_Index(i, bonds); pj < End_Index(i, bonds); ++pj ) {
|
||||||
pbond = &(bonds->select.bond_list[pj]);
|
pbond = &(bonds->select.bond_list[pj]);
|
||||||
|
|||||||
@ -24,7 +24,7 @@
|
|||||||
<http://www.gnu.org/licenses/>.
|
<http://www.gnu.org/licenses/>.
|
||||||
----------------------------------------------------------------------*/
|
----------------------------------------------------------------------*/
|
||||||
|
|
||||||
#include "pair_reax_c.h"
|
#include "pair_reaxc.h"
|
||||||
#include "reaxc_types.h"
|
#include "reaxc_types.h"
|
||||||
#include "reaxc_nonbonded.h"
|
#include "reaxc_nonbonded.h"
|
||||||
#include "reaxc_bond_orders.h"
|
#include "reaxc_bond_orders.h"
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user