Merge pull request #2162 from akohlmey/collected-small-changes

Collected small changes
This commit is contained in:
Axel Kohlmeyer
2020-06-19 17:07:07 -04:00
committed by GitHub
60 changed files with 1875 additions and 912 deletions

View File

@ -57,7 +57,6 @@ check_for_autogen_files(${LAMMPS_SOURCE_DIR})
# compiler tests
# these need ot be done early (before further tests).
#####################################################################
include(CheckCCompilerFlag)
include(CheckIncludeFileCXX)
# set required compiler flags and compiler/CPU arch specific optimizations
@ -83,15 +82,6 @@ set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
# GNU compiler specific features for testing
if (${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU")
option(ENABLE_COVERAGE "Enable collecting code coverage data" OFF)
mark_as_advanced(ENABLE_COVERAGE)
if(ENABLE_COVERAGE)
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --coverage")
endif()
endif()
########################################################################
# User input options #
########################################################################
@ -248,6 +238,48 @@ if(BUILD_OMP)
target_link_libraries(lammps PRIVATE OpenMP::OpenMP_CXX)
endif()
# Compiler specific features for testing
if(${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU")
option(ENABLE_COVERAGE "Enable collecting code coverage data" OFF)
mark_as_advanced(ENABLE_COVERAGE)
if(ENABLE_COVERAGE)
if(CMAKE_VERSION VERSION_LESS 3.13)
if(CMAKE_CXX_FLAGS)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --coverage")
else()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_${CMAKE_BUILD_TYPE}_FLAGS} --coverage")
endif()
else()
target_compile_options(lammps PUBLIC --coverage)
target_link_options(lammps PUBLIC --coverage)
endif()
endif()
endif()
set(ENABLE_SANITIZER "none" CACHE STRING "Select a code sanitizer option (none (default), address, thread, undefined)")
mark_as_advanced(ENABLE_SANITIZER)
set(ENABLE_SANITIZER_VALUES none address thread undefined)
set_property(CACHE ENABLE_SANITIZER PROPERTY STRINGS ${ENABLE_SANITIZER_VALUES})
validate_option(ENABLE_SANITIZER ENABLE_SANITIZER_VALUES)
string(TOLOWER ${ENABLE_SANITIZER} ENABLE_SANITIZER)
if(NOT ENABLE_SANITIZER STREQUAL "none")
if((${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU") OR (${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang"))
if(CMAKE_VERSION VERSION_LESS 3.13)
if(CMAKE_CXX_FLAGS)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=${ENABLE_SANITIZER}")
else()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_${CMAKE_BUILD_TYPE}_FLAGS} -fsanitize=${ENABLE_SANITIZER}")
endif()
else()
target_compile_options(lammps PUBLIC -fsanitize=${ENABLE_SANITIZER})
target_link_options(lammps PUBLIC -fsanitize=${ENABLE_SANITIZER})
endif()
else()
message(WARNING "ENABLE_SANITIZER option not supported by ${CMAKE_CXX_COMPILER_ID} compilers. Ignoring.")
set(ENABLE_SANITIZER "none")
endif()
endif()
if(PKG_MSCG OR PKG_USER-ATC OR PKG_USER-AWPMD OR PKG_USER-QUIP OR PKG_LATTE)
enable_language(C)
find_package(LAPACK)
@ -335,15 +367,8 @@ endforeach()
set(CMAKE_TUNE_FLAGS "${CMAKE_TUNE_DEFAULT}" CACHE STRING "Compiler specific optimization or instrumentation")
separate_arguments(CMAKE_TUNE_FLAGS)
include(CheckCXXCompilerFlag)
foreach(_FLAG ${CMAKE_TUNE_FLAGS})
string(REGEX REPLACE "[=\"]" "" _FLAGX ${_FLAG})
check_cxx_compiler_flag("${_FLAG}" COMPILER_SUPPORTS${_FLAGX})
if(COMPILER_SUPPORTS${_FLAGX})
target_compile_options(lammps PRIVATE ${_FLAG})
else()
message(WARNING "${_FLAG} found in CMAKE_TUNE_FLAGS, but not supported by the compiler, skipping")
endif()
target_compile_options(lammps PRIVATE ${_FLAG})
endforeach()
########################################################################
# Basic system tests (standard libraries, headers, functions, types) #

View File

@ -14,40 +14,23 @@ endif()
option(DOWNLOAD_SCAFACOS "Download ScaFaCoS library instead of using an already installed one" ${DOWNLOAD_SCAFACOS_DEFAULT})
if(DOWNLOAD_SCAFACOS)
message(STATUS "ScaFaCoS download requested - we will build our own")
# create variables to pass our compiler flags along to the subsystem compile
# need to apply -fallow-argument-mismatch, if the fortran compiler supports it
include(CheckFortranCompilerFlag)
check_fortran_compiler_flag("-fallow-argument-mismatch" GNUFortran_ARGUMENT_MISMATCH_FLAG)
if(GNUFortran_ARGUMENT_MISMATCH_FLAG)
set(APPEND_Fortran_FLAG "-fallow-argument-mismatch")
endif()
if(CMAKE_Fortran_FLAGS)
set(SCAFACOS_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} ${APPEND_Fortran_FLAG}")
else()
set(SCAFACOS_Fortran_FLAGS "${CMAKE_Fortran_${CMAKE_BUILD_TYPE}_FLAGS} ${APPEND_Fortran_FLAG}")
endif()
if(CMAKE_CXX_FLAGS)
set(SCAFACOS_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
else()
set(SCAFACOS_CXX_FLAGS "${CMAKE_CXX_${CMAKE_BUILD_TYPE}_FLAGS}")
endif()
if(CMAKE_C_FLAGS)
set(SCAFACOS_C_FLAGS "${CMAKE_C_FLAGS}")
else()
set(SCAFACOS_C_FLAGS "${CMAKE_C_${CMAKE_BUILD_TYPE}_FLAGS}")
endif()
# version 1.0.1 needs a patch to compile and linke cleanly with GCC 10 and later.
file(DOWNLOAD https://download.lammps.org/thirdparty/scafacos-1.0.1-fix.diff ${CMAKE_CURRENT_BINARY_DIR}/scafacos-1.0.1.fix.diff
EXPECTED_HASH MD5=4baa1333bb28fcce102d505e1992d032)
include(ExternalProject)
ExternalProject_Add(scafacos_build
URL https://github.com/scafacos/scafacos/releases/download/v1.0.1/scafacos-1.0.1.tar.gz
URL_MD5 bd46d74e3296bd8a444d731bb10c1738
PATCH_COMMAND patch -p1 < ${CMAKE_CURRENT_BINARY_DIR}/scafacos-1.0.1.fix.diff
CONFIGURE_COMMAND <SOURCE_DIR>/configure --prefix=<INSTALL_DIR> --disable-doc
--enable-fcs-solvers=fmm,p2nfft,direct,ewald,p3m
--with-internal-fftw --with-internal-pfft
--with-internal-pnfft ${CONFIGURE_REQUEST_PIC}
FC=${CMAKE_MPI_Fortran_COMPILER} FCFLAGS=${SCAFACOS_Fortran_FLAGS}
CXX=${CMAKE_MPI_CXX_COMPILER} CXXFLAGS=${SCAFACOS_CXX_FLAGS}
CC=${CMAKE_MPI_C_COMPILER} CFLAGS=${SCAFACOS_C_FLAGS}
FC=${CMAKE_MPI_Fortran_COMPILER}
CXX=${CMAKE_MPI_CXX_COMPILER}
CC=${CMAKE_MPI_C_COMPILER}
F77=
BUILD_BYPRODUCTS
<INSTALL_DIR>/lib/libfcs.a

View File

@ -8,8 +8,8 @@ useful during development, testing or debugging.
.. _compilation:
Verify compilation flags
------------------------
Monitor compilation flags
-------------------------
Sometimes it is necessary to verify the complete sequence of compilation flags
generated by the CMake build. To enable a more verbose output during
@ -19,7 +19,8 @@ compilation you can use the following option.
-D CMAKE_VERBOSE_MAKEFILE=value # value = no (default) or yes
Another way of doing this without reconfiguration is calling make with variable VERBOSE set to 1:
Another way of doing this without reconfiguration is calling make with
variable VERBOSE set to 1:
.. code-block:: bash
@ -33,25 +34,26 @@ Address, Undefined Behavior, and Thread Sanitizer Support
---------------------------------------------------------
Compilers such as GCC and Clang support generating instrumented binaries
which use different sanitizer libraries to detect problems in code
which use different sanitizer libraries to detect problems in the code
during run-time. They can detect issues like:
- `memory leaks <https://clang.llvm.org/docs/AddressSanitizer.html>`_
- `undefined behavior <https://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html>`_
- `data races <https://clang.llvm.org/docs/ThreadSanitizer.html>`_
Please note that this kind of instrumentation usually comes with a small
performance hit (much less than using tools like `Valgrind
<https://valgrind.org>`_). The to enable these features additional
compiler flags need to be added to the compilation and linking stages.
This is most easily done through setting the ``CMAKE_TUNE_FLAGS``
variable during configuration. Examples:
Please note that this kind of instrumentation usually comes with a
performance hit (but much less than using tools like `Valgrind
<https://valgrind.org>`_ with a more low level approach). The to enable
these features additional compiler flags need to be added to the
compilation and linking stages. This is done through setting the
``ENABLE_SANITIZER`` variable during configuration. Examples:
.. code-block:: bash
-D CMAKE_TUNE_FLAGS=-fsanitize=address # enable address sanitizer / memory leak checker
-D CMAKE_TUNE_FLAGS=-fsanitize=undefined # enable undefined behavior sanitizer
-D CMAKE_TUNE_FLAGS=-fsanitize=thread # enable thread sanitizer
-D ENABLE_SANITIZER=none # no sanitizer active (default)
-D ENABLE_SANITIZER=address # enable address sanitizer / memory leak checker
-D ENABLE_SANITIZER=undefined # enable undefined behavior sanitizer
-D ENABLE_SANITIZER=thread # enable thread sanitizer
----------
@ -86,19 +88,21 @@ The output of this command will be looking something like this::
[...]$ ctest
Test project /home/akohlmey/compile/lammps/build-testing
Start 1: MolPairStyle:hybrid-overlay
1/26 Test #1: MolPairStyle:hybrid-overlay ......... Passed 0.02 sec
1/109 Test #1: MolPairStyle:hybrid-overlay ......... Passed 0.02 sec
Start 2: MolPairStyle:hybrid
2/26 Test #2: MolPairStyle:hybrid ................. Passed 0.01 sec
2/109 Test #2: MolPairStyle:hybrid ................. Passed 0.01 sec
Start 3: MolPairStyle:lj_class2
[...]
Start 25: AngleStyle:harmonic
25/26 Test #25: AngleStyle:harmonic ................. Passed 0.01 sec
Start 26: AngleStyle:zero
26/26 Test #26: AngleStyle:zero ..................... Passed 0.01 sec
Start 107: PotentialFileReader
107/109 Test #107: PotentialFileReader ................ Passed 0.04 sec
Start 108: EIMPotentialFileReader
108/109 Test #108: EIMPotentialFileReader ............. Passed 0.03 sec
Start 109: TestSimpleCommands
109/109 Test #109: TestSimpleCommands ................. Passed 0.02 sec
100% tests passed, 0 tests failed out of 26
Total Test time (real) = 0.27 sec
Total Test time (real) = 25.57 sec
The ``ctest`` command has many options, the most important ones are:
@ -193,8 +197,8 @@ In this particular case, 5 out of 6 sets of tests were conducted, the
tests for the ``lj/cut/opt`` pair style was skipped, since the tests
executable did not include it. To learn what individual tests are performed,
you (currently) need to read the source code. You can use code coverage
recording (see next section) to confirm how well the tests cover the individual
source files.
recording (see next section) to confirm how well the tests cover the code
paths in the individual source files.
The force style test programs have a common set of options:
@ -211,6 +215,14 @@ The force style test programs have a common set of options:
* - -v
- verbose output: also print the executed LAMMPS commands
The ``ctest`` tool has no mechanism to directly pass flags to the individual
test programs, but a workaround has been implmented where these flags can be
set in an environment variable ``TEST_ARGS``. Example:
.. code-block:: bash
env TEST_ARGS=-s ctest -V -R BondStyle
To add a test for a style that is not yet covered, it is usually best
to copy a YAML file for a similar style to a new file, edit the details
of the style (how to call it, how to set its coefficients) and then
@ -244,6 +256,16 @@ and working.
of mis-compiled code (or an undesired large loss of precision due
to significant reordering of operations and thus less error cancellation).
Tests for other components and utility functions
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Additional tests that validate utility functions or specific components
of LAMMPS are implemented as standalone executable which may, or may not
require creating a suitable LAMMPS instance. These tests are more specific
and do not require YAML format input files. To add a test, either an
existing source file needs to be extended or a new file added, which in turn
requires additions to the ``CMakeLists.txt`` file in the source folder.
Collect and visualize code coverage metrics
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -306,3 +328,23 @@ The images below illustrate how the data is presented.
:target: JPG/coverage-file-branches.png
Source page with branches
Coding style utilities
----------------------
To aid with enforcing some of the coding style conventions in LAMMPS
some additional build targets have been added. These require Python 3.5
or later and will only work on Unix-like operating and file systems.
The following options are available.
.. code-block:: bash
make check-whitespace # generate coverage report in HTML format
make fix-whitespace # generate coverage report in XML format
make check-permissions # delete folder with HTML format coverage report
make fix-permissions # delete all collected coverage data and HTML output
For the code in the ``unittest`` tree we are using the `clang-format`
tool (Clang version 8.0 or later is required). If available, the source
code files in the ``unittest`` tree can be updated to conform to the
formatting settings using ``make format-tests``.

View File

@ -85,7 +85,8 @@ standard 12-6 Lennard-Jones written in the epsilon/sigma form:
.. math::
E(r) = 4\epsilon\biggl[\bigl(\frac{\sigma}{r}\bigr)^{12} - \bigl(\frac{\sigma}{r}\bigr)^6\biggr]
E(r) = 4 \epsilon \left[ \left(\frac{\sigma}{r}\right)^{12} -
\left(\frac{\sigma}{r}\right)^6 \right]
Either the first two or all of the following coefficients must be
defined for each pair of atoms types via the pair_coeff command as in
@ -141,7 +142,7 @@ given or both left out:
**Mixing, shift, table, tail correction, restart, rRESPA info**\ :
For atom type pairs I,J and I != J, the :math:`\epsilon` and
:math:`sigma` coefficients and cutoff distances for the lj/mdf pair
:math:`\sigma` coefficients and cutoff distances for the lj/mdf pair
style can be mixed. The default mix value is *geometric*\ . See the
"pair_modify" command for details. The other two pair styles buck/mdf
and lennard/mdf do not support mixing, so all I,J pairs of coefficients

View File

@ -39,7 +39,7 @@ neigh_modify once no every 1 delay 0 check yes
# Run MD
velocity all create 300.0 4928459
velocity all create 300.0 4928459 loop geom
fix 1 all nve
run ${nsteps}

View File

@ -39,7 +39,7 @@ neigh_modify once no every 1 delay 0 check yes
# Run MD
velocity all create 300.0 4928459
velocity all create 300.0 4928459 loop geom
fix 1 all nve
run ${nsteps}

View File

@ -39,7 +39,7 @@ neigh_modify once no every 1 delay 0 check yes
# Run MD
velocity all create 300.0 4928459
velocity all create 300.0 4928459 loop geom
fix 1 all nve
run ${nsteps}

View File

@ -42,7 +42,7 @@ neigh_modify once no every 1 delay 0 check yes
# Run MD
velocity all create 300.0 4928459
velocity all create 300.0 4928459 loop geom
fix 1 all nve
run ${nsteps}

View File

@ -42,7 +42,7 @@ neigh_modify once no every 1 delay 0 check yes
# Run MD
velocity all create 300.0 4928459
velocity all create 300.0 4928459 loop geom
fix 1 all nve
run ${nsteps}

View File

@ -1,13 +1,13 @@
LAMMPS (27 Nov 2018)
LAMMPS (15 Jun 2020)
using 1 OpenMP thread(s) per MPI task
# Demonstrate SNAP Ta potential
# Demonstrate SNAP Mo potential
# Initialize simulation
variable nsteps index 100
variable nrep equal 4
variable a equal 3.160
units metal
units metal
# generate the box and atom positions using a BCC lattice
@ -18,21 +18,21 @@ variable ny equal 4
variable nz equal ${nrep}
variable nz equal 4
boundary p p p
boundary p p p
lattice bcc $a
lattice bcc 3.16
Lattice spacing in x,y,z = 3.16 3.16 3.16
region box block 0 ${nx} 0 ${ny} 0 ${nz}
region box block 0 4 0 ${ny} 0 ${nz}
region box block 0 4 0 4 0 ${nz}
region box block 0 4 0 4 0 4
create_box 1 box
Created orthogonal box = (0 0 0) to (12.64 12.64 12.64)
region box block 0 ${nx} 0 ${ny} 0 ${nz}
region box block 0 4 0 ${ny} 0 ${nz}
region box block 0 4 0 4 0 ${nz}
region box block 0 4 0 4 0 4
create_box 1 box
Created orthogonal box = (0.0 0.0 0.0) to (12.64 12.64 12.64)
1 by 1 by 1 MPI processor grid
create_atoms 1 box
create_atoms 1 box
Created 128 atoms
Time spent = 0.00029707 secs
create_atoms CPU = 0.000 seconds
mass 1 183.84
@ -40,11 +40,11 @@ mass 1 183.84
include Mo_Chen_PRM2017.snap
# DATE: 2017-09-18 CONTRIBUTOR: Chi Chen <chc273@eng.ucsd.edu> CITATION: C. Chen, Z. Deng, R. Tran, H. Tang, I.-H. Chu, S. P. Ong, "Accurate force field for molybdenum by machine learning large materials data" Physical Review Materials 1, 04 3603 (2017)
# DATE: 2017-09-18 UNITS: metal CONTRIBUTOR: Chi Chen <chc273@eng.ucsd.edu> CITATION: C. Chen, Z. Deng, R. Tran, H. Tang, I.-H. Chu, S. P. Ong, "Accurate force field for molybdenum by machine learning large materials data" Physical Review Materials 1, 04 3603 (2017)
# Generated by Materials Virtual Lab
# Definition of SNAP potential.
pair_style snap
pair_coeff * * Mo_Chen_PRM2017.snapcoeff Mo Mo_Chen_PRM2017.snapparam Mo
pair_coeff * * Mo_Chen_PRM2017.snapcoeff Mo_Chen_PRM2017.snapparam Mo
Reading potential file Mo_Chen_PRM2017.snapcoeff with DATE: 2017-09-18
SNAP Element = Mo, Radius 0.5, Weight 1
Reading potential file Mo_Chen_PRM2017.snapparam with DATE: 2017-09-18
@ -54,7 +54,7 @@ SNAP keyword twojmax 6
# Setup output
thermo 10
thermo 10
thermo_modify norm yes
# Set up NVE run
@ -65,7 +65,7 @@ neigh_modify once no every 1 delay 0 check yes
# Run MD
velocity all create 300.0 4928459
velocity all create 300.0 4928459 loop geom
fix 1 all nve
run ${nsteps}
run 100
@ -81,33 +81,33 @@ Neighbor list info ...
pair build: full/bin/atomonly
stencil: full/bin/3d
bin: standard
Per MPI rank memory allocation (min/avg/max) = 3.507 | 3.507 | 3.507 Mbytes
Per MPI rank memory allocation (min/avg/max) = 3.335 | 3.335 | 3.335 Mbytes
Step Temp E_pair E_mol TotEng Press
0 300 -22.405975 0 -22.3675 2575.7657
10 294.77555 -22.405305 0 -22.3675 2756.6894
20 279.53011 -22.40335 0 -22.3675 3285.8272
30 255.52174 -22.40027 0 -22.3675 4122.8933
40 224.7299 -22.396321 0 -22.367499 5204.3499
50 189.67529 -22.391825 0 -22.367499 6449.1308
60 153.18862 -22.387145 0 -22.367499 7765.911
70 118.14998 -22.382652 0 -22.367499 9061.1616
80 87.224916 -22.378685 0 -22.367499 10247.68
90 62.623892 -22.37553 0 -22.367498 11250.067
100 45.9103 -22.373386 0 -22.367498 12011.726
Loop time of 7.00873 on 1 procs for 100 steps with 128 atoms
10 294.8148 -22.40531 0 -22.3675 2762.0942
20 279.68628 -22.40337 0 -22.3675 3306.7656
30 255.84798 -22.400312 0 -22.3675 4168.2979
40 225.22346 -22.396384 0 -22.367499 5281.9537
50 190.25143 -22.391899 0 -22.367499 6565.6626
60 153.66642 -22.387207 0 -22.367499 7927.3186
70 118.25575 -22.382665 0 -22.367499 9271.9554
80 86.616338 -22.378607 0 -22.367499 10510.959
90 60.935787 -22.375314 0 -22.367498 11568.261
100 42.815823 -22.37299 0 -22.367498 12385.433
Loop time of 0.897752 on 1 procs for 100 steps with 128 atoms
Performance: 0.616 ns/day, 38.937 hours/ns, 14.268 timesteps/s
99.7% CPU use with 1 MPI tasks x 1 OpenMP threads
Performance: 4.812 ns/day, 4.988 hours/ns, 111.389 timesteps/s
99.9% CPU use with 1 MPI tasks x 1 OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 7.0068 | 7.0068 | 7.0068 | 0.0 | 99.97
Pair | 0.89711 | 0.89711 | 0.89711 | 0.0 | 99.93
Neigh | 0 | 0 | 0 | 0.0 | 0.00
Comm | 0.00083661 | 0.00083661 | 0.00083661 | 0.0 | 0.01
Output | 0.00025535 | 0.00025535 | 0.00025535 | 0.0 | 0.00
Modify | 0.00034285 | 0.00034285 | 0.00034285 | 0.0 | 0.00
Other | | 0.0005035 | | | 0.01
Comm | 0.0002501 | 0.0002501 | 0.0002501 | 0.0 | 0.03
Output | 0.00013161 | 0.00013161 | 0.00013161 | 0.0 | 0.01
Modify | 0.00010276 | 0.00010276 | 0.00010276 | 0.0 | 0.01
Other | | 0.0001559 | | | 0.02
Nlocal: 128 ave 128 max 128 min
Histogram: 1 0 0 0 0 0 0 0 0 0
@ -123,4 +123,4 @@ Ave neighs/atom = 58
Neighbor list builds = 0
Dangerous builds = 0
Total wall time: 0:00:07
Total wall time: 0:00:00

View File

@ -1,13 +1,13 @@
LAMMPS (27 Nov 2018)
LAMMPS (15 Jun 2020)
using 1 OpenMP thread(s) per MPI task
# Demonstrate SNAP Ta potential
# Demonstrate SNAP Mo potential
# Initialize simulation
variable nsteps index 100
variable nrep equal 4
variable a equal 3.160
units metal
units metal
# generate the box and atom positions using a BCC lattice
@ -18,21 +18,21 @@ variable ny equal 4
variable nz equal ${nrep}
variable nz equal 4
boundary p p p
boundary p p p
lattice bcc $a
lattice bcc 3.16
Lattice spacing in x,y,z = 3.16 3.16 3.16
region box block 0 ${nx} 0 ${ny} 0 ${nz}
region box block 0 4 0 ${ny} 0 ${nz}
region box block 0 4 0 4 0 ${nz}
region box block 0 4 0 4 0 4
create_box 1 box
Created orthogonal box = (0 0 0) to (12.64 12.64 12.64)
region box block 0 ${nx} 0 ${ny} 0 ${nz}
region box block 0 4 0 ${ny} 0 ${nz}
region box block 0 4 0 4 0 ${nz}
region box block 0 4 0 4 0 4
create_box 1 box
Created orthogonal box = (0.0 0.0 0.0) to (12.64 12.64 12.64)
1 by 2 by 2 MPI processor grid
create_atoms 1 box
create_atoms 1 box
Created 128 atoms
Time spent = 0.000289917 secs
create_atoms CPU = 0.000 seconds
mass 1 183.84
@ -40,11 +40,11 @@ mass 1 183.84
include Mo_Chen_PRM2017.snap
# DATE: 2017-09-18 CONTRIBUTOR: Chi Chen <chc273@eng.ucsd.edu> CITATION: C. Chen, Z. Deng, R. Tran, H. Tang, I.-H. Chu, S. P. Ong, "Accurate force field for molybdenum by machine learning large materials data" Physical Review Materials 1, 04 3603 (2017)
# DATE: 2017-09-18 UNITS: metal CONTRIBUTOR: Chi Chen <chc273@eng.ucsd.edu> CITATION: C. Chen, Z. Deng, R. Tran, H. Tang, I.-H. Chu, S. P. Ong, "Accurate force field for molybdenum by machine learning large materials data" Physical Review Materials 1, 04 3603 (2017)
# Generated by Materials Virtual Lab
# Definition of SNAP potential.
pair_style snap
pair_coeff * * Mo_Chen_PRM2017.snapcoeff Mo Mo_Chen_PRM2017.snapparam Mo
pair_coeff * * Mo_Chen_PRM2017.snapcoeff Mo_Chen_PRM2017.snapparam Mo
Reading potential file Mo_Chen_PRM2017.snapcoeff with DATE: 2017-09-18
SNAP Element = Mo, Radius 0.5, Weight 1
Reading potential file Mo_Chen_PRM2017.snapparam with DATE: 2017-09-18
@ -54,7 +54,7 @@ SNAP keyword twojmax 6
# Setup output
thermo 10
thermo 10
thermo_modify norm yes
# Set up NVE run
@ -65,7 +65,7 @@ neigh_modify once no every 1 delay 0 check yes
# Run MD
velocity all create 300.0 4928459
velocity all create 300.0 4928459 loop geom
fix 1 all nve
run ${nsteps}
run 100
@ -81,33 +81,33 @@ Neighbor list info ...
pair build: full/bin/atomonly
stencil: full/bin/3d
bin: standard
Per MPI rank memory allocation (min/avg/max) = 3.486 | 3.486 | 3.486 Mbytes
Per MPI rank memory allocation (min/avg/max) = 3.271 | 3.271 | 3.271 Mbytes
Step Temp E_pair E_mol TotEng Press
0 300 -22.405975 0 -22.3675 2575.7657
10 294.63153 -22.405286 0 -22.3675 2753.4662
20 278.98535 -22.40328 0 -22.3675 3272.416
30 254.38916 -22.400125 0 -22.3675 4091.8933
40 222.91191 -22.396088 0 -22.367499 5148.5505
50 187.16984 -22.391504 0 -22.367499 6362.2454
60 150.08253 -22.386747 0 -22.367499 7643.2732
70 114.60307 -22.382197 0 -22.367499 8900.2448
80 83.449257 -22.378201 0 -22.367499 10047.619
90 58.862643 -22.375048 0 -22.367498 11012.233
100 42.41931 -22.372939 0 -22.367498 11740.641
Loop time of 2.15419 on 4 procs for 100 steps with 128 atoms
10 294.8148 -22.40531 0 -22.3675 2762.0942
20 279.68628 -22.40337 0 -22.3675 3306.7656
30 255.84798 -22.400312 0 -22.3675 4168.2979
40 225.22346 -22.396384 0 -22.367499 5281.9537
50 190.25143 -22.391899 0 -22.367499 6565.6626
60 153.66642 -22.387207 0 -22.367499 7927.3186
70 118.25575 -22.382665 0 -22.367499 9271.9554
80 86.616338 -22.378607 0 -22.367499 10510.959
90 60.935787 -22.375314 0 -22.367498 11568.261
100 42.815823 -22.37299 0 -22.367498 12385.433
Loop time of 0.260783 on 4 procs for 100 steps with 128 atoms
Performance: 2.005 ns/day, 11.968 hours/ns, 46.421 timesteps/s
92.0% CPU use with 4 MPI tasks x 1 OpenMP threads
Performance: 16.566 ns/day, 1.449 hours/ns, 383.461 timesteps/s
97.1% CPU use with 4 MPI tasks x 1 OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 1.7677 | 1.9028 | 1.9897 | 6.2 | 88.33
Pair | 0.23045 | 0.23744 | 0.24455 | 1.2 | 91.05
Neigh | 0 | 0 | 0 | 0.0 | 0.00
Comm | 0.15367 | 0.24295 | 0.38029 | 17.6 | 11.28
Output | 0.00034404 | 0.0012512 | 0.0017219 | 1.6 | 0.06
Modify | 0.00018859 | 0.00021273 | 0.00023699 | 0.0 | 0.01
Other | | 0.007011 | | | 0.33
Comm | 0.014524 | 0.021267 | 0.027713 | 3.7 | 8.15
Output | 0.00014997 | 0.00040495 | 0.0011623 | 0.0 | 0.16
Modify | 4.2439e-05 | 4.6909e-05 | 5.0068e-05 | 0.0 | 0.02
Other | | 0.00162 | | | 0.62
Nlocal: 32 ave 32 max 32 min
Histogram: 4 0 0 0 0 0 0 0 0 0
@ -123,4 +123,4 @@ Ave neighs/atom = 58
Neighbor list builds = 0
Dangerous builds = 0
Total wall time: 0:00:02
Total wall time: 0:00:00

View File

@ -1,4 +1,4 @@
LAMMPS (27 Nov 2018)
LAMMPS (15 Jun 2020)
using 1 OpenMP thread(s) per MPI task
# Demonstrate SNAP Ta potential
@ -7,7 +7,7 @@ LAMMPS (27 Nov 2018)
variable nsteps index 100
variable nrep equal 4
variable a equal 3.316
units metal
units metal
# generate the box and atom positions using a BCC lattice
@ -18,28 +18,28 @@ variable ny equal 4
variable nz equal ${nrep}
variable nz equal 4
boundary p p p
boundary p p p
lattice bcc $a
lattice bcc 3.316
Lattice spacing in x,y,z = 3.316 3.316 3.316
region box block 0 ${nx} 0 ${ny} 0 ${nz}
region box block 0 4 0 ${ny} 0 ${nz}
region box block 0 4 0 4 0 ${nz}
region box block 0 4 0 4 0 4
create_box 1 box
Created orthogonal box = (0 0 0) to (13.264 13.264 13.264)
region box block 0 ${nx} 0 ${ny} 0 ${nz}
region box block 0 4 0 ${ny} 0 ${nz}
region box block 0 4 0 4 0 ${nz}
region box block 0 4 0 4 0 4
create_box 1 box
Created orthogonal box = (0.0 0.0 0.0) to (13.264 13.264 13.264)
1 by 1 by 1 MPI processor grid
create_atoms 1 box
create_atoms 1 box
Created 128 atoms
Time spent = 0.000350714 secs
create_atoms CPU = 0.000 seconds
mass 1 180.88
# choose potential
include Ta06A.snap
# DATE: 2014-09-05 CONTRIBUTOR: Aidan Thompson athomps@sandia.gov CITATION: Thompson, Swiler, Trott, Foiles and Tucker, arxiv.org, 1409.3880 (2014)
# DATE: 2014-09-05 UNITS: metal CONTRIBUTOR: Aidan Thompson athomps@sandia.gov CITATION: Thompson, Swiler, Trott, Foiles and Tucker, arxiv.org, 1409.3880 (2014)
# Definition of SNAP potential Ta_Cand06A
# Assumes 1 LAMMPS atom type
@ -56,7 +56,7 @@ pair_style hybrid/overlay zbl 4 4.8 snap
pair_coeff 1 1 zbl ${zblz} ${zblz}
pair_coeff 1 1 zbl 73 ${zblz}
pair_coeff 1 1 zbl 73 73
pair_coeff * * snap Ta06A.snapcoeff Ta Ta06A.snapparam Ta
pair_coeff * * snap Ta06A.snapcoeff Ta06A.snapparam Ta
Reading potential file Ta06A.snapcoeff with DATE: 2014-09-05
SNAP Element = Ta, Radius 0.5, Weight 1
Reading potential file Ta06A.snapparam with DATE: 2014-09-05
@ -64,14 +64,13 @@ SNAP keyword rcutfac 4.67637
SNAP keyword twojmax 6
SNAP keyword rfac0 0.99363
SNAP keyword rmin0 0
SNAP keyword diagonalstyle 3
SNAP keyword bzeroflag 0
SNAP keyword quadraticflag 0
# Setup output
thermo 10
thermo 10
thermo_modify norm yes
# Set up NVE run
@ -82,7 +81,7 @@ neigh_modify once no every 1 delay 0 check yes
# Run MD
velocity all create 300.0 4928459
velocity all create 300.0 4928459 loop geom
fix 1 all nve
run ${nsteps}
run 100
@ -103,33 +102,33 @@ Neighbor list info ...
pair build: full/bin/atomonly
stencil: full/bin/3d
bin: standard
Per MPI rank memory allocation (min/avg/max) = 4.138 | 4.138 | 4.138 Mbytes
Per MPI rank memory allocation (min/avg/max) = 3.967 | 3.967 | 3.967 Mbytes
Step Temp E_pair E_mol TotEng Press
0 300 -11.85157 0 -11.813095 2717.1661
10 295.96579 -11.851053 0 -11.813095 2696.1559
20 284.32535 -11.84956 0 -11.813095 2301.3713
30 266.04602 -11.847215 0 -11.813095 1832.1745
40 242.2862 -11.844168 0 -11.813095 1492.6765
50 214.48968 -11.840603 0 -11.813094 1312.8908
60 184.32523 -11.836734 0 -11.813094 1284.582
70 153.58055 -11.832791 0 -11.813094 1374.4457
80 124.04276 -11.829003 0 -11.813094 1537.703
90 97.37622 -11.825582 0 -11.813094 1734.9662
100 75.007873 -11.822714 0 -11.813094 1930.8005
Loop time of 5.03244 on 1 procs for 100 steps with 128 atoms
10 296.01467 -11.851059 0 -11.813095 2697.4796
20 284.53666 -11.849587 0 -11.813095 2289.1527
30 266.51577 -11.847275 0 -11.813095 1851.7131
40 243.05007 -11.844266 0 -11.813095 1570.684
50 215.51032 -11.840734 0 -11.813094 1468.1899
60 185.48331 -11.836883 0 -11.813094 1524.8757
70 154.6736 -11.832931 0 -11.813094 1698.3351
80 124.79303 -11.829099 0 -11.813094 1947.0715
90 97.448054 -11.825592 0 -11.813094 2231.9563
100 74.035418 -11.822589 0 -11.813094 2515.8526
Loop time of 0.702618 on 1 procs for 100 steps with 128 atoms
Performance: 0.858 ns/day, 27.958 hours/ns, 19.871 timesteps/s
98.9% CPU use with 1 MPI tasks x 1 OpenMP threads
Performance: 6.148 ns/day, 3.903 hours/ns, 142.325 timesteps/s
99.7% CPU use with 1 MPI tasks x 1 OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 5.0308 | 5.0308 | 5.0308 | 0.0 | 99.97
Pair | 0.70188 | 0.70188 | 0.70188 | 0.0 | 99.90
Neigh | 0 | 0 | 0 | 0.0 | 0.00
Comm | 0.00070858 | 0.00070858 | 0.00070858 | 0.0 | 0.01
Output | 0.00024676 | 0.00024676 | 0.00024676 | 0.0 | 0.00
Modify | 0.0002749 | 0.0002749 | 0.0002749 | 0.0 | 0.01
Other | | 0.0004299 | | | 0.01
Comm | 0.00025487 | 0.00025487 | 0.00025487 | 0.0 | 0.04
Output | 0.00015402 | 0.00015402 | 0.00015402 | 0.0 | 0.02
Modify | 0.00011039 | 0.00011039 | 0.00011039 | 0.0 | 0.02
Other | | 0.000217 | | | 0.03
Nlocal: 128 ave 128 max 128 min
Histogram: 1 0 0 0 0 0 0 0 0 0
@ -145,4 +144,4 @@ Ave neighs/atom = 58
Neighbor list builds = 0
Dangerous builds = 0
Total wall time: 0:00:05
Total wall time: 0:00:00

View File

@ -1,4 +1,4 @@
LAMMPS (27 Nov 2018)
LAMMPS (15 Jun 2020)
using 1 OpenMP thread(s) per MPI task
# Demonstrate SNAP Ta potential
@ -7,7 +7,7 @@ LAMMPS (27 Nov 2018)
variable nsteps index 100
variable nrep equal 4
variable a equal 3.316
units metal
units metal
# generate the box and atom positions using a BCC lattice
@ -18,28 +18,28 @@ variable ny equal 4
variable nz equal ${nrep}
variable nz equal 4
boundary p p p
boundary p p p
lattice bcc $a
lattice bcc 3.316
Lattice spacing in x,y,z = 3.316 3.316 3.316
region box block 0 ${nx} 0 ${ny} 0 ${nz}
region box block 0 4 0 ${ny} 0 ${nz}
region box block 0 4 0 4 0 ${nz}
region box block 0 4 0 4 0 4
create_box 1 box
Created orthogonal box = (0 0 0) to (13.264 13.264 13.264)
region box block 0 ${nx} 0 ${ny} 0 ${nz}
region box block 0 4 0 ${ny} 0 ${nz}
region box block 0 4 0 4 0 ${nz}
region box block 0 4 0 4 0 4
create_box 1 box
Created orthogonal box = (0.0 0.0 0.0) to (13.264 13.264 13.264)
1 by 2 by 2 MPI processor grid
create_atoms 1 box
create_atoms 1 box
Created 128 atoms
Time spent = 0.000299692 secs
create_atoms CPU = 0.000 seconds
mass 1 180.88
# choose potential
include Ta06A.snap
# DATE: 2014-09-05 CONTRIBUTOR: Aidan Thompson athomps@sandia.gov CITATION: Thompson, Swiler, Trott, Foiles and Tucker, arxiv.org, 1409.3880 (2014)
# DATE: 2014-09-05 UNITS: metal CONTRIBUTOR: Aidan Thompson athomps@sandia.gov CITATION: Thompson, Swiler, Trott, Foiles and Tucker, arxiv.org, 1409.3880 (2014)
# Definition of SNAP potential Ta_Cand06A
# Assumes 1 LAMMPS atom type
@ -56,7 +56,7 @@ pair_style hybrid/overlay zbl 4 4.8 snap
pair_coeff 1 1 zbl ${zblz} ${zblz}
pair_coeff 1 1 zbl 73 ${zblz}
pair_coeff 1 1 zbl 73 73
pair_coeff * * snap Ta06A.snapcoeff Ta Ta06A.snapparam Ta
pair_coeff * * snap Ta06A.snapcoeff Ta06A.snapparam Ta
Reading potential file Ta06A.snapcoeff with DATE: 2014-09-05
SNAP Element = Ta, Radius 0.5, Weight 1
Reading potential file Ta06A.snapparam with DATE: 2014-09-05
@ -64,14 +64,13 @@ SNAP keyword rcutfac 4.67637
SNAP keyword twojmax 6
SNAP keyword rfac0 0.99363
SNAP keyword rmin0 0
SNAP keyword diagonalstyle 3
SNAP keyword bzeroflag 0
SNAP keyword quadraticflag 0
# Setup output
thermo 10
thermo 10
thermo_modify norm yes
# Set up NVE run
@ -82,7 +81,7 @@ neigh_modify once no every 1 delay 0 check yes
# Run MD
velocity all create 300.0 4928459
velocity all create 300.0 4928459 loop geom
fix 1 all nve
run ${nsteps}
run 100
@ -103,33 +102,33 @@ Neighbor list info ...
pair build: full/bin/atomonly
stencil: full/bin/3d
bin: standard
Per MPI rank memory allocation (min/avg/max) = 4.118 | 4.118 | 4.118 Mbytes
Per MPI rank memory allocation (min/avg/max) = 3.903 | 3.903 | 3.903 Mbytes
Step Temp E_pair E_mol TotEng Press
0 300 -11.85157 0 -11.813095 2717.1661
10 295.8664 -11.85104 0 -11.813095 2702.935
20 283.95868 -11.849513 0 -11.813095 2301.3242
30 265.29535 -11.847119 0 -11.813095 1870.3173
40 241.09337 -11.844015 0 -11.813095 1568.1549
50 212.86732 -11.840395 0 -11.813094 1409.2092
60 182.35256 -11.836481 0 -11.813094 1389.0527
70 151.38968 -11.83251 0 -11.813094 1474.9232
80 121.80051 -11.828715 0 -11.813094 1627.6911
90 95.262635 -11.825311 0 -11.813094 1812.9327
100 73.194645 -11.822481 0 -11.813094 1995.2199
Loop time of 1.4959 on 4 procs for 100 steps with 128 atoms
10 296.01467 -11.851059 0 -11.813095 2697.4796
20 284.53666 -11.849587 0 -11.813095 2289.1527
30 266.51577 -11.847275 0 -11.813095 1851.7131
40 243.05007 -11.844266 0 -11.813095 1570.684
50 215.51032 -11.840734 0 -11.813094 1468.1899
60 185.48331 -11.836883 0 -11.813094 1524.8757
70 154.6736 -11.832931 0 -11.813094 1698.3351
80 124.79303 -11.829099 0 -11.813094 1947.0715
90 97.448054 -11.825592 0 -11.813094 2231.9563
100 74.035418 -11.822589 0 -11.813094 2515.8526
Loop time of 0.230164 on 4 procs for 100 steps with 128 atoms
Performance: 2.888 ns/day, 8.311 hours/ns, 66.850 timesteps/s
94.6% CPU use with 4 MPI tasks x 1 OpenMP threads
Performance: 18.769 ns/day, 1.279 hours/ns, 434.473 timesteps/s
93.5% CPU use with 4 MPI tasks x 1 OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 1.2973 | 1.3263 | 1.3444 | 1.6 | 88.66
Pair | 0.1824 | 0.19154 | 0.21822 | 3.5 | 83.22
Neigh | 0 | 0 | 0 | 0.0 | 0.00
Comm | 0.14155 | 0.16475 | 0.19518 | 5.0 | 11.01
Output | 0.00055361 | 0.0006234 | 0.00078511 | 0.0 | 0.04
Modify | 0.00016427 | 0.00020635 | 0.00032949 | 0.0 | 0.01
Other | | 0.004009 | | | 0.27
Comm | 0.010843 | 0.037176 | 0.046129 | 7.9 | 16.15
Output | 0.00014973 | 0.00028926 | 0.00070024 | 0.0 | 0.13
Modify | 5.3883e-05 | 5.6803e-05 | 6.1989e-05 | 0.0 | 0.02
Other | | 0.001104 | | | 0.48
Nlocal: 32 ave 32 max 32 min
Histogram: 4 0 0 0 0 0 0 0 0 0
@ -145,4 +144,4 @@ Ave neighs/atom = 58
Neighbor list builds = 0
Dangerous builds = 0
Total wall time: 0:00:01
Total wall time: 0:00:00

View File

@ -1,13 +1,13 @@
LAMMPS (27 Nov 2018)
LAMMPS (15 Jun 2020)
using 1 OpenMP thread(s) per MPI task
# Demonstrate SNAP Ta potential
# Demonstrate SNAP W potential
# Initialize simulation
variable nsteps index 100
variable nrep equal 4
variable a equal 3.1803
units metal
units metal
# generate the box and atom positions using a BCC lattice
@ -18,28 +18,28 @@ variable ny equal 4
variable nz equal ${nrep}
variable nz equal 4
boundary p p p
boundary p p p
lattice bcc $a
lattice bcc 3.1803
Lattice spacing in x,y,z = 3.1803 3.1803 3.1803
region box block 0 ${nx} 0 ${ny} 0 ${nz}
region box block 0 4 0 ${ny} 0 ${nz}
region box block 0 4 0 4 0 ${nz}
region box block 0 4 0 4 0 4
create_box 1 box
Created orthogonal box = (0 0 0) to (12.7212 12.7212 12.7212)
region box block 0 ${nx} 0 ${ny} 0 ${nz}
region box block 0 4 0 ${ny} 0 ${nz}
region box block 0 4 0 4 0 ${nz}
region box block 0 4 0 4 0 4
create_box 1 box
Created orthogonal box = (0.0 0.0 0.0) to (12.7212 12.7212 12.7212)
1 by 1 by 1 MPI processor grid
create_atoms 1 box
create_atoms 1 box
Created 128 atoms
Time spent = 0.000316143 secs
create_atoms CPU = 0.000 seconds
mass 1 183.84
# choose potential
include W_2940_2017_2.snap
# DATE: 2017-02-20 CONTRIBUTOR: Mitchell Wood mitwood@sandia.gov CITATION: Wood, M. A. and Thompson, A. P. "Quantum-Accurate Molecular Dynamics Potential for Tungsten" arXiv:1702.07042 [physics.comp-ph]
# DATE: 2017-02-20 UNITS: metal CONTRIBUTOR: Mitchell Wood mitwood@sandia.gov CITATION: Wood, M. A. and Thompson, A. P. "Quantum-Accurate Molecular Dynamics Potential for Tungsten" arXiv:1702.07042 [physics.comp-ph]
#
# Definition of SNAP+ZBL potential.
variable zblcutinner equal 4
@ -54,7 +54,7 @@ pair_style hybrid/overlay zbl 4 4.8 snap
pair_coeff 1 1 zbl ${zblz} ${zblz}
pair_coeff 1 1 zbl 74 ${zblz}
pair_coeff 1 1 zbl 74 74
pair_coeff * * snap W_2940_2017_2.snapcoeff W W_2940_2017_2.snapparam W
pair_coeff * * snap W_2940_2017_2.snapcoeff W_2940_2017_2.snapparam W
Reading potential file W_2940_2017_2.snapcoeff with DATE: 2017-02-20
SNAP Element = W, Radius 0.5, Weight 1
Reading potential file W_2940_2017_2.snapparam with DATE: 2017-02-20
@ -62,7 +62,6 @@ SNAP keyword rcutfac 4.73442
SNAP keyword twojmax 8
SNAP keyword rfac0 0.99363
SNAP keyword rmin0 0
SNAP keyword diagonalstyle 3
SNAP keyword bzeroflag 0
SNAP keyword quadraticflag 0
@ -70,7 +69,7 @@ SNAP keyword quadraticflag 0
# Setup output
thermo 10
thermo 10
thermo_modify norm yes
# Set up NVE run
@ -81,7 +80,7 @@ neigh_modify once no every 1 delay 0 check yes
# Run MD
velocity all create 300.0 4928459
velocity all create 300.0 4928459 loop geom
fix 1 all nve
run ${nsteps}
run 100
@ -102,33 +101,33 @@ Neighbor list info ...
pair build: full/bin/atomonly
stencil: full/bin/3d
bin: standard
Per MPI rank memory allocation (min/avg/max) = 5.15 | 5.15 | 5.15 Mbytes
Per MPI rank memory allocation (min/avg/max) = 4.268 | 4.268 | 4.268 Mbytes
Step Temp E_pair E_mol TotEng Press
0 300 -11.028325 0 -10.98985 3010.497
10 293.40666 -11.027479 0 -10.989849 3246.0559
20 274.27375 -11.025025 0 -10.989849 3927.9497
30 244.50457 -11.021207 0 -10.989849 4983.5484
40 207.0784 -11.016407 0 -10.989849 6299.9473
50 165.74442 -11.011105 0 -10.989848 7736.5123
60 124.62181 -11.005831 0 -10.989848 9140.8587
70 87.744792 -11.001101 0 -10.989848 10366.489
80 58.605244 -10.997364 0 -10.989848 11289.914
90 39.754503 -10.994946 0 -10.989848 11824.945
100 32.524085 -10.994019 0 -10.989848 11932.118
Loop time of 18.7678 on 1 procs for 100 steps with 128 atoms
10 293.10848 -11.027441 0 -10.989849 3259.9445
20 273.14727 -11.024881 0 -10.989849 3979.8968
30 242.20285 -11.020912 0 -10.989849 5089.0797
40 203.51992 -11.01595 0 -10.989849 6462.9419
50 161.14556 -11.010515 0 -10.989848 7948.1798
60 119.47232 -11.00517 0 -10.989848 9380.8543
70 82.729175 -11.000458 0 -10.989848 10606.025
80 54.483648 -10.996835 0 -10.989848 11496.424
90 37.225263 -10.994622 0 -10.989847 11967.579
100 32.094224 -10.993964 0 -10.989847 11987.181
Loop time of 2.29953 on 1 procs for 100 steps with 128 atoms
Performance: 0.230 ns/day, 104.265 hours/ns, 5.328 timesteps/s
99.8% CPU use with 1 MPI tasks x 1 OpenMP threads
Performance: 1.879 ns/day, 12.775 hours/ns, 43.487 timesteps/s
99.7% CPU use with 1 MPI tasks x 1 OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 18.766 | 18.766 | 18.766 | 0.0 | 99.99
Pair | 2.2988 | 2.2988 | 2.2988 | 0.0 | 99.97
Neigh | 0 | 0 | 0 | 0.0 | 0.00
Comm | 0.00081968 | 0.00081968 | 0.00081968 | 0.0 | 0.00
Output | 0.00028563 | 0.00028563 | 0.00028563 | 0.0 | 0.00
Modify | 0.0003283 | 0.0003283 | 0.0003283 | 0.0 | 0.00
Other | | 0.0005233 | | | 0.00
Comm | 0.00027108 | 0.00027108 | 0.00027108 | 0.0 | 0.01
Output | 0.00014758 | 0.00014758 | 0.00014758 | 0.0 | 0.01
Modify | 0.00010991 | 0.00010991 | 0.00010991 | 0.0 | 0.00
Other | | 0.0001643 | | | 0.01
Nlocal: 128 ave 128 max 128 min
Histogram: 1 0 0 0 0 0 0 0 0 0
@ -144,4 +143,4 @@ Ave neighs/atom = 58
Neighbor list builds = 0
Dangerous builds = 0
Total wall time: 0:00:18
Total wall time: 0:00:02

View File

@ -1,13 +1,13 @@
LAMMPS (27 Nov 2018)
LAMMPS (15 Jun 2020)
using 1 OpenMP thread(s) per MPI task
# Demonstrate SNAP Ta potential
# Demonstrate SNAP W potential
# Initialize simulation
variable nsteps index 100
variable nrep equal 4
variable a equal 3.1803
units metal
units metal
# generate the box and atom positions using a BCC lattice
@ -18,28 +18,28 @@ variable ny equal 4
variable nz equal ${nrep}
variable nz equal 4
boundary p p p
boundary p p p
lattice bcc $a
lattice bcc 3.1803
Lattice spacing in x,y,z = 3.1803 3.1803 3.1803
region box block 0 ${nx} 0 ${ny} 0 ${nz}
region box block 0 4 0 ${ny} 0 ${nz}
region box block 0 4 0 4 0 ${nz}
region box block 0 4 0 4 0 4
create_box 1 box
Created orthogonal box = (0 0 0) to (12.7212 12.7212 12.7212)
region box block 0 ${nx} 0 ${ny} 0 ${nz}
region box block 0 4 0 ${ny} 0 ${nz}
region box block 0 4 0 4 0 ${nz}
region box block 0 4 0 4 0 4
create_box 1 box
Created orthogonal box = (0.0 0.0 0.0) to (12.7212 12.7212 12.7212)
1 by 2 by 2 MPI processor grid
create_atoms 1 box
create_atoms 1 box
Created 128 atoms
Time spent = 0.000297546 secs
create_atoms CPU = 0.000 seconds
mass 1 183.84
# choose potential
include W_2940_2017_2.snap
# DATE: 2017-02-20 CONTRIBUTOR: Mitchell Wood mitwood@sandia.gov CITATION: Wood, M. A. and Thompson, A. P. "Quantum-Accurate Molecular Dynamics Potential for Tungsten" arXiv:1702.07042 [physics.comp-ph]
# DATE: 2017-02-20 UNITS: metal CONTRIBUTOR: Mitchell Wood mitwood@sandia.gov CITATION: Wood, M. A. and Thompson, A. P. "Quantum-Accurate Molecular Dynamics Potential for Tungsten" arXiv:1702.07042 [physics.comp-ph]
#
# Definition of SNAP+ZBL potential.
variable zblcutinner equal 4
@ -54,7 +54,7 @@ pair_style hybrid/overlay zbl 4 4.8 snap
pair_coeff 1 1 zbl ${zblz} ${zblz}
pair_coeff 1 1 zbl 74 ${zblz}
pair_coeff 1 1 zbl 74 74
pair_coeff * * snap W_2940_2017_2.snapcoeff W W_2940_2017_2.snapparam W
pair_coeff * * snap W_2940_2017_2.snapcoeff W_2940_2017_2.snapparam W
Reading potential file W_2940_2017_2.snapcoeff with DATE: 2017-02-20
SNAP Element = W, Radius 0.5, Weight 1
Reading potential file W_2940_2017_2.snapparam with DATE: 2017-02-20
@ -62,7 +62,6 @@ SNAP keyword rcutfac 4.73442
SNAP keyword twojmax 8
SNAP keyword rfac0 0.99363
SNAP keyword rmin0 0
SNAP keyword diagonalstyle 3
SNAP keyword bzeroflag 0
SNAP keyword quadraticflag 0
@ -70,7 +69,7 @@ SNAP keyword quadraticflag 0
# Setup output
thermo 10
thermo 10
thermo_modify norm yes
# Set up NVE run
@ -81,7 +80,7 @@ neigh_modify once no every 1 delay 0 check yes
# Run MD
velocity all create 300.0 4928459
velocity all create 300.0 4928459 loop geom
fix 1 all nve
run ${nsteps}
run 100
@ -102,33 +101,33 @@ Neighbor list info ...
pair build: full/bin/atomonly
stencil: full/bin/3d
bin: standard
Per MPI rank memory allocation (min/avg/max) = 5.13 | 5.13 | 5.13 Mbytes
Per MPI rank memory allocation (min/avg/max) = 4.167 | 4.167 | 4.167 Mbytes
Step Temp E_pair E_mol TotEng Press
0 300 -11.028325 0 -10.98985 3010.497
10 293.22504 -11.027456 0 -10.989849 3258.275
20 273.60084 -11.024939 0 -10.989849 3973.9038
30 243.15327 -11.021034 0 -10.989849 5077.9172
40 205.01905 -11.016142 0 -10.989849 6448.4941
50 163.10914 -11.010767 0 -10.989848 7935.6835
60 121.67854 -11.005453 0 -10.989848 9378.9959
70 84.846972 -11.000729 0 -10.989848 10626.301
80 56.127265 -10.997046 0 -10.989848 11551.687
90 38.025013 -10.994724 0 -10.989847 12069.936
100 31.768127 -10.993922 0 -10.989847 12145.648
Loop time of 5.38055 on 4 procs for 100 steps with 128 atoms
10 293.10848 -11.027441 0 -10.989849 3259.9445
20 273.14727 -11.024881 0 -10.989849 3979.8968
30 242.20285 -11.020912 0 -10.989849 5089.0797
40 203.51992 -11.01595 0 -10.989849 6462.9419
50 161.14556 -11.010515 0 -10.989848 7948.1798
60 119.47232 -11.00517 0 -10.989848 9380.8543
70 82.729175 -11.000458 0 -10.989848 10606.025
80 54.483648 -10.996835 0 -10.989848 11496.424
90 37.225263 -10.994622 0 -10.989847 11967.579
100 32.094224 -10.993964 0 -10.989847 11987.181
Loop time of 0.700403 on 4 procs for 100 steps with 128 atoms
Performance: 0.803 ns/day, 29.892 hours/ns, 18.585 timesteps/s
96.1% CPU use with 4 MPI tasks x 1 OpenMP threads
Performance: 6.168 ns/day, 3.891 hours/ns, 142.775 timesteps/s
95.9% CPU use with 4 MPI tasks x 1 OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 4.8254 | 5.0245 | 5.2817 | 7.7 | 93.38
Pair | 0.59296 | 0.62019 | 0.6504 | 2.8 | 88.55
Neigh | 0 | 0 | 0 | 0.0 | 0.00
Comm | 0.093845 | 0.34915 | 0.5466 | 29.1 | 6.49
Output | 0.00032616 | 0.0011846 | 0.0037167 | 4.2 | 0.02
Modify | 0.00022507 | 0.00025326 | 0.0002687 | 0.0 | 0.00
Other | | 0.005432 | | | 0.10
Comm | 0.048731 | 0.078938 | 0.10647 | 7.8 | 11.27
Output | 0.00015879 | 0.00024194 | 0.00048518 | 0.0 | 0.03
Modify | 6.4373e-05 | 6.9439e-05 | 7.7963e-05 | 0.0 | 0.01
Other | | 0.0009654 | | | 0.14
Nlocal: 32 ave 32 max 32 min
Histogram: 4 0 0 0 0 0 0 0 0 0
@ -144,4 +143,4 @@ Ave neighs/atom = 58
Neighbor list builds = 0
Dangerous builds = 0
Total wall time: 0:00:05
Total wall time: 0:00:00

View File

@ -1,4 +1,5 @@
LAMMPS (7 Aug 2019)
LAMMPS (15 Jun 2020)
using 1 OpenMP thread(s) per MPI task
# Demonstrate SNAP W-Be potential
# Initialize simulation
@ -6,7 +7,7 @@ LAMMPS (7 Aug 2019)
variable nsteps index 100
variable nrep equal 4
variable a equal 3.1803
units metal
units metal
# generate the box and atom positions using a BCC lattice
@ -17,33 +18,33 @@ variable ny equal 4
variable nz equal ${nrep}
variable nz equal 4
boundary p p p
boundary p p p
lattice bcc $a
lattice bcc 3.1803
Lattice spacing in x,y,z = 3.1803 3.1803 3.1803
region box block 0 ${nx} 0 ${ny} 0 ${nz}
region box block 0 4 0 ${ny} 0 ${nz}
region box block 0 4 0 4 0 ${nz}
region box block 0 4 0 4 0 4
create_box 2 box
Created orthogonal box = (0 0 0) to (12.7212 12.7212 12.7212)
region box block 0 ${nx} 0 ${ny} 0 ${nz}
region box block 0 4 0 ${ny} 0 ${nz}
region box block 0 4 0 4 0 ${nz}
region box block 0 4 0 4 0 4
create_box 2 box
Created orthogonal box = (0.0 0.0 0.0) to (12.7212 12.7212 12.7212)
1 by 1 by 1 MPI processor grid
create_atoms 1 box
create_atoms 1 box
Created 128 atoms
create_atoms CPU = 0.000234842 secs
create_atoms CPU = 0.000 seconds
mass 1 183.84
mass 2 9.012182
set group all type/fraction 2 0.05 3590153 # Change 5% of W to He
5 settings made for type/fraction
group tungsten type 1
set group all type/fraction 2 0.05 3590153 # Change 5% of W to He
5 settings made for type/fractiongroup tungsten type 1
123 atoms in group tungsten
group beryllium type 2
group beryllium type 2
5 atoms in group beryllium
# choose potential
include WBe_Wood_PRB2019.snap
# DATE: 2019-09-18 UNITS: metal CONTRIBUTOR: Mary Alice Cusentino mcusent@sandia.gov CITATION: M.A. Wood, M.A. Cusentino, B.D. Wirth, and A.P. Thompson, "Data-driven material models for atomistic simulation", Physical Review B 99, 184305 (2019)
# Definition of SNAP+ZBL potential.
variable zblcutinner equal 4
variable zblcutouter equal 4.8
@ -77,7 +78,7 @@ SNAP keyword quadraticflag 0
# Setup output
thermo 10
thermo 10
thermo_modify norm yes
# Set up NVE run
@ -88,7 +89,7 @@ neigh_modify once no every 1 delay 0 check yes
# Run MD
velocity all create 300.0 4928459
velocity all create 300.0 4928459 loop geom
fix 1 all nve
run ${nsteps}
run 100
@ -112,43 +113,43 @@ Neighbor list info ...
Per MPI rank memory allocation (min/avg/max) = 4.268 | 4.268 | 4.268 Mbytes
Step Temp E_pair E_mol TotEng Press
0 300 -8.5980876 0 -8.5596125 -35284.855
10 299.29029 -8.5979965 0 -8.5596125 -35299.259
20 288.99334 -8.5966759 0 -8.5596124 -35004.093
30 269.91027 -8.5942284 0 -8.5596123 -34447.077
40 243.57361 -8.5908505 0 -8.5596121 -33687.105
50 212.21385 -8.5868284 0 -8.5596119 -32821.864
60 178.77144 -8.5825391 0 -8.5596116 -31971.17
70 146.71854 -8.578428 0 -8.5596113 -31245.51
80 119.50956 -8.5749383 0 -8.5596111 -30724.137
90 99.872785 -8.5724197 0 -8.559611 -30440.244
100 89.604584 -8.5711027 0 -8.5596109 -30392.805
Loop time of 3.16831 on 1 procs for 100 steps with 128 atoms
10 296.32664 -8.5976164 0 -8.5596124 -35188.339
20 282.41417 -8.595832 0 -8.5596123 -34782.293
30 259.69014 -8.5929175 0 -8.5596121 -34113.316
40 230.50415 -8.5891741 0 -8.5596119 -33260.777
50 197.88816 -8.5849908 0 -8.5596116 -32309.975
60 165.27259 -8.5808076 0 -8.5596113 -31365.766
70 136.15697 -8.5770733 0 -8.5596111 -30542.657
80 113.58947 -8.5741788 0 -8.5596109 -29939.23
90 99.477916 -8.572369 0 -8.5596109 -29619.939
100 94.121939 -8.5716822 0 -8.559611 -29598.002
Loop time of 2.26616 on 1 procs for 100 steps with 128 atoms
Performance: 1.364 ns/day, 17.602 hours/ns, 31.563 timesteps/s
199.5% CPU use with 1 MPI tasks x no OpenMP threads
Performance: 1.906 ns/day, 12.590 hours/ns, 44.128 timesteps/s
99.3% CPU use with 1 MPI tasks x 1 OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 3.1672 | 3.1672 | 3.1672 | 0.0 | 99.97
Neigh | 0.00030208 | 0.00030208 | 0.00030208 | 0.0 | 0.01
Comm | 0.00029612 | 0.00029612 | 0.00029612 | 0.0 | 0.01
Output | 0.00019813 | 0.00019813 | 0.00019813 | 0.0 | 0.01
Modify | 0.00014448 | 0.00014448 | 0.00014448 | 0.0 | 0.00
Other | | 0.0001433 | | | 0.00
Pair | 2.2531 | 2.2531 | 2.2531 | 0.0 | 99.42
Neigh | 0 | 0 | 0 | 0.0 | 0.00
Comm | 0.0002594 | 0.0002594 | 0.0002594 | 0.0 | 0.01
Output | 0.012544 | 0.012544 | 0.012544 | 0.0 | 0.55
Modify | 0.00010347 | 0.00010347 | 0.00010347 | 0.0 | 0.00
Other | | 0.0001583 | | | 0.01
Nlocal: 128 ave 128 max 128 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 727 ave 727 max 727 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 3710 ave 3710 max 3710 min
Neighs: 3712 ave 3712 max 3712 min
Histogram: 1 0 0 0 0 0 0 0 0 0
FullNghs: 7420 ave 7420 max 7420 min
FullNghs: 7424 ave 7424 max 7424 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 7420
Ave neighs/atom = 57.9688
Neighbor list builds = 1
Total # of neighbors = 7424
Ave neighs/atom = 58
Neighbor list builds = 0
Dangerous builds = 0
Total wall time: 0:00:03
Total wall time: 0:00:02

View File

@ -1,4 +1,5 @@
LAMMPS (7 Aug 2019)
LAMMPS (15 Jun 2020)
using 1 OpenMP thread(s) per MPI task
# Demonstrate SNAP W-Be potential
# Initialize simulation
@ -6,7 +7,7 @@ LAMMPS (7 Aug 2019)
variable nsteps index 100
variable nrep equal 4
variable a equal 3.1803
units metal
units metal
# generate the box and atom positions using a BCC lattice
@ -17,33 +18,33 @@ variable ny equal 4
variable nz equal ${nrep}
variable nz equal 4
boundary p p p
boundary p p p
lattice bcc $a
lattice bcc 3.1803
Lattice spacing in x,y,z = 3.1803 3.1803 3.1803
region box block 0 ${nx} 0 ${ny} 0 ${nz}
region box block 0 4 0 ${ny} 0 ${nz}
region box block 0 4 0 4 0 ${nz}
region box block 0 4 0 4 0 4
create_box 2 box
Created orthogonal box = (0 0 0) to (12.7212 12.7212 12.7212)
region box block 0 ${nx} 0 ${ny} 0 ${nz}
region box block 0 4 0 ${ny} 0 ${nz}
region box block 0 4 0 4 0 ${nz}
region box block 0 4 0 4 0 4
create_box 2 box
Created orthogonal box = (0.0 0.0 0.0) to (12.7212 12.7212 12.7212)
1 by 2 by 2 MPI processor grid
create_atoms 1 box
create_atoms 1 box
Created 128 atoms
create_atoms CPU = 0.000317097 secs
create_atoms CPU = 0.000 seconds
mass 1 183.84
mass 2 9.012182
set group all type/fraction 2 0.05 3590153 # Change 5% of W to He
5 settings made for type/fraction
group tungsten type 1
set group all type/fraction 2 0.05 3590153 # Change 5% of W to He
5 settings made for type/fractiongroup tungsten type 1
123 atoms in group tungsten
group beryllium type 2
group beryllium type 2
5 atoms in group beryllium
# choose potential
include WBe_Wood_PRB2019.snap
# DATE: 2019-09-18 UNITS: metal CONTRIBUTOR: Mary Alice Cusentino mcusent@sandia.gov CITATION: M.A. Wood, M.A. Cusentino, B.D. Wirth, and A.P. Thompson, "Data-driven material models for atomistic simulation", Physical Review B 99, 184305 (2019)
# Definition of SNAP+ZBL potential.
variable zblcutinner equal 4
variable zblcutouter equal 4.8
@ -77,7 +78,7 @@ SNAP keyword quadraticflag 0
# Setup output
thermo 10
thermo 10
thermo_modify norm yes
# Set up NVE run
@ -88,7 +89,7 @@ neigh_modify once no every 1 delay 0 check yes
# Run MD
velocity all create 300.0 4928459
velocity all create 300.0 4928459 loop geom
fix 1 all nve
run ${nsteps}
run 100
@ -112,43 +113,43 @@ Neighbor list info ...
Per MPI rank memory allocation (min/avg/max) = 4.167 | 4.167 | 4.167 Mbytes
Step Temp E_pair E_mol TotEng Press
0 300 -8.5980876 0 -8.5596125 -35284.855
10 296.24946 -8.5976065 0 -8.5596124 -35140.29
20 282.27904 -8.5958147 0 -8.5596123 -34710.3
30 259.54978 -8.5928995 0 -8.5596121 -34060.43
40 230.41412 -8.5891626 0 -8.5596119 -33258.275
50 197.85135 -8.5849861 0 -8.5596116 -32389.527
60 165.21732 -8.5808005 0 -8.5596113 -31550.426
70 135.94024 -8.5770455 0 -8.5596111 -30839.006
80 113.06617 -8.5741117 0 -8.5596109 -30339.177
90 98.542347 -8.572249 0 -8.5596109 -30094.29
100 92.524343 -8.5714774 0 -8.5596111 -30091.988
Loop time of 0.813674 on 4 procs for 100 steps with 128 atoms
10 296.32664 -8.5976164 0 -8.5596124 -35188.339
20 282.41417 -8.595832 0 -8.5596123 -34782.293
30 259.69014 -8.5929175 0 -8.5596121 -34113.316
40 230.50415 -8.5891741 0 -8.5596119 -33260.777
50 197.88816 -8.5849908 0 -8.5596116 -32309.975
60 165.27259 -8.5808076 0 -8.5596113 -31365.766
70 136.15697 -8.5770733 0 -8.5596111 -30542.657
80 113.58947 -8.5741788 0 -8.5596109 -29939.23
90 99.477916 -8.572369 0 -8.5596109 -29619.939
100 94.121939 -8.5716822 0 -8.559611 -29598.002
Loop time of 0.668977 on 4 procs for 100 steps with 128 atoms
Performance: 5.309 ns/day, 4.520 hours/ns, 122.899 timesteps/s
99.7% CPU use with 4 MPI tasks x no OpenMP threads
Performance: 6.458 ns/day, 3.717 hours/ns, 149.482 timesteps/s
97.2% CPU use with 4 MPI tasks x 1 OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 0.79079 | 0.79788 | 0.80888 | 0.8 | 98.06
Neigh | 7.1049e-05 | 8.0049e-05 | 9.2983e-05 | 0.0 | 0.01
Comm | 0.0041246 | 0.01515 | 0.022235 | 5.5 | 1.86
Output | 0.000144 | 0.00017095 | 0.00024796 | 0.0 | 0.02
Modify | 4.4823e-05 | 5.8889e-05 | 7.2718e-05 | 0.0 | 0.01
Other | | 0.000338 | | | 0.04
Pair | 0.57811 | 0.60637 | 0.63609 | 2.6 | 90.64
Neigh | 0 | 0 | 0 | 0.0 | 0.00
Comm | 0.031571 | 0.061612 | 0.090021 | 8.3 | 9.21
Output | 0.00015521 | 0.00021636 | 0.00038552 | 0.0 | 0.03
Modify | 5.4836e-05 | 6.1393e-05 | 7.2956e-05 | 0.0 | 0.01
Other | | 0.0007139 | | | 0.11
Nlocal: 32 ave 37 max 28 min
Histogram: 1 0 0 1 1 0 0 0 0 1
Nghost: 431 ave 435 max 426 min
Histogram: 1 0 0 0 0 1 1 0 0 1
Neighs: 927 ave 1071 max 821 min
Histogram: 1 0 1 0 1 0 0 0 0 1
FullNghs: 1854 ave 2144 max 1624 min
Histogram: 1 0 0 1 1 0 0 0 0 1
Nlocal: 32 ave 32 max 32 min
Histogram: 4 0 0 0 0 0 0 0 0 0
Nghost: 431 ave 431 max 431 min
Histogram: 4 0 0 0 0 0 0 0 0 0
Neighs: 928 ave 928 max 928 min
Histogram: 4 0 0 0 0 0 0 0 0 0
FullNghs: 1856 ave 1856 max 1856 min
Histogram: 4 0 0 0 0 0 0 0 0 0
Total # of neighbors = 7416
Ave neighs/atom = 57.9375
Neighbor list builds = 1
Total # of neighbors = 7424
Ave neighs/atom = 58
Neighbor list builds = 0
Dangerous builds = 0
Total wall time: 0:00:00

View File

@ -1,13 +1,13 @@
LAMMPS (27 Nov 2018)
LAMMPS (15 Jun 2020)
using 1 OpenMP thread(s) per MPI task
# Demonstrate SNAP Ta potential
# Demonstrate SNAP W with tabulated He-He and W-He using hybrid pair style
# Initialize simulation
variable nsteps index 100
variable nrep equal 4
variable a equal 3.1803
units metal
units metal
# generate the box and atom positions using a BCC lattice
@ -18,34 +18,33 @@ variable ny equal 4
variable nz equal ${nrep}
variable nz equal 4
boundary p p p
boundary p p p
lattice bcc $a
lattice bcc 3.1803
Lattice spacing in x,y,z = 3.1803 3.1803 3.1803
region box block 0 ${nx} 0 ${ny} 0 ${nz}
region box block 0 4 0 ${ny} 0 ${nz}
region box block 0 4 0 4 0 ${nz}
region box block 0 4 0 4 0 4
create_box 2 box
Created orthogonal box = (0 0 0) to (12.7212 12.7212 12.7212)
region box block 0 ${nx} 0 ${ny} 0 ${nz}
region box block 0 4 0 ${ny} 0 ${nz}
region box block 0 4 0 4 0 ${nz}
region box block 0 4 0 4 0 4
create_box 2 box
Created orthogonal box = (0.0 0.0 0.0) to (12.7212 12.7212 12.7212)
1 by 1 by 1 MPI processor grid
create_atoms 1 box
create_atoms 1 box
Created 128 atoms
Time spent = 0.000426054 secs
create_atoms CPU = 0.001 seconds
mass 1 183.84
mass 2 4.0026
set group all type/fraction 2 0.05 3590153 # Change 5% of W to He
5 settings made for type/fraction
group tungsten type 1
set group all type/fraction 2 0.05 3590153 # Change 5% of W to He
5 settings made for type/fractiongroup tungsten type 1
123 atoms in group tungsten
group helium type 2
group helium type 2
5 atoms in group helium
# choose potential
include W_2940_2017_2_He_JW2013.snap
# DATE: 2017-02-20 CONTRIBUTOR: Mitchell Wood mitwood@sandia.gov CITATION: Wood, M. A. and Thompson, A. P. "Quantum-Accurate Molecular Dynamics Potential for Tungsten" arXiv:1702.07042 [physics.comp-ph]
# DATE: 2017-02-20 UNITS: metal CONTRIBUTOR: Mitchell Wood mitwood@sandia.gov CITATION: Wood, M. A. and Thompson, A. P. "Quantum-Accurate Molecular Dynamics Potential for Tungsten" arXiv:1702.07042 [physics.comp-ph]
#
# Definition of SNAP+ZBL+Tabulated potential.
variable zblcutinner equal 4
@ -60,7 +59,7 @@ pair_style hybrid/overlay zbl 4 4.8 snap table spline 10000 table spline 10000
pair_coeff 1 1 zbl ${zblz} ${zblz}
pair_coeff 1 1 zbl 74 ${zblz}
pair_coeff 1 1 zbl 74 74
pair_coeff * * snap W_2940_2017_2.snapcoeff W W_2940_2017_2.snapparam W NULL
pair_coeff * * snap W_2940_2017_2.snapcoeff W_2940_2017_2.snapparam W NULL
Reading potential file W_2940_2017_2.snapcoeff with DATE: 2017-02-20
SNAP Element = W, Radius 0.5, Weight 1
Reading potential file W_2940_2017_2.snapparam with DATE: 2017-02-20
@ -68,24 +67,23 @@ SNAP keyword rcutfac 4.73442
SNAP keyword twojmax 8
SNAP keyword rfac0 0.99363
SNAP keyword rmin0 0
SNAP keyword diagonalstyle 3
SNAP keyword bzeroflag 0
SNAP keyword quadraticflag 0
pair_coeff 2 2 table 1 He_He_JW2013.table HeHe
Reading potential file He_He_JW2013.table with DATE: 2017-02-20
WARNING: 1 of 4999 force values in table are inconsistent with -dE/dr.
Should only be flagged at inflection points (src/pair_table.cpp:481)
Should only be flagged at inflection points (src/pair_table.cpp:467)
pair_coeff 1 2 table 2 W_He_JW2013.table WHe
Reading potential file W_He_JW2013.table with DATE: 2017-02-20
WARNING: 3 of 325 force values in table are inconsistent with -dE/dr.
Should only be flagged at inflection points (src/pair_table.cpp:481)
Should only be flagged at inflection points (src/pair_table.cpp:467)
#Hybrid/overlay will take all pair styles and add their contributions equally, order of pair_coeff doesnt matter here
#This is not the case for pair_style hybrid ... where only one pair_coeff is read for each type combination, order matters here.
# Setup output
thermo 10
thermo 10
thermo_modify norm yes
# Set up NVE run
@ -96,7 +94,7 @@ neigh_modify once no every 1 delay 0 check yes
# Run MD
velocity all create 300.0 4928459
velocity all create 300.0 4928459 loop geom
fix 1 all nve
run ${nsteps}
run 100
@ -137,33 +135,33 @@ Neighbor list info ...
pair build: full/bin/atomonly
stencil: full/bin/3d
bin: standard
Per MPI rank memory allocation (min/avg/max) = 7.676 | 7.676 | 7.676 Mbytes
Per MPI rank memory allocation (min/avg/max) = 6.789 | 6.789 | 6.789 Mbytes
Step Temp E_pair E_mol TotEng Press
0 300 -10.438105 0 -10.39963 -5445.2808
10 290.48923 -10.436885 0 -10.399629 -5646.4813
20 271.18868 -10.434409 0 -10.399629 -5654.4646
30 246.2601 -10.431212 0 -10.399629 -5281.8873
40 218.69918 -10.427677 0 -10.399629 -4343.3636
50 189.12519 -10.423885 0 -10.399629 -2903.1138
60 155.55701 -10.419579 0 -10.399629 -1402.2278
70 118.83581 -10.414869 0 -10.399629 -146.36141
80 85.903126 -10.410645 0 -10.399628 857.74986
90 65.223651 -10.407993 0 -10.399628 1494.2746
100 59.833542 -10.407302 0 -10.399628 1938.9164
Loop time of 17.6435 on 1 procs for 100 steps with 128 atoms
10 292.90716 -10.437195 0 -10.39963 -5400.8323
20 275.59696 -10.434975 0 -10.399629 -5055.199
30 250.28699 -10.431729 0 -10.399629 -4317.4619
40 218.58148 -10.427662 0 -10.399629 -3069.0256
50 182.80754 -10.423074 0 -10.399629 -1514.9501
60 144.77789 -10.418197 0 -10.399629 134.6083
70 108.06164 -10.413487 0 -10.399628 1747.8913
80 79.630821 -10.409841 0 -10.399628 2913.2733
90 62.795831 -10.407682 0 -10.399628 3646.2528
100 57.450965 -10.406996 0 -10.399628 4022.2665
Loop time of 2.15336 on 1 procs for 100 steps with 128 atoms
Performance: 0.245 ns/day, 98.019 hours/ns, 5.668 timesteps/s
98.9% CPU use with 1 MPI tasks x 1 OpenMP threads
Performance: 2.006 ns/day, 11.963 hours/ns, 46.439 timesteps/s
99.9% CPU use with 1 MPI tasks x 1 OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 17.641 | 17.641 | 17.641 | 0.0 | 99.99
Neigh | 0.00054359 | 0.00054359 | 0.00054359 | 0.0 | 0.00
Comm | 0.00080729 | 0.00080729 | 0.00080729 | 0.0 | 0.00
Output | 0.00026512 | 0.00026512 | 0.00026512 | 0.0 | 0.00
Modify | 0.00033879 | 0.00033879 | 0.00033879 | 0.0 | 0.00
Other | | 0.0005448 | | | 0.00
Pair | 2.1524 | 2.1524 | 2.1524 | 0.0 | 99.96
Neigh | 0.00030732 | 0.00030732 | 0.00030732 | 0.0 | 0.01
Comm | 0.00026202 | 0.00026202 | 0.00026202 | 0.0 | 0.01
Output | 0.00013041 | 0.00013041 | 0.00013041 | 0.0 | 0.01
Modify | 0.00010085 | 0.00010085 | 0.00010085 | 0.0 | 0.00
Other | | 0.0001643 | | | 0.01
Nlocal: 128 ave 128 max 128 min
Histogram: 1 0 0 0 0 0 0 0 0 0
@ -179,4 +177,4 @@ Ave neighs/atom = 53.5156
Neighbor list builds = 1
Dangerous builds = 0
Total wall time: 0:00:17
Total wall time: 0:00:02

View File

@ -1,13 +1,13 @@
LAMMPS (27 Nov 2018)
LAMMPS (15 Jun 2020)
using 1 OpenMP thread(s) per MPI task
# Demonstrate SNAP Ta potential
# Demonstrate SNAP W with tabulated He-He and W-He using hybrid pair style
# Initialize simulation
variable nsteps index 100
variable nrep equal 4
variable a equal 3.1803
units metal
units metal
# generate the box and atom positions using a BCC lattice
@ -18,34 +18,33 @@ variable ny equal 4
variable nz equal ${nrep}
variable nz equal 4
boundary p p p
boundary p p p
lattice bcc $a
lattice bcc 3.1803
Lattice spacing in x,y,z = 3.1803 3.1803 3.1803
region box block 0 ${nx} 0 ${ny} 0 ${nz}
region box block 0 4 0 ${ny} 0 ${nz}
region box block 0 4 0 4 0 ${nz}
region box block 0 4 0 4 0 4
create_box 2 box
Created orthogonal box = (0 0 0) to (12.7212 12.7212 12.7212)
region box block 0 ${nx} 0 ${ny} 0 ${nz}
region box block 0 4 0 ${ny} 0 ${nz}
region box block 0 4 0 4 0 ${nz}
region box block 0 4 0 4 0 4
create_box 2 box
Created orthogonal box = (0.0 0.0 0.0) to (12.7212 12.7212 12.7212)
1 by 2 by 2 MPI processor grid
create_atoms 1 box
create_atoms 1 box
Created 128 atoms
Time spent = 0.000303984 secs
create_atoms CPU = 0.000 seconds
mass 1 183.84
mass 2 4.0026
set group all type/fraction 2 0.05 3590153 # Change 5% of W to He
5 settings made for type/fraction
group tungsten type 1
set group all type/fraction 2 0.05 3590153 # Change 5% of W to He
5 settings made for type/fractiongroup tungsten type 1
123 atoms in group tungsten
group helium type 2
group helium type 2
5 atoms in group helium
# choose potential
include W_2940_2017_2_He_JW2013.snap
# DATE: 2017-02-20 CONTRIBUTOR: Mitchell Wood mitwood@sandia.gov CITATION: Wood, M. A. and Thompson, A. P. "Quantum-Accurate Molecular Dynamics Potential for Tungsten" arXiv:1702.07042 [physics.comp-ph]
# DATE: 2017-02-20 UNITS: metal CONTRIBUTOR: Mitchell Wood mitwood@sandia.gov CITATION: Wood, M. A. and Thompson, A. P. "Quantum-Accurate Molecular Dynamics Potential for Tungsten" arXiv:1702.07042 [physics.comp-ph]
#
# Definition of SNAP+ZBL+Tabulated potential.
variable zblcutinner equal 4
@ -60,7 +59,7 @@ pair_style hybrid/overlay zbl 4 4.8 snap table spline 10000 table spline 10000
pair_coeff 1 1 zbl ${zblz} ${zblz}
pair_coeff 1 1 zbl 74 ${zblz}
pair_coeff 1 1 zbl 74 74
pair_coeff * * snap W_2940_2017_2.snapcoeff W W_2940_2017_2.snapparam W NULL
pair_coeff * * snap W_2940_2017_2.snapcoeff W_2940_2017_2.snapparam W NULL
Reading potential file W_2940_2017_2.snapcoeff with DATE: 2017-02-20
SNAP Element = W, Radius 0.5, Weight 1
Reading potential file W_2940_2017_2.snapparam with DATE: 2017-02-20
@ -68,24 +67,23 @@ SNAP keyword rcutfac 4.73442
SNAP keyword twojmax 8
SNAP keyword rfac0 0.99363
SNAP keyword rmin0 0
SNAP keyword diagonalstyle 3
SNAP keyword bzeroflag 0
SNAP keyword quadraticflag 0
pair_coeff 2 2 table 1 He_He_JW2013.table HeHe
Reading potential file He_He_JW2013.table with DATE: 2017-02-20
WARNING: 1 of 4999 force values in table are inconsistent with -dE/dr.
Should only be flagged at inflection points (src/pair_table.cpp:481)
Should only be flagged at inflection points (src/pair_table.cpp:467)
pair_coeff 1 2 table 2 W_He_JW2013.table WHe
Reading potential file W_He_JW2013.table with DATE: 2017-02-20
WARNING: 3 of 325 force values in table are inconsistent with -dE/dr.
Should only be flagged at inflection points (src/pair_table.cpp:481)
Should only be flagged at inflection points (src/pair_table.cpp:467)
#Hybrid/overlay will take all pair styles and add their contributions equally, order of pair_coeff doesnt matter here
#This is not the case for pair_style hybrid ... where only one pair_coeff is read for each type combination, order matters here.
# Setup output
thermo 10
thermo 10
thermo_modify norm yes
# Set up NVE run
@ -96,7 +94,7 @@ neigh_modify once no every 1 delay 0 check yes
# Run MD
velocity all create 300.0 4928459
velocity all create 300.0 4928459 loop geom
fix 1 all nve
run ${nsteps}
run 100
@ -137,46 +135,46 @@ Neighbor list info ...
pair build: full/bin/atomonly
stencil: full/bin/3d
bin: standard
Per MPI rank memory allocation (min/avg/max) = 7.656 | 7.656 | 7.656 Mbytes
Per MPI rank memory allocation (min/avg/max) = 6.687 | 6.69 | 6.692 Mbytes
Step Temp E_pair E_mol TotEng Press
0 300 -10.438105 0 -10.39963 -5445.2808
10 292.13979 -10.437097 0 -10.39963 -5516.3963
20 272.55728 -10.434585 0 -10.399629 -5460.4268
30 245.06559 -10.431059 0 -10.399629 -5016.6351
40 212.79459 -10.42692 0 -10.399629 -3924.2175
50 178.03903 -10.422462 0 -10.399629 -2354.5485
60 141.62155 -10.417791 0 -10.399628 -595.41345
70 107.24843 -10.413383 0 -10.399628 1138.4107
80 79.985938 -10.409886 0 -10.399628 2392.1106
90 62.568933 -10.407652 0 -10.399628 3141.7027
100 56.697933 -10.406899 0 -10.399628 3583.9538
Loop time of 4.7853 on 4 procs for 100 steps with 128 atoms
10 292.90716 -10.437195 0 -10.39963 -5400.8323
20 275.59696 -10.434975 0 -10.399629 -5055.199
30 250.28699 -10.431729 0 -10.399629 -4317.4619
40 218.58148 -10.427662 0 -10.399629 -3069.0256
50 182.80754 -10.423074 0 -10.399629 -1514.9501
60 144.77789 -10.418197 0 -10.399629 134.6083
70 108.06164 -10.413487 0 -10.399628 1747.8913
80 79.630821 -10.409841 0 -10.399628 2913.2733
90 62.795831 -10.407682 0 -10.399628 3646.2528
100 57.450965 -10.406996 0 -10.399628 4022.2665
Loop time of 0.652565 on 4 procs for 100 steps with 128 atoms
Performance: 0.903 ns/day, 26.585 hours/ns, 20.897 timesteps/s
97.3% CPU use with 4 MPI tasks x 1 OpenMP threads
Performance: 6.620 ns/day, 3.625 hours/ns, 153.241 timesteps/s
96.1% CPU use with 4 MPI tasks x 1 OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 4.394 | 4.5813 | 4.7463 | 5.9 | 95.74
Neigh | 0 | 0 | 0 | 0.0 | 0.00
Comm | 0.035261 | 0.19515 | 0.38629 | 28.5 | 4.08
Output | 0.00031662 | 0.00060844 | 0.0014563 | 0.0 | 0.01
Modify | 0.00018692 | 0.0001924 | 0.00020123 | 0.0 | 0.00
Other | | 0.008012 | | | 0.17
Pair | 0.5462 | 0.57357 | 0.59096 | 2.3 | 87.89
Neigh | 8.2016e-05 | 8.3506e-05 | 8.4877e-05 | 0.0 | 0.01
Comm | 0.060158 | 0.07569 | 0.10482 | 6.5 | 11.60
Output | 0.00015974 | 0.00035232 | 0.00092149 | 0.0 | 0.05
Modify | 5.6982e-05 | 6.777e-05 | 7.3671e-05 | 0.0 | 0.01
Other | | 0.002799 | | | 0.43
Nlocal: 32 ave 32 max 32 min
Histogram: 4 0 0 0 0 0 0 0 0 0
Nghost: 431 ave 431 max 431 min
Histogram: 4 0 0 0 0 0 0 0 0 0
Neighs: 856.25 ave 885 max 818 min
Histogram: 1 0 0 0 1 0 0 0 1 1
FullNghs: 1712.5 ave 1738 max 1658 min
Histogram: 1 0 0 0 0 0 0 0 2 1
Nlocal: 32 ave 33 max 31 min
Histogram: 1 0 0 0 0 2 0 0 0 1
Nghost: 431 ave 432 max 430 min
Histogram: 1 0 0 0 0 2 0 0 0 1
Neighs: 856.25 ave 949 max 794 min
Histogram: 1 1 0 0 0 1 0 0 0 1
FullNghs: 1712.5 ave 1854 max 1604 min
Histogram: 1 0 1 0 0 1 0 0 0 1
Total # of neighbors = 6850
Ave neighs/atom = 53.5156
Neighbor list builds = 0
Neighbor list builds = 1
Dangerous builds = 0
Total wall time: 0:00:04
Total wall time: 0:00:00

View File

@ -28,6 +28,8 @@
#include "domain.h"
#include "memory.h"
#include "error.h"
#include "utils.h"
#include "fmt/format.h"
#include "math_const.h"
@ -63,9 +65,6 @@ MSM::MSM(LAMMPS *lmp) : KSpace(lmp),
factors[0] = 2;
MPI_Comm_rank(world,&me);
procneigh_levels = NULL;
world_levels = NULL;
active_flag = NULL;
phi1d = dphi1d = NULL;
@ -81,15 +80,7 @@ MSM::MSM(LAMMPS *lmp) : KSpace(lmp),
v0_direct_top = v1_direct_top = v2_direct_top = NULL;
v3_direct_top = v4_direct_top = v5_direct_top = NULL;
cg_all = cg_peratom_all = NULL;
cg = cg_peratom = NULL;
ngrid = NULL;
cg = NULL;
cg_peratom = NULL;
procneigh_levels = NULL;
world_levels = NULL;
active_flag = NULL;
alpha = betax = betay = betaz = NULL;
nx_msm = ny_msm = nz_msm = NULL;
@ -150,10 +141,7 @@ MSM::~MSM()
void MSM::init()
{
if (me == 0) {
if (screen) fprintf(screen,"MSM initialization ...\n");
if (logfile) fprintf(logfile,"MSM initialization ...\n");
}
if (me == 0) utils::logmesg(lmp,"MSM initialization ...\n");
// error check
@ -169,13 +157,8 @@ void MSM::init()
if ((slabflag == 1) && (me == 0))
error->warning(FLERR,"Slab correction not needed for MSM");
if (order < 4 || order > 10) {
char str[128];
sprintf(str,"MSM order must be 4, 6, 8, or 10");
error->all(FLERR,str);
}
if (order%2 != 0) error->all(FLERR,"MSM order must be 4, 6, 8, or 10");
if ((order < 4) || (order > 10) || (order%2 != 0))
error->all(FLERR,"MSM order must be 4, 6, 8, or 10");
if (sizeof(FFT_SCALAR) != 8)
error->all(FLERR,"Cannot (yet) use single precision with MSM "
@ -221,33 +204,14 @@ void MSM::init()
MPI_Allreduce(&ngrid[0],&ngrid_max,1,MPI_INT,MPI_MAX,world);
if (me == 0) {
if (screen) {
fprintf(screen," 3d grid size/proc = %d\n",
ngrid_max);
fprintf(screen," estimated absolute RMS force accuracy = %g\n",
estimated_error);
fprintf(screen," estimated relative force accuracy = %g\n",
estimated_error/two_charge_force);
}
if (logfile) {
fprintf(logfile," 3d grid size/proc = %d\n",
ngrid_max);
fprintf(logfile," estimated absolute RMS force accuracy = %g\n",
estimated_error);
fprintf(logfile," estimated relative force accuracy = %g\n",
estimated_error/two_charge_force);
}
}
if (me == 0) {
if (screen) {
fprintf(screen," grid = %d %d %d\n",nx_msm[0],ny_msm[0],nz_msm[0]);
fprintf(screen," order = %d\n",order);
}
if (logfile) {
fprintf(logfile," grid = %d %d %d\n",nx_msm[0],ny_msm[0],nz_msm[0]);
fprintf(logfile," order = %d\n",order);
}
std::string mesg = fmt::format(" 3d grid size/proc = {}\n", ngrid_max);
mesg += fmt::format(" estimated absolute RMS force accuracy = {}\n",
estimated_error);
mesg += fmt::format(" estimated relative force accuracy = {}\n",
estimated_error/two_charge_force);
mesg += fmt::format(" grid = {} {} {}\n",nx_msm[0],ny_msm[0],nz_msm[0]);
mesg += fmt::format(" order = {}\n",order);
utils::logmesg(lmp,mesg);
}
}
@ -398,7 +362,6 @@ void MSM::setup()
nmax_direct = 8*(nxhi_direct+1)*(nyhi_direct+1)*(nzhi_direct+1);
deallocate();
if (peratom_allocate_flag) deallocate_peratom();
// compute direct sum interaction weights
@ -649,6 +612,8 @@ void MSM::compute(int eflag, int vflag)
void MSM::allocate()
{
deallocate();
// interpolation coeffs
order_allocated = order;
@ -670,9 +635,9 @@ void MSM::allocate()
// allocate memory for each grid level
for (int n=0; n<levels; n++) {
memory->create3d_offset(qgrid[n],nzlo_out[n],nzhi_out[n],
nylo_out[n],nyhi_out[n],nxlo_out[n],nxhi_out[n],"msm:qgrid");
memory->create3d_offset(egrid[n],nzlo_out[n],nzhi_out[n],
nylo_out[n],nyhi_out[n],nxlo_out[n],nxhi_out[n],"msm:egrid");
@ -685,7 +650,7 @@ void MSM::allocate()
nxlo_out[n],nxhi_out[n],nylo_out[n],nyhi_out[n],nzlo_out[n],nzhi_out[n],
procneigh[0][0],procneigh[0][1],procneigh[1][0],
procneigh[1][1],procneigh[2][0],procneigh[2][1]);
}
} else cg[n] = nullptr;
}
}
@ -695,24 +660,23 @@ void MSM::allocate()
void MSM::deallocate()
{
delete cg_all;
cg_all = nullptr;
memory->destroy2d_offset(phi1d,-order_allocated);
memory->destroy2d_offset(dphi1d,-order_allocated);
if (cg_all) delete cg_all;
for (int n=0; n<levels; n++) {
if (qgrid[n])
memory->destroy3d_offset(qgrid[n],nzlo_out[n],nylo_out[n],nxlo_out[n]);
memory->destroy3d_offset(qgrid[n],nzlo_out[n],nylo_out[n],nxlo_out[n]);
memory->destroy3d_offset(egrid[n],nzlo_out[n],nylo_out[n],nxlo_out[n]);
if (egrid[n])
memory->destroy3d_offset(egrid[n],nzlo_out[n],nylo_out[n],nxlo_out[n]);
if (world_levels[n] != MPI_COMM_NULL)
MPI_Comm_free(&world_levels[n]);
world_levels[n] = MPI_COMM_NULL;
active_flag[n] = 0;
if (world_levels)
if (world_levels[n] != MPI_COMM_NULL)
MPI_Comm_free(&world_levels[n]);
if (cg)
if (cg[n]) delete cg[n];
delete cg[n];
cg[n] = nullptr;
}
}
@ -801,6 +765,7 @@ void MSM::deallocate_peratom()
void MSM::allocate_levels()
{
deallocate_levels();
ngrid = new int[levels];
cg = new GridComm*[levels];
@ -850,21 +815,21 @@ void MSM::allocate_levels()
v5grid = new double***[levels];
for (int n=0; n<levels; n++) {
cg[n] = NULL;
cg[n] = nullptr;
world_levels[n] = MPI_COMM_NULL;
cg_peratom[n] = NULL;
active_flag[n] = 0;
cg_peratom[n] = nullptr;
qgrid[n] = NULL;
egrid[n] = NULL;
qgrid[n] = nullptr;
egrid[n] = nullptr;
v0grid[n] = NULL;
v1grid[n] = NULL;
v2grid[n] = NULL;
v3grid[n] = NULL;
v4grid[n] = NULL;
v5grid[n] = NULL;
v0grid[n] = nullptr;
v1grid[n] = nullptr;
v2grid[n] = nullptr;
v3grid[n] = nullptr;
v4grid[n] = nullptr;
v5grid[n] = nullptr;
}
}
/* ----------------------------------------------------------------------
@ -873,7 +838,9 @@ void MSM::allocate_levels()
void MSM::deallocate_levels()
{
if (cg) deallocate();
delete [] ngrid;
ngrid = nullptr;
memory->destroy(procneigh_levels);
delete [] world_levels;
@ -919,6 +886,50 @@ void MSM::deallocate_levels()
delete [] v3grid;
delete [] v4grid;
delete [] v5grid;
world_levels = nullptr;
active_flag = nullptr;
cg = nullptr;
cg_peratom = nullptr;
alpha = nullptr;
betax = nullptr;
betay = nullptr;
betaz = nullptr;
nx_msm = nullptr;
ny_msm = nullptr;
nz_msm = nullptr;
nxlo_in = nullptr;
nylo_in = nullptr;
nzlo_in = nullptr;
nxhi_in = nullptr;
nyhi_in = nullptr;
nzhi_in = nullptr;
nxlo_out = nullptr;
nylo_out = nullptr;
nzlo_out = nullptr;
nxhi_out = nullptr;
nyhi_out = nullptr;
nzhi_out = nullptr;
delxinv = nullptr;
delyinv = nullptr;
delzinv = nullptr;
qgrid = nullptr;
egrid = nullptr;
v0grid = nullptr;
v1grid = nullptr;
v2grid = nullptr;
v3grid = nullptr;
v4grid = nullptr;
v5grid = nullptr;
}
/* ----------------------------------------------------------------------
@ -1053,9 +1064,9 @@ void MSM::set_grid_global()
double *p_cutoff = (double *) force->pair->extract("cut_coul",itmp);
*p_cutoff = cutoff;
char str[128];
sprintf(str,"Adjusting Coulombic cutoff for MSM, new cutoff = %g",cutoff);
if (me == 0) error->warning(FLERR,str);
if (me == 0)
error->warning(FLERR,fmt::format("Adjusting Coulombic cutoff for "
"MSM, new cutoff = {}", cutoff));
}
if (triclinic == 0) {
@ -1094,7 +1105,6 @@ void MSM::set_grid_global()
if (!domain->nonperiodic) levels -= 1;
deallocate_levels();
allocate_levels();
// find number of grid levels in each direction
@ -1318,8 +1328,8 @@ void MSM::set_grid_local()
void MSM::set_proc_grid(int n)
{
for (int i=0; i<3; i++)
myloc[i] = comm->myloc[i];
for (int i=0; i<3; i++)
myloc[i] = comm->myloc[i];
// size of inner MSM grid owned by this proc
@ -1362,6 +1372,7 @@ void MSM::set_proc_grid(int n)
// define a new MPI communicator for this grid level that only includes active procs
if(world_levels[n] != MPI_COMM_NULL) MPI_Comm_free(&world_levels[n]);
MPI_Comm_split(world,color,me,&world_levels[n]);
if (!active_flag[n]) return;
@ -1479,16 +1490,13 @@ void MSM::particle_map()
void MSM::make_rho()
{
//fprintf(screen,"MSM aninterpolation\n\n");
int i,l,m,n,nx,ny,nz,mx,my,mz;
double dx,dy,dz,x0,y0,z0;
// clear 3d density array
double ***qgridn = qgrid[0];
memset(&(qgridn[nzlo_out[0]][nylo_out[0]][nxlo_out[0]]),0,ngrid[0]*sizeof(double));
double ***qgrid0 = qgrid[0];
memset(&(qgrid0[nzlo_out[0]][nylo_out[0]][nxlo_out[0]]),0,ngrid[0]*sizeof(double));
// loop over my charges, add their contribution to nearby grid points
// (nx,ny,nz) = global coords of grid pt to "lower left" of charge
@ -1519,7 +1527,7 @@ void MSM::make_rho()
x0 = y0*phi1d[1][m];
for (l = nlower; l <= nupper; l++) {
mx = l+nx;
qgridn[mz][my][mx] += x0*phi1d[0][l];
qgrid0[mz][my][mx] += x0*phi1d[0][l];
}
}
}
@ -1534,8 +1542,6 @@ void MSM::make_rho()
void MSM::direct(int n)
{
//fprintf(screen,"Direct contribution on level %i\n\n",n);
double ***qgridn = qgrid[n];
double ***egridn = egrid[n];
double ***v0gridn = v0grid[n];
@ -1768,8 +1774,6 @@ void MSM::direct(int n)
void MSM::direct_peratom(int n)
{
//fprintf(screen,"Direct contribution on level %i\n\n",n);
double ***qgridn = qgrid[n];
double ***v0gridn = v0grid[n];
double ***v1gridn = v1grid[n];
@ -1892,8 +1896,6 @@ void MSM::direct_peratom(int n)
void MSM::direct_top(int n)
{
//fprintf(screen,"Direct contribution on level %i\n\n",n);
double ***qgridn = qgrid[n];
double ***egridn = egrid[n];
double ***v0gridn = v0grid[n];
@ -2257,8 +2259,6 @@ void MSM::direct_peratom_top(int n)
void MSM::restriction(int n)
{
//fprintf(screen,"Restricting from level %i to %i\n\n",n,n+1);
const int p = order-1;
double ***qgrid1 = qgrid[n];
@ -2281,8 +2281,7 @@ void MSM::restriction(int n)
// zero out charge on coarser grid
memset(&(qgrid2[nzlo_out[n+1]][nylo_out[n+1]][nxlo_out[n+1]]),0,
ngrid[n+1]*sizeof(double));
memset(&(qgrid2[nzlo_out[n+1]][nylo_out[n+1]][nxlo_out[n+1]]),0,ngrid[n+1]*sizeof(double));
for (kp = nzlo_in[n+1]; kp <= nzhi_in[n+1]; kp++)
for (jp = nylo_in[n+1]; jp <= nyhi_in[n+1]; jp++)
@ -2331,8 +2330,6 @@ void MSM::restriction(int n)
void MSM::prolongation(int n)
{
//fprintf(screen,"Prolongating from level %i to %i\n\n",n+1,n);
const int p = order-1;
double ***egrid1 = egrid[n];
@ -2721,8 +2718,6 @@ void MSM::unpack_reverse(int flag, double *buf, int nlist, int *list)
void MSM::fieldforce()
{
//fprintf(screen,"MSM interpolation\n\n");
double ***egridn = egrid[0];
int i,l,m,n,nx,ny,nz,mx,my,mz;

View File

@ -257,12 +257,8 @@ PairBOP::~PairBOP()
memory->destroy(gfunc6);
memory->destroy(gpara);
}
if(allocate_sigma) {
destroy_sigma();
}
if(allocate_pi) {
destroy_pi();
}
memory->destroy(bt_sg);
memory->destroy(bt_pi);
}
/* ---------------------------------------------------------------------- */
@ -635,8 +631,6 @@ void PairBOP::coeff(int narg, char **arg)
bop_step=0;
nb_pi=0;
nb_sg=0;
allocate_sigma=0;
allocate_pi=0;
allocate_neigh=0;
update_list=0;
maxnall=0;
@ -768,19 +762,18 @@ void PairBOP::gneigh()
int *type = atom->type;
if(allocate_neigh==0) {
memory->create (BOP_index,nall,"BOP_index");
memory->create (BOP_index3,nall,"BOP_index3");
memory->create (BOP_total,nall,"BOP_total");
memory->create (BOP_total3,nall,"BOP_total");
if (otfly==0) memory->create (cos_index,nall,"cos_index");
memory->create(BOP_index,nall,"BOP_index");
memory->create(BOP_index3,nall,"BOP_index3");
memory->create(BOP_total,nall,"BOP_total");
memory->create(BOP_total3,nall,"BOP_total");
if (otfly==0) memory->create(cos_index,nall,"cos_index");
allocate_neigh=1;
}
else {
memory->grow (BOP_index,nall,"BOP_index");
memory->grow (BOP_index3,nall,"BOP_index3");
memory->grow (BOP_total,nall,"BOP_total");
memory->grow (BOP_total3,nall,"BOP_total3");
if (otfly==0) memory->grow (cos_index,nall,"cos_index");
} else {
memory->grow(BOP_index,nall,"BOP_index");
memory->grow(BOP_index3,nall,"BOP_index3");
memory->grow(BOP_total,nall,"BOP_total");
memory->grow(BOP_total3,nall,"BOP_total3");
if (otfly==0) memory->grow(cos_index,nall,"cos_index");
allocate_neigh=1;
}
ilist = list->ilist;
@ -1140,10 +1133,6 @@ double PairBOP::sigmaBo(int itmp, int jtmp)
if(nb_sg==0) {
nb_sg=(maxneigh)*(maxneigh/2);
}
if(allocate_sigma) {
destroy_sigma();
}
create_sigma(nb_sg);
sigB=0;
if(itmp<nlocal) {
@ -3798,9 +3787,6 @@ double PairBOP::PiBo(int itmp, int jtmp)
// Loop over all local atoms for i
if(allocate_pi) {
destroy_pi();
}
create_pi(nb_pi);
piB=0;
i = ilist[itmp];
@ -4866,7 +4852,6 @@ double PairBOP::PiBo(int itmp, int jtmp)
}
}
}
destroy_pi();
return(piB);
}
@ -5670,26 +5655,14 @@ void PairBOP::memory_theta_destroy()
void PairBOP::create_pi(int n_tot)
{
memory->destroy(bt_pi);
bt_pi = (B_PI *) memory->smalloc(n_tot*sizeof(B_PI),"BOP:bt_pi");
allocate_pi=1;
}
void PairBOP::create_sigma(int n_tot)
{
bt_sg = (B_SG *) memory->smalloc(n_tot*sizeof(B_SG),"BOP:bt_sg");
allocate_sigma=1;
}
void PairBOP::destroy_pi()
{
memory->destroy(bt_pi);
allocate_pi=0;
}
void PairBOP::destroy_sigma()
{
memory->destroy(bt_sg);
allocate_sigma=0;
bt_sg = (B_SG *) memory->smalloc(n_tot*sizeof(B_SG),"BOP:bt_sg");
}
/* ---------------------------------------------------------------------- */

View File

@ -58,8 +58,6 @@ class PairBOP : public Pair {
int ***elem2param;
int nparams;
int bop_step;
int allocate_pi;
int allocate_sigma;
int allocate_neigh;
int nb_pi,nb_sg;
int ago1;

View File

@ -1335,6 +1335,18 @@ void PairComb::sm_table()
// allocate arrays
memory->sfree(sht_first);
memory->destroy(intype);
memory->destroy(fafb);
memory->destroy(dfafb);
memory->destroy(ddfafb);
memory->destroy(phin);
memory->destroy(dphin);
memory->destroy(erpaw);
memory->destroy(NCo);
memory->destroy(bbij);
memory->destroy(sht_num);
memory->create(intype,n,n,"pair:intype");
memory->create(fafb,ncoul,nntypes,"pair:fafb");
memory->create(dfafb,ncoul,nntypes,"pair:dfafb");

View File

@ -2258,6 +2258,26 @@ void PairComb3::tables()
int n = nelements;
memory->destroy(intype);
memory->destroy(erpaw);
memory->destroy(fafb);
memory->destroy(dfafb);
memory->destroy(ddfafb);
memory->destroy(phin);
memory->destroy(dphin);
memory->destroy(afb);
memory->destroy(dafb);
memory->destroy(vvdw);
memory->destroy(vdvdw);
memory->destroy(dpl);
memory->destroy(bbij);
memory->destroy(xcctmp);
memory->destroy(xchtmp);
memory->destroy(xcotmp);
memory->destroy(NCo);
memory->destroy(sht_num);
memory->sfree(sht_first);
dra = 0.001;
drin = 0.100;
drbuf = 0.100;

View File

@ -62,7 +62,7 @@ PairEAMCD::~PairEAMCD()
{
memory->destroy(rhoB);
memory->destroy(D_values);
if (hcoeff) delete[] hcoeff;
delete[] hcoeff;
}
void PairEAMCD::compute(int eflag, int vflag)
@ -521,6 +521,7 @@ void PairEAMCD::read_h_coeff(char *filename)
if ((int)values.count() != nhcoeff + 1 || nhcoeff < 1)
error->one(FLERR, "Failed to read h(x) function coefficients in EAM file.");
delete[] hcoeff;
hcoeff = new double[nhcoeff];
int i = 0;
@ -534,7 +535,10 @@ void PairEAMCD::read_h_coeff(char *filename)
}
MPI_Bcast(&nhcoeff, 1, MPI_INT, 0, world);
if (comm->me != 0) hcoeff = new double[nhcoeff];
if (comm->me != 0) {
delete[] hcoeff;
hcoeff = new double[nhcoeff];
}
MPI_Bcast(hcoeff, nhcoeff, MPI_DOUBLE, 0, world);
}

View File

@ -47,26 +47,26 @@ PairPolymorphic::PairPolymorphic(LAMMPS *lmp) : Pair(lmp)
one_coeff = 1;
nelements = 0;
elements = NULL;
match = NULL;
pairParameters = NULL;
tripletParameters = NULL;
elem2param = NULL;
elem3param = NULL;
map = NULL;
elements = nullptr;
match = nullptr;
pairParameters = nullptr;
tripletParameters = nullptr;
elem2param = nullptr;
elem3param = nullptr;
map = nullptr;
epsilon = 0.0;
neighsize = 0;
firstneighV = NULL;
firstneighW = NULL;
firstneighW1 = NULL;
delxV = NULL;
delyV = NULL;
delzV = NULL;
drV = NULL;
delxW = NULL;
delyW = NULL;
delzW = NULL;
drW = NULL;
firstneighV = nullptr;
firstneighW = nullptr;
firstneighW1 = nullptr;
delxV = nullptr;
delyV = nullptr;
delzV = nullptr;
drV = nullptr;
delxW = nullptr;
delyW = nullptr;
delzW = nullptr;
drW = nullptr;
}
/* ----------------------------------------------------------------------
@ -79,8 +79,10 @@ PairPolymorphic::~PairPolymorphic()
for (int i = 0; i < nelements; i++) delete [] elements[i];
delete [] elements;
delete [] match;
memory->destroy(pairParameters);
memory->destroy(tripletParameters);
delete [] pairParameters;
delete [] tripletParameters;
memory->destroy(elem2param);
memory->destroy(elem3param);
if (allocated) {
@ -487,7 +489,7 @@ void PairPolymorphic::coeff(int narg, char **arg)
delete [] elements;
}
elements = new char*[atom->ntypes];
for (i = 0; i < atom->ntypes; i++) elements[i] = NULL;
for (i = 0; i < atom->ntypes; i++) elements[i] = nullptr;
nelements = 0;
for (i = 3; i < narg; i++) {
@ -581,6 +583,7 @@ void PairPolymorphic::read_file(char *file)
eta = values.next_int();
// map the elements in the potential file to LAMMPS atom types
delete [] match;
match = new int[nelements];
for (int i = 0; i < nelements; i++) {
@ -617,8 +620,10 @@ void PairPolymorphic::read_file(char *file)
// cutoffs
npair = nelements*(nelements+1)/2;
ntriple = nelements*nelements*nelements;
pairParameters = (PairParameters*) memory->srealloc(pairParameters,npair*sizeof(PairParameters), "pair:pairParameters");
tripletParameters = (TripletParameters*) memory->srealloc(tripletParameters,ntriple*sizeof(TripletParameters), "pair:tripletParameters");
delete [] pairParameters;
delete [] tripletParameters;
pairParameters = new PairParameters[npair];
tripletParameters = new TripletParameters[ntriple];
for (int i = 0; i < npair; i++) {
PairParameters & p = pairParameters[i];
@ -641,9 +646,12 @@ void PairPolymorphic::read_file(char *file)
MPI_Bcast(&ntriple, 1, MPI_INT, 0, world);
if(comm->me != 0) {
delete [] match;
match = new int[nelements];
pairParameters = (PairParameters*) memory->srealloc(pairParameters,npair*sizeof(PairParameters), "pair:pairParameters");
tripletParameters = (TripletParameters*) memory->srealloc(tripletParameters,ntriple*sizeof(TripletParameters), "pair:tripletParameters");
delete [] pairParameters;
delete [] tripletParameters;
pairParameters = new PairParameters[npair];
tripletParameters = new TripletParameters[ntriple];
}
MPI_Bcast(match, nelements, MPI_INT, 0, world);

View File

@ -50,14 +50,14 @@ class PairPolymorphic : public Pair {
xmax = 0.0;
xmaxsq = xmax*xmax;
vmax = 0.0;
xs = NULL;
ys = NULL;
ys1 = NULL;
ys2 = NULL;
ys3 = NULL;
ys4 = NULL;
ys5 = NULL;
ys6 = NULL;
xs = nullptr;
ys = nullptr;
ys1 = nullptr;
ys2 = nullptr;
ys3 = nullptr;
ys4 = nullptr;
ys5 = nullptr;
ys6 = nullptr;
}
tabularFunction(int n) {
size = n;
@ -88,14 +88,14 @@ class PairPolymorphic : public Pair {
ys6 = new double[n];
}
virtual ~tabularFunction() {
if (xs) delete [] xs;
if (ys) delete [] ys;
if (ys1) delete [] ys1;
if (ys2) delete [] ys2;
if (ys3) delete [] ys3;
if (ys4) delete [] ys4;
if (ys5) delete [] ys5;
if (ys6) delete [] ys6;
delete [] xs;
delete [] ys;
delete [] ys1;
delete [] ys2;
delete [] ys3;
delete [] ys4;
delete [] ys5;
delete [] ys6;
}
void set_xrange(double x1, double x2) {
xmin = x1;
@ -198,21 +198,21 @@ class PairPolymorphic : public Pair {
void resize(int n) {
if (n != size) {
size = n;
if (xs) delete [] xs;
delete [] xs;
xs = new double[n];
if (ys) delete [] ys;
delete [] ys;
ys = new double[n];
if (ys1) delete [] ys1;
delete [] ys1;
ys1 = new double[n];
if (ys2) delete [] ys2;
delete [] ys2;
ys2 = new double[n];
if (ys3) delete [] ys3;
delete [] ys3;
ys3 = new double[n];
if (ys4) delete [] ys4;
delete [] ys4;
ys4 = new double[n];
if (ys5) delete [] ys5;
delete [] ys5;
ys5 = new double[n];
if (ys6) delete [] ys6;
delete [] ys6;
ys6 = new double[n];
}
}
@ -248,35 +248,45 @@ class PairPolymorphic : public Pair {
}
int size;
double xmin,xmax,xmaxsq,rdx,vmax;
double * ys, * ys1, * ys2, * ys3, * ys4, * ys5, * ys6;
double * xs;
double *ys, *ys1, *ys2, *ys3, *ys4, *ys5, *ys6;
double *xs;
};
struct PairParameters {
double cut;
double cutsq;
double xi;
class tabularFunction * U;
class tabularFunction * V;
class tabularFunction * W;
class tabularFunction * F;
class tabularFunction *U;
class tabularFunction *V;
class tabularFunction *W;
class tabularFunction *F;
PairParameters() {
cut = 0.0;
cutsq = 0.0;
xi = 1.0;
U = NULL;
V = NULL;
W = NULL;
F = NULL;
U = nullptr;
V = nullptr;
W = nullptr;
F = nullptr;
};
~PairParameters() {
delete U;
delete V;
delete W;
delete F;
}
};
struct TripletParameters {
class tabularFunction * P;
class tabularFunction * G;
class tabularFunction *P;
class tabularFunction *G;
TripletParameters() {
P = NULL;
G = NULL;
P = nullptr;
G = nullptr;
};
~TripletParameters() {
delete P;
delete G;
}
};
double epsilon;

View File

@ -23,6 +23,7 @@
#include "memory.h"
#include "error.h"
#include "utils.h"
#include "fmt/format.h"
using namespace LAMMPS_NS;
@ -82,13 +83,11 @@ void BondFENE::compute(int eflag, int vflag)
// if r -> r0, then rlogarg < 0.0 which is an error
// issue a warning and reset rlogarg = epsilon
// if r > 2*r0 something serious is wrong, abort
printf("r = %g r0 = %g rlogarg = %g\n",sqrt(rsq),sqrt(r0sq),rlogarg);
if (rlogarg < 0.1) {
char str[128];
sprintf(str,"FENE bond too long: " BIGINT_FORMAT " "
TAGINT_FORMAT " " TAGINT_FORMAT " %g",
update->ntimestep,atom->tag[i1],atom->tag[i2],sqrt(rsq));
error->warning(FLERR,str,0);
error->warning(FLERR,fmt::format("FENE bond too long: {} {} {} {}",
update->ntimestep,atom->tag[i1],atom->tag[i2],sqrt(rsq)));
if (rlogarg <= -3.0) error->one(FLERR,"Bad FENE bond");
rlogarg = 0.1;
}

View File

@ -61,14 +61,21 @@ PairTersoffTable::PairTersoffTable(LAMMPS *lmp) : Pair(lmp)
manybody_flag = 1;
nelements = 0;
elements = NULL;
elements = nullptr;
nparams = maxparam = 0;
params = NULL;
elem2param = NULL;
params = nullptr;
elem2param = nullptr;
allocated = 0;
preGtetaFunction = preGtetaFunctionDerived = NULL;
preCutoffFunction = preCutoffFunctionDerived = NULL;
preGtetaFunction = preGtetaFunctionDerived = nullptr;
preCutoffFunction = preCutoffFunctionDerived = nullptr;
exponential = nullptr;
gtetaFunction = nullptr;
gtetaFunctionDerived = nullptr;
cutoffFunction = nullptr;
cutoffFunctionDerived = nullptr;
betaZetaPower = nullptr;
betaZetaPowerDerived = nullptr;
}
/* ----------------------------------------------------------------------
@ -88,9 +95,9 @@ PairTersoffTable::~PairTersoffTable()
memory->destroy(cutsq);
delete [] map;
deallocateGrids();
deallocatePreLoops();
}
deallocateGrids();
deallocatePreLoops();
}
/* ---------------------------------------------------------------------- */
@ -525,13 +532,15 @@ void PairTersoffTable::deallocatePreLoops(void)
void PairTersoffTable::allocatePreLoops(void)
{
memory->create(preGtetaFunction,leadingDimensionInteractionList,leadingDimensionInteractionList,"tersofftable:preGtetaFunction");
memory->create(preGtetaFunctionDerived,leadingDimensionInteractionList,leadingDimensionInteractionList,"tersofftable:preGtetaFunctionDerived");
memory->create(preCutoffFunction,leadingDimensionInteractionList,"tersofftable:preCutoffFunction");
memory->create(preCutoffFunctionDerived,leadingDimensionInteractionList,"tersofftable:preCutoffFunctionDerived");
deallocatePreLoops();
memory->create(preGtetaFunction,leadingDimensionInteractionList,
leadingDimensionInteractionList,"tersofftable:preGtetaFunction");
memory->create(preGtetaFunctionDerived,leadingDimensionInteractionList,
leadingDimensionInteractionList,"tersofftable:preGtetaFunctionDerived");
memory->create(preCutoffFunction,leadingDimensionInteractionList,
"tersofftable:preCutoffFunction");
memory->create(preCutoffFunctionDerived,leadingDimensionInteractionList,
"tersofftable:preCutoffFunctionDerived");
}
void PairTersoffTable::deallocateGrids()
@ -557,6 +566,8 @@ void PairTersoffTable::allocateGrids(void)
double r, minMu, maxLambda, maxCutoff;
double const PI=acos(-1.0);
deallocateGrids();
// exponential
// find min and max argument
@ -569,9 +580,7 @@ void PairTersoffTable::allocateGrids(void)
maxCutoff=cutmax;
minArgumentExponential=minMu*GRIDSTART;
numGridPointsExponential=(int)((maxLambda*maxCutoff-minArgumentExponential)*GRIDDENSITY_EXP)+2;
memory->create(exponential,numGridPointsExponential,"tersofftable:exponential");
r = minArgumentExponential;

View File

@ -249,115 +249,6 @@ Atom::~Atom()
delete [] peratom[i].name;
memory->sfree(peratom);
// --------------------------------------------------------------------
// 2nd customization section: customize by adding new per-atom variables
// delete atom arrays
memory->destroy(tag);
memory->destroy(type);
memory->destroy(mask);
memory->destroy(image);
memory->destroy(x);
memory->destroy(v);
memory->destroy(f);
memory->destroy(molecule);
memory->destroy(molindex);
memory->destroy(molatom);
memory->destroy(q);
memory->destroy(mu);
memory->destroy(omega);
memory->destroy(angmom);
memory->destroy(torque);
memory->destroy(radius);
memory->destroy(rmass);
memory->destroy(ellipsoid);
memory->destroy(line);
memory->destroy(tri);
memory->destroy(body);
memory->destroy(sp);
memory->destroy(fm);
memory->destroy(fm_long);
memory->destroy(vfrac);
memory->destroy(s0);
memory->destroy(x0);
memory->destroy(spin);
memory->destroy(eradius);
memory->destroy(ervel);
memory->destroy(erforce);
memory->destroy(ervelforce);
memory->destroy(cs);
memory->destroy(csforce);
memory->destroy(vforce);
memory->destroy(etag);
memory->destroy(rho);
memory->destroy(drho);
memory->destroy(esph);
memory->destroy(desph);
memory->destroy(cv);
memory->destroy(vest);
// USER-MESONT package
memory->destroy(length);
memory->destroy(buckling);
memory->destroy(bond_nt);
memory->destroy(contact_radius);
memory->destroy(smd_data_9);
memory->destroy(smd_stress);
memory->destroy(eff_plastic_strain);
memory->destroy(eff_plastic_strain_rate);
memory->destroy(damage);
memory->destroy(dpdTheta);
memory->destroy(uCond);
memory->destroy(uMech);
memory->destroy(uChem);
memory->destroy(uCG);
memory->destroy(uCGnew);
memory->destroy(duChem);
memory->destroy(cc);
memory->destroy(cc_flux);
memory->destroy(edpd_temp);
memory->destroy(edpd_flux);
memory->destroy(edpd_cv);
memory->destroy(nspecial);
memory->destroy(special);
memory->destroy(num_bond);
memory->destroy(bond_type);
memory->destroy(bond_atom);
memory->destroy(num_angle);
memory->destroy(angle_type);
memory->destroy(angle_atom1);
memory->destroy(angle_atom2);
memory->destroy(angle_atom3);
memory->destroy(num_dihedral);
memory->destroy(dihedral_type);
memory->destroy(dihedral_atom1);
memory->destroy(dihedral_atom2);
memory->destroy(dihedral_atom3);
memory->destroy(dihedral_atom4);
memory->destroy(num_improper);
memory->destroy(improper_type);
memory->destroy(improper_atom1);
memory->destroy(improper_atom2);
memory->destroy(improper_atom3);
memory->destroy(improper_atom4);
// end of customization section
// --------------------------------------------------------------------
// delete custom atom arrays
for (int i = 0; i < nivector; i++) {
@ -430,7 +321,7 @@ void Atom::peratom_create()
nperatom = maxperatom = 0;
// --------------------------------------------------------------------
// 3rd customization section: add peratom variables here, order does not matter
// 2nd customization section: add peratom variables here, order does not matter
// register tagint & imageint variables as INT or BIGINT
int tagintsize = INT;
@ -671,7 +562,7 @@ void Atom::add_peratom_vary(const char *name, void *address,
void Atom::set_atomflag_defaults()
{
// --------------------------------------------------------------------
// 4th customization section: customize by adding new flag
// 3rd customization section: customize by adding new flag
// identical list as 2nd customization in atom.h
sphere_flag = ellipsoid_flag = line_flag = tri_flag = body_flag = 0;
@ -2462,7 +2353,7 @@ void Atom::remove_custom(int flag, int index)
void *Atom::extract(char *name)
{
// --------------------------------------------------------------------
// 5th customization section: customize by adding new variable name
// 4th customization section: customize by adding new variable name
if (strcmp(name,"mass") == 0) return (void *) mass;

View File

@ -90,9 +90,51 @@ AtomVec::AtomVec(LAMMPS *lmp) : Pointers(lmp)
AtomVec::~AtomVec()
{
int datatype,cols;
void *pdata;
for (int i = 0; i < nargcopy; i++) delete [] argcopy[i];
delete [] argcopy;
memory->destroy(atom->tag);
memory->destroy(atom->type);
memory->destroy(atom->mask);
memory->destroy(atom->image);
memory->destroy(atom->x);
memory->destroy(atom->v);
memory->destroy(atom->f);
for (int i = 0; i < ngrow; i++) {
pdata = mgrow.pdata[i];
datatype = mgrow.datatype[i];
cols = mgrow.cols[i];
if (datatype == Atom::DOUBLE) {
if (cols == 0)
memory->destroy(*((double **) pdata));
else if (cols > 0)
memory->destroy(*((double ***) pdata));
else {
memory->destroy(*((double ***) pdata));
}
} else if (datatype == Atom::INT) {
if (cols == 0)
memory->destroy(*((int **) pdata));
else if (cols > 0)
memory->destroy(*((int ***) pdata));
else {
memory->destroy(*((int ***) pdata));
}
} else if (datatype == Atom::BIGINT) {
if (cols == 0)
memory->destroy(*((bigint **) pdata));
else if (cols > 0)
memory->destroy(*((bigint ***) pdata));
else {
memory->destroy(*((bigint ***) pdata));
}
}
}
destroy_method(&mgrow);
destroy_method(&mcopy);
destroy_method(&mcomm);
@ -2335,9 +2377,9 @@ void AtomVec::setup_fields()
{
int n,cols;
if (strstr(fields_data_atom,"id ") != fields_data_atom)
if (!utils::strmatch(fields_data_atom,"^id "))
error->all(FLERR,"Atom style fields_data_atom must have id as first field");
if (strstr(fields_data_vel,"id v") != fields_data_vel)
if (!utils::strmatch(fields_data_vel,"^id v"))
error->all(FLERR,"Atom style fields_data_vel must have "
"'id v' as first fields");
@ -2469,31 +2511,21 @@ int AtomVec::process_fields(char *str, const char *default_str, Method *method)
for (match = 0; match < nperatom; match++)
if (strcmp(field, peratom[match].name) == 0) break;
if (match == nperatom) {
char str[128];
sprintf(str,"Peratom field %s not recognized", field);
error->all(FLERR,str);
}
if (match == nperatom)
error->all(FLERR,fmt::format("Peratom field {} not recognized", field));
index[i] = match;
// error if field appears multiple times
for (match = 0; match < i; match++)
if (index[i] == index[match]) {
char str[128];
sprintf(str,"Peratom field %s is repeated", field);
error->all(FLERR,str);
}
if (index[i] == index[match])
error->all(FLERR,fmt::format("Peratom field {} is repeated", field));
// error if field is in default str
for (match = 0; match < ndef; match++)
if (strcmp(field, def_words[match].c_str()) == 0) {
char str[128];
sprintf(str,"Peratom field %s is a default", field);
error->all(FLERR,str);
}
if (strcmp(field, def_words[match].c_str()) == 0)
error->all(FLERR,fmt::format("Peratom field {} is a default", field));
}
method->index = index;

View File

@ -901,7 +901,9 @@ rendezvous_irregular(int n, char *inbuf, int insize, int inorder, int *procs,
if (inorder) nrvous = irregular->create_data_grouped(n,procs);
else nrvous = irregular->create_data(n,procs);
char *inbuf_rvous = (char *) memory->smalloc((bigint) nrvous*insize,
// add 1 item to the allocated buffer size, so the returned pointer is not NULL
char *inbuf_rvous = (char *) memory->smalloc((bigint) nrvous*insize+1,
"rendezvous:inbuf");
irregular->exchange_data(inbuf,insize,inbuf_rvous);
@ -936,7 +938,9 @@ rendezvous_irregular(int n, char *inbuf, int insize, int inorder, int *procs,
nout = irregular->create_data_grouped(nrvous_out,procs_rvous);
else nout = irregular->create_data(nrvous_out,procs_rvous);
outbuf = (char *) memory->smalloc((bigint) nout*outsize,
// add 1 item to the allocated buffer size, so the returned pointer is not NULL
outbuf = (char *) memory->smalloc((bigint) nout*outsize+1,
"rendezvous:outbuf");
irregular->exchange_data(outbuf_rvous,outsize,outbuf);
@ -975,7 +979,10 @@ rendezvous_all2all(int n, char *inbuf, int insize, int inorder, int *procs,
if (!inorder) {
memory->create(procs_a2a,nprocs,"rendezvous:procs");
inbuf_a2a = (char *) memory->smalloc((bigint) n*insize,
// add 1 item to the allocated buffer size, so the returned pointer is not NULL
inbuf_a2a = (char *) memory->smalloc((bigint) n*insize+1,
"rendezvous:inbuf");
memset(inbuf_a2a,0,(bigint)n*insize*sizeof(char));
memory->create(offsets,nprocs,"rendezvous:offsets");
@ -1038,8 +1045,9 @@ rendezvous_all2all(int n, char *inbuf, int insize, int inorder, int *procs,
}
// all2all comm of inbuf from caller decomp to rendezvous decomp
// add 1 item to the allocated buffer size, so the returned pointer is not NULL
char *inbuf_rvous = (char *) memory->smalloc((bigint) nrvous*insize,
char *inbuf_rvous = (char *) memory->smalloc((bigint) nrvous*insize+1,
"rendezvous:inbuf");
memset(inbuf_rvous,0,(bigint) nrvous*insize*sizeof(char));
@ -1079,7 +1087,9 @@ rendezvous_all2all(int n, char *inbuf, int insize, int inorder, int *procs,
if (!outorder) {
memory->create(procs_a2a,nprocs,"rendezvous_a2a:procs");
outbuf_a2a = (char *) memory->smalloc((bigint) nrvous_out*outsize,
// add 1 item to the allocated buffer size, so the returned pointer is not NULL
outbuf_a2a = (char *) memory->smalloc((bigint) nrvous_out*outsize+1,
"rendezvous:outbuf");
memory->create(offsets,nprocs,"rendezvous:offsets");
@ -1138,8 +1148,9 @@ rendezvous_all2all(int n, char *inbuf, int insize, int inorder, int *procs,
// all2all comm of outbuf from rendezvous decomp back to caller decomp
// caller will free outbuf
// add 1 item to the allocated buffer size, so the returned pointer is not NULL
outbuf = (char *) memory->smalloc((bigint) nout*outsize,"rendezvous:outbuf");
outbuf = (char *) memory->smalloc((bigint) nout*outsize+1,"rendezvous:outbuf");
MPI_Alltoallv(outbuf_a2a,sendcount,sdispls,MPI_CHAR,
outbuf,recvcount,rdispls,MPI_CHAR,world);

View File

@ -193,7 +193,7 @@ void CreateAtoms::command(int narg, char **arg)
if (iarg+5 > narg) error->all(FLERR,"Illegal create_atoms command");
double thetaone;
double axisone[3];
thetaone = force->numeric(FLERR,arg[iarg+1]);
thetaone = force->numeric(FLERR,arg[iarg+1]) / 180.0 * MY_PI;;
axisone[0] = force->numeric(FLERR,arg[iarg+2]);
axisone[1] = force->numeric(FLERR,arg[iarg+3]);
axisone[2] = force->numeric(FLERR,arg[iarg+4]);

View File

@ -107,6 +107,7 @@ void Error::universe_one(const std::string &file, int line, const std::string &s
throw LAMMPSAbortException(mesg, universe->uworld);
#else
MPI_Abort(universe->uworld,1);
exit(1); // to trick "smart" compilers into believing this does not return
#endif
}
@ -205,6 +206,7 @@ void Error::one(const std::string &file, int line, const std::string &str)
if (screen) fflush(screen);
if (logfile) fflush(logfile);
MPI_Abort(world,1);
exit(1); // to trick "smart" compilers into believing this does not return
#endif
}

View File

@ -27,20 +27,20 @@ class Error : protected Pointers {
public:
Error(class LAMMPS *);
void universe_all(const std::string &, int, const std::string &);
void universe_one(const std::string &, int, const std::string &);
[[ noreturn ]] void universe_all(const std::string &, int, const std::string &);
[[ noreturn ]] void universe_one(const std::string &, int, const std::string &);
void universe_warn(const std::string &, int, const std::string &);
void all(const std::string &, int, const std::string &);
void one(const std::string &, int, const std::string &);
[[ noreturn ]] void all(const std::string &, int, const std::string &);
[[ noreturn ]] void one(const std::string &, int, const std::string &);
void warning(const std::string &, int, const std::string &, int = 1);
void message(const std::string &, int, const std::string &, int = 1);
void done(int = 0); // 1 would be fully backwards compatible
[[ noreturn ]] void done(int = 0); // 1 would be fully backwards compatible
#ifdef LAMMPS_EXCEPTIONS
std::string get_last_error() const;
ErrorType get_last_error_type() const;
void set_last_error(const std::string &msg, ErrorType type = ERROR_NORMAL);
void set_last_error(const std::string &msg, ErrorType type = ERROR_NORMAL);
private:
std::string last_error_message;

View File

@ -34,6 +34,7 @@
#include "improper.h"
#include "kspace.h"
#include "error.h"
#include "update.h"
#include "utils.h"
#include "fmt/format.h"
@ -1013,15 +1014,20 @@ tagint Force::tnumeric(const char *file, int line, char *str)
FILE *Force::open_potential(const char *name)
{
std::string filepath = utils::get_potential_file_path(name);
std::string date;
if(!filepath.empty()) {
date = utils::get_potential_date(filepath, "potential");
std::string unit_style = update->unit_style;
std::string date = utils::get_potential_date(filepath, "potential");
std::string units = utils::get_potential_units(filepath, "potential");
if(!date.empty()) {
utils::logmesg(lmp, fmt::format("Reading potential file {} "
"with DATE: {}\n", name, date));
}
if (!units.empty() && (units != unit_style)) {
error->one(FLERR, fmt::format("Potential file {} requires {} units "
"but {} units are in use", name, units, unit_style));
}
return fopen(filepath.c_str(), "r");
}
return nullptr;

View File

@ -24,6 +24,7 @@ class Input : protected Pointers {
friend class Info;
friend class Error;
friend class Deprecated;
friend class SimpleCommandsTest_Echo_Test;
public:
int narg; // # of command args

View File

@ -1,10 +1,9 @@
include(GTest)
add_subdirectory(force-styles)
add_subdirectory(utils)
add_subdirectory(formats)
add_subdirectory(commands)
find_package(ClangFormat 8.0)

View File

@ -0,0 +1,4 @@
add_executable(test_simple_commands test_simple_commands.cpp)
target_link_libraries(test_simple_commands PRIVATE lammps GTest::GMock GTest::GTest)
add_test(NAME TestSimpleCommands COMMAND test_simple_commands WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})

View File

@ -0,0 +1,135 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include "input.h"
#include "lammps.h"
#include "utils.h"
#include "gmock/gmock.h"
#include "gtest/gtest.h"
#include <cstdio>
#include <cstring>
#include <fstream>
#include <iostream>
#include <mpi.h>
// whether to print verbose output (i.e. not capturing LAMMPS screen output).
bool verbose = false;
namespace LAMMPS_NS {
using ::testing::Eq;
class SimpleCommandsTest : public ::testing::Test {
protected:
LAMMPS *lmp;
void SetUp() override
{
const char *args[] = {"SimpleCommandsTest", "-log", "none", "-echo", "screen", "-nocite"};
char **argv = (char **)args;
int argc = sizeof(args) / sizeof(char *);
if (!verbose) ::testing::internal::CaptureStdout();
lmp = new LAMMPS(argc, argv, MPI_COMM_WORLD);
if (!verbose) ::testing::internal::GetCapturedStdout();
}
void TearDown() override
{
if (!verbose) ::testing::internal::CaptureStdout();
delete lmp;
if (!verbose) ::testing::internal::GetCapturedStdout();
}
};
TEST_F(SimpleCommandsTest, Echo)
{
ASSERT_EQ(lmp->input->echo_screen, 1);
ASSERT_EQ(lmp->input->echo_log, 0);
if (!verbose) ::testing::internal::CaptureStdout();
lmp->input->one("echo none");
if (!verbose) ::testing::internal::GetCapturedStdout();
ASSERT_EQ(lmp->input->echo_screen, 0);
ASSERT_EQ(lmp->input->echo_log, 0);
if (!verbose) ::testing::internal::CaptureStdout();
lmp->input->one("echo both");
if (!verbose) ::testing::internal::GetCapturedStdout();
ASSERT_EQ(lmp->input->echo_screen, 1);
ASSERT_EQ(lmp->input->echo_log, 1);
if (!verbose) ::testing::internal::CaptureStdout();
lmp->input->one("echo screen");
if (!verbose) ::testing::internal::GetCapturedStdout();
ASSERT_EQ(lmp->input->echo_screen, 1);
ASSERT_EQ(lmp->input->echo_log, 0);
if (!verbose) ::testing::internal::CaptureStdout();
lmp->input->one("echo log");
if (!verbose) ::testing::internal::GetCapturedStdout();
ASSERT_EQ(lmp->input->echo_screen, 0);
ASSERT_EQ(lmp->input->echo_log, 1);
}
TEST_F(SimpleCommandsTest, Log)
{
ASSERT_EQ(lmp->logfile, nullptr);
if (!verbose) ::testing::internal::CaptureStdout();
lmp->input->one("log simple_command_test.log");
lmp->input->one("print 'test1'");
if (!verbose) ::testing::internal::GetCapturedStdout();
ASSERT_NE(lmp->logfile, nullptr);
if (!verbose) ::testing::internal::CaptureStdout();
lmp->input->one("log none");
if (!verbose) ::testing::internal::GetCapturedStdout();
ASSERT_EQ(lmp->logfile, nullptr);
std::string text;
std::ifstream in;
in.open("simple_command_test.log");
in >> text;
in.close();
ASSERT_THAT(text, Eq("test1"));
if (!verbose) ::testing::internal::CaptureStdout();
lmp->input->one("log simple_command_test.log append");
lmp->input->one("print 'test2'");
if (!verbose) ::testing::internal::GetCapturedStdout();
ASSERT_NE(lmp->logfile, nullptr);
if (!verbose) ::testing::internal::CaptureStdout();
lmp->input->one("log none");
if (!verbose) ::testing::internal::GetCapturedStdout();
ASSERT_EQ(lmp->logfile, nullptr);
in.open("simple_command_test.log");
in >> text;
ASSERT_THAT(text, Eq("test1"));
in >> text;
ASSERT_THAT(text, Eq("test2"));
in.close();
remove("simple_command_test.log");
}
} // namespace LAMMPS_NS
int main(int argc, char **argv)
{
MPI_Init(&argc, &argv);
::testing::InitGoogleMock(&argc, argv);
if ((argc > 1) && (strcmp(argv[1], "-v") == 0)) verbose = true;
int rv = RUN_ALL_TESTS();
MPI_Finalize();
return rv;
}

View File

@ -15,6 +15,13 @@ if(BUILD_MPI)
else()
target_link_libraries(style_tests PUBLIC mpi_stubs)
endif()
# propagate sanitizer options to test tools
if (NOT ENABLE_SANITIZER STREQUAL "none")
if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.13)
target_compile_options(style_tests PUBLIC -fsanitize=${ENABLE_SANITIZER})
target_link_options(style_tests PUBLIC -fsanitize=${ENABLE_SANITIZER})
endif()
endif()
# unit test for error stats class
add_executable(test_error_stats test_error_stats.cpp)

View File

@ -87,8 +87,8 @@ LAMMPS *init_lammps(int argc, char **argv, const TestConfig &cfg, const bool new
if (!info->has_style(prerequisite.first, style)) ++nfail;
}
delete info;
if (nfail > 0) {
delete info;
cleanup_lammps(lmp, cfg);
return nullptr;
}

View File

@ -87,8 +87,8 @@ LAMMPS *init_lammps(int argc, char **argv, const TestConfig &cfg, const bool new
if (!info->has_style(prerequisite.first, style)) ++nfail;
}
delete info;
if (nfail > 0) {
delete info;
cleanup_lammps(lmp, cfg);
return nullptr;
}

View File

@ -87,8 +87,8 @@ LAMMPS *init_lammps(int argc, char **argv, const TestConfig &cfg, const bool new
if (!info->has_style(prerequisite.first, style)) ++nfail;
}
delete info;
if (nfail > 0) {
delete info;
cleanup_lammps(lmp, cfg);
return nullptr;
}

View File

@ -14,6 +14,7 @@
#include "test_main.h"
#include "test_config.h"
#include "test_config_reader.h"
#include "gmock/gmock.h"
#include "gtest/gtest.h"
#include <cstring>
@ -63,7 +64,7 @@ std::string INPUT_FOLDER = STRINGIFY(TEST_INPUT_FOLDER);
int main(int argc, char **argv)
{
MPI_Init(&argc, &argv);
::testing::InitGoogleTest(&argc, argv);
::testing::InitGoogleMock(&argc, argv);
if (argc < 2) {
usage(std::cerr, argv[0]);
@ -109,5 +110,8 @@ int main(int argc, char **argv)
return 1;
}
}
return RUN_ALL_TESTS();
int rv = RUN_ALL_TESTS();
MPI_Finalize();
return rv;
}

View File

@ -1,7 +1,7 @@
---
lammps_version: 5 May 2020
date_generated: Tue May 26 21:02:07 202
epsilon: 5.0e-12
epsilon: 1.0e-11
prerequisites: ! |
pair eim
pre_commands: ! ""

View File

@ -1,7 +1,7 @@
---
lammps_version: 5 May 2020
date_generated: Wed May 27 16:13:46 202
epsilon: 2e-7
epsilon: 5e-6
prerequisites: ! |
pair airebo
pre_commands: ! |

View File

@ -1,7 +1,7 @@
---
lammps_version: 5 May 2020
date_generated: Thu May 28 20:29:01 202
epsilon: 1e-12
epsilon: 1e-11
prerequisites: ! |
pair polymorphic
pre_commands: ! |

View File

@ -1,7 +1,7 @@
---
lammps_version: 5 May 2020
date_generated: Wed May 27 10:27:56 202
epsilon: 1e-12
epsilon: 5e-11
prerequisites: ! |
pair tersoff/mod
pre_commands: ! |

View File

@ -1,7 +1,7 @@
---
lammps_version: 5 May 2020
date_generated: Wed May 27 10:28:17 202
epsilon: 5e-13
epsilon: 1e-12
prerequisites: ! |
pair tersoff/mod/c
pre_commands: ! |

View File

@ -1,7 +1,7 @@
---
lammps_version: 5 May 2020
date_generated: Wed May 27 12:29:41 202
epsilon: 5e-12
epsilon: 5e-11
prerequisites: ! |
pair tersoff/table
pre_commands: ! |

View File

@ -1,7 +1,7 @@
---
lammps_version: 5 May 2020
date_generated: Wed May 27 10:29:02 202
epsilon: 5e-12
epsilon: 5e-11
prerequisites: ! |
pair tersoff/zbl
pre_commands: ! |

View File

@ -1,7 +1,7 @@
---
lammps_version: 2 Jun 2020
date_generated: Sun Jun 14 14:42:09 202
epsilon: 2e-13
epsilon: 1e-12
prerequisites: ! |
atom full
pair coul/dsf

View File

@ -1,7 +1,7 @@
---
lammps_version: 5 May 2020
date_generated: Sat May 30 18:04:12 202
epsilon: 5e-13
epsilon: 5e-12
prerequisites: ! |
atom full
pair lj/class2/coul/cut

View File

@ -1,7 +1,7 @@
---
lammps_version: 5 May 2020
date_generated: Fri May 15 19:08:06 202
epsilon: 5.0e-13
epsilon: 5.0e-12
prerequisites: ! |
atom full
pair lj/class2/coul/long

View File

@ -1,7 +1,7 @@
---
lammps_version: 5 May 2020
date_generated: Fri May 15 19:08:06 202
epsilon: 5.0e-13
epsilon: 5.0e-12
prerequisites: ! |
atom full
pair lj/class2/coul/long

View File

@ -1,3 +1,8 @@
add_executable(test_atom_styles test_atom_styles.cpp)
target_link_libraries(test_atom_styles PRIVATE lammps GTest::GMock GTest::GTest)
add_test(NAME AtomStyles COMMAND test_atom_styles WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
add_executable(test_potential_file_reader test_potential_file_reader.cpp)
target_link_libraries(test_potential_file_reader PRIVATE lammps GTest::GMock GTest::GTest)
add_test(NAME PotentialFileReader COMMAND test_potential_file_reader WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})

View File

@ -0,0 +1,756 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
http://lammps.sandia.gov, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#include "atom.h"
#include "input.h"
#include "lammps.h"
#include "utils.h"
#include "gmock/gmock.h"
#include "gtest/gtest.h"
#include <cstdio>
#include <cstring>
#include <mpi.h>
#if !defined(_FORTIFY_SOURCE) || (_FORTIFY_SOURCE == 0)
#if defined(__INTEL_COMPILER)
#define _do_nothing
#elif defined(__GNUC__)
#if (__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 9))
#pragma GCC optimize("no-var-tracking-assignments", "O0")
#else
#pragma GCC optimize("no-var-tracking-assignments")
#endif
#else
#define _do_nothing
#endif
#endif
// whether to print verbose output (i.e. not capturing LAMMPS screen output).
bool verbose = false;
namespace LAMMPS_NS {
using ::testing::Eq;
class AtomStyleTest : public ::testing::Test {
protected:
LAMMPS *lmp;
void SetUp() override
{
const char *args[] = {"SimpleCommandsTest", "-log", "none", "-echo", "screen", "-nocite"};
char **argv = (char **)args;
int argc = sizeof(args) / sizeof(char *);
if (!verbose) ::testing::internal::CaptureStdout();
lmp = new LAMMPS(argc, argv, MPI_COMM_WORLD);
if (!verbose) ::testing::internal::GetCapturedStdout();
ASSERT_NE(lmp, nullptr);
if (!verbose) ::testing::internal::CaptureStdout();
lmp->input->one("units real");
lmp->input->one("dimension 3");
lmp->input->one("pair_style zero 4.0");
lmp->input->one("region box block -4 4 -4 4 -4 4");
if (!verbose) ::testing::internal::GetCapturedStdout();
}
void TearDown() override
{
if (!verbose) ::testing::internal::CaptureStdout();
delete lmp;
if (!verbose) ::testing::internal::GetCapturedStdout();
remove("test_atom_styles.data");
remove("test_atom_styles.restart");
}
};
TEST_F(AtomStyleTest, atomic)
{
ASSERT_THAT(std::string(lmp->atom->atom_style), Eq("atomic"));
ASSERT_NE(lmp->atom->avec, nullptr);
ASSERT_EQ(lmp->atom->natoms, 0);
ASSERT_EQ(lmp->atom->nlocal, 0);
ASSERT_EQ(lmp->atom->nghost, 0);
ASSERT_EQ(lmp->atom->nmax, 1);
ASSERT_EQ(lmp->atom->tag_enable, 1);
ASSERT_EQ(lmp->atom->molecular, 0);
ASSERT_EQ(lmp->atom->nellipsoids, 0);
ASSERT_EQ(lmp->atom->nlines, 0);
ASSERT_EQ(lmp->atom->ntris, 0);
ASSERT_EQ(lmp->atom->nbodies, 0);
ASSERT_EQ(lmp->atom->nbonds, 0);
ASSERT_EQ(lmp->atom->nangles, 0);
ASSERT_EQ(lmp->atom->ndihedrals, 0);
ASSERT_EQ(lmp->atom->nimpropers, 0);
ASSERT_EQ(lmp->atom->ntypes, 0);
ASSERT_EQ(lmp->atom->nbondtypes, 0);
ASSERT_EQ(lmp->atom->nangletypes, 0);
ASSERT_EQ(lmp->atom->ndihedraltypes, 0);
ASSERT_EQ(lmp->atom->nimpropertypes, 0);
ASSERT_EQ(lmp->atom->bond_per_atom, 0);
ASSERT_EQ(lmp->atom->angle_per_atom, 0);
ASSERT_EQ(lmp->atom->dihedral_per_atom, 0);
ASSERT_EQ(lmp->atom->improper_per_atom, 0);
ASSERT_EQ(lmp->atom->extra_bond_per_atom, 0);
ASSERT_EQ(lmp->atom->extra_angle_per_atom, 0);
ASSERT_EQ(lmp->atom->extra_dihedral_per_atom, 0);
ASSERT_EQ(lmp->atom->extra_improper_per_atom, 0);
ASSERT_EQ(lmp->atom->sphere_flag, 0);
ASSERT_EQ(lmp->atom->ellipsoid_flag, 0);
ASSERT_EQ(lmp->atom->line_flag, 0);
ASSERT_EQ(lmp->atom->tri_flag, 0);
ASSERT_EQ(lmp->atom->body_flag, 0);
ASSERT_EQ(lmp->atom->peri_flag, 0);
ASSERT_EQ(lmp->atom->electron_flag, 0);
ASSERT_EQ(lmp->atom->wavepacket_flag, 0);
ASSERT_EQ(lmp->atom->sph_flag, 0);
ASSERT_EQ(lmp->atom->molecule_flag, 0);
ASSERT_EQ(lmp->atom->molindex_flag, 0);
ASSERT_EQ(lmp->atom->molatom_flag, 0);
ASSERT_EQ(lmp->atom->q_flag, 0);
ASSERT_EQ(lmp->atom->mu_flag, 0);
ASSERT_EQ(lmp->atom->rmass_flag, 0);
ASSERT_EQ(lmp->atom->radius_flag, 0);
ASSERT_EQ(lmp->atom->omega_flag, 0);
ASSERT_EQ(lmp->atom->torque_flag, 0);
ASSERT_EQ(lmp->atom->angmom_flag, 0);
ASSERT_EQ(lmp->atom->vfrac_flag, 0);
ASSERT_EQ(lmp->atom->spin_flag, 0);
ASSERT_EQ(lmp->atom->eradius_flag, 0);
ASSERT_EQ(lmp->atom->ervel_flag, 0);
ASSERT_EQ(lmp->atom->erforce_flag, 0);
ASSERT_EQ(lmp->atom->cs_flag, 0);
ASSERT_EQ(lmp->atom->csforce_flag, 0);
ASSERT_EQ(lmp->atom->vforce_flag, 0);
ASSERT_EQ(lmp->atom->ervelforce_flag, 0);
ASSERT_EQ(lmp->atom->etag_flag, 0);
ASSERT_EQ(lmp->atom->rho_flag, 0);
ASSERT_EQ(lmp->atom->esph_flag, 0);
ASSERT_EQ(lmp->atom->cv_flag, 0);
ASSERT_EQ(lmp->atom->vest_flag, 0);
ASSERT_EQ(lmp->atom->dpd_flag, 0);
ASSERT_EQ(lmp->atom->edpd_flag, 0);
ASSERT_EQ(lmp->atom->tdpd_flag, 0);
ASSERT_EQ(lmp->atom->mesont_flag, 0);
ASSERT_EQ(lmp->atom->sp_flag, 0);
ASSERT_EQ(lmp->atom->x0_flag, 0);
ASSERT_EQ(lmp->atom->smd_flag, 0);
ASSERT_EQ(lmp->atom->damage_flag, 0);
ASSERT_EQ(lmp->atom->contact_radius_flag, 0);
ASSERT_EQ(lmp->atom->smd_data_9_flag, 0);
ASSERT_EQ(lmp->atom->smd_stress_flag, 0);
ASSERT_EQ(lmp->atom->eff_plastic_strain_flag, 0);
ASSERT_EQ(lmp->atom->eff_plastic_strain_rate_flag, 0);
ASSERT_EQ(lmp->atom->pdscale, 1.0);
ASSERT_NE(lmp->atom->tag, nullptr);
ASSERT_NE(lmp->atom->type, nullptr);
ASSERT_NE(lmp->atom->mask, nullptr);
ASSERT_NE(lmp->atom->image, nullptr);
ASSERT_NE(lmp->atom->x, nullptr);
ASSERT_NE(lmp->atom->v, nullptr);
ASSERT_NE(lmp->atom->f, nullptr);
ASSERT_EQ(lmp->atom->q, nullptr);
ASSERT_EQ(lmp->atom->mu, nullptr);
ASSERT_EQ(lmp->atom->omega, nullptr);
ASSERT_EQ(lmp->atom->angmom, nullptr);
ASSERT_EQ(lmp->atom->torque, nullptr);
ASSERT_EQ(lmp->atom->radius, nullptr);
ASSERT_EQ(lmp->atom->rmass, nullptr);
ASSERT_EQ(lmp->atom->ellipsoid, nullptr);
ASSERT_EQ(lmp->atom->line, nullptr);
ASSERT_EQ(lmp->atom->tri, nullptr);
ASSERT_EQ(lmp->atom->body, nullptr);
ASSERT_EQ(lmp->atom->molecule, nullptr);
ASSERT_EQ(lmp->atom->molindex, nullptr);
ASSERT_EQ(lmp->atom->molatom, nullptr);
ASSERT_EQ(lmp->atom->num_bond, nullptr);
ASSERT_EQ(lmp->atom->bond_type, nullptr);
ASSERT_EQ(lmp->atom->bond_atom, nullptr);
ASSERT_EQ(lmp->atom->num_angle, nullptr);
ASSERT_EQ(lmp->atom->angle_type, nullptr);
ASSERT_EQ(lmp->atom->angle_atom1, nullptr);
ASSERT_EQ(lmp->atom->angle_atom2, nullptr);
ASSERT_EQ(lmp->atom->angle_atom3, nullptr);
ASSERT_EQ(lmp->atom->num_dihedral, nullptr);
ASSERT_EQ(lmp->atom->dihedral_type, nullptr);
ASSERT_EQ(lmp->atom->dihedral_atom1, nullptr);
ASSERT_EQ(lmp->atom->dihedral_atom2, nullptr);
ASSERT_EQ(lmp->atom->dihedral_atom3, nullptr);
ASSERT_EQ(lmp->atom->dihedral_atom4, nullptr);
ASSERT_EQ(lmp->atom->num_improper, nullptr);
ASSERT_EQ(lmp->atom->improper_type, nullptr);
ASSERT_EQ(lmp->atom->improper_atom1, nullptr);
ASSERT_EQ(lmp->atom->improper_atom2, nullptr);
ASSERT_EQ(lmp->atom->improper_atom3, nullptr);
ASSERT_EQ(lmp->atom->improper_atom4, nullptr);
ASSERT_EQ(lmp->atom->maxspecial, 1);
ASSERT_EQ(lmp->atom->nspecial, nullptr);
ASSERT_EQ(lmp->atom->special, nullptr);
ASSERT_EQ(lmp->atom->vfrac, nullptr);
ASSERT_EQ(lmp->atom->s0, nullptr);
ASSERT_EQ(lmp->atom->x0, nullptr);
ASSERT_EQ(lmp->atom->sp, nullptr);
ASSERT_EQ(lmp->atom->fm, nullptr);
ASSERT_EQ(lmp->atom->fm_long, nullptr);
ASSERT_EQ(lmp->atom->spin, nullptr);
ASSERT_EQ(lmp->atom->eradius, nullptr);
ASSERT_EQ(lmp->atom->ervel, nullptr);
ASSERT_EQ(lmp->atom->erforce, nullptr);
ASSERT_EQ(lmp->atom->ervelforce, nullptr);
ASSERT_EQ(lmp->atom->cs, nullptr);
ASSERT_EQ(lmp->atom->csforce, nullptr);
ASSERT_EQ(lmp->atom->vforce, nullptr);
ASSERT_EQ(lmp->atom->etag, nullptr);
ASSERT_EQ(lmp->atom->uCond, nullptr);
ASSERT_EQ(lmp->atom->uMech, nullptr);
ASSERT_EQ(lmp->atom->uChem, nullptr);
ASSERT_EQ(lmp->atom->uCG, nullptr);
ASSERT_EQ(lmp->atom->uCGnew, nullptr);
ASSERT_EQ(lmp->atom->duChem, nullptr);
ASSERT_EQ(lmp->atom->dpdTheta, nullptr);
ASSERT_EQ(lmp->atom->cc, nullptr);
ASSERT_EQ(lmp->atom->cc_flux, nullptr);
ASSERT_EQ(lmp->atom->edpd_temp, nullptr);
ASSERT_EQ(lmp->atom->edpd_flux, nullptr);
ASSERT_EQ(lmp->atom->edpd_cv, nullptr);
ASSERT_EQ(lmp->atom->length, nullptr);
ASSERT_EQ(lmp->atom->buckling, nullptr);
ASSERT_EQ(lmp->atom->bond_nt, nullptr);
ASSERT_EQ(lmp->atom->contact_radius, nullptr);
ASSERT_EQ(lmp->atom->smd_data_9, nullptr);
ASSERT_EQ(lmp->atom->smd_stress, nullptr);
ASSERT_EQ(lmp->atom->eff_plastic_strain, nullptr);
ASSERT_EQ(lmp->atom->eff_plastic_strain_rate, nullptr);
ASSERT_EQ(lmp->atom->damage, nullptr);
ASSERT_EQ(lmp->atom->rho, nullptr);
ASSERT_EQ(lmp->atom->drho, nullptr);
ASSERT_EQ(lmp->atom->esph, nullptr);
ASSERT_EQ(lmp->atom->desph, nullptr);
ASSERT_EQ(lmp->atom->cv, nullptr);
ASSERT_EQ(lmp->atom->vest, nullptr);
ASSERT_EQ(lmp->atom->nmolecule, 0);
ASSERT_EQ(lmp->atom->molecules, nullptr);
ASSERT_EQ(lmp->atom->nivector, 0);
ASSERT_EQ(lmp->atom->ndvector, 0);
ASSERT_EQ(lmp->atom->iname, nullptr);
ASSERT_EQ(lmp->atom->dname, nullptr);
ASSERT_EQ(lmp->atom->mass, nullptr);
ASSERT_EQ(lmp->atom->mass_setflag, nullptr);
ASSERT_EQ(lmp->atom->nextra_grow, 0);
ASSERT_EQ(lmp->atom->nextra_restart, 0);
ASSERT_EQ(lmp->atom->nextra_border, 0);
ASSERT_EQ(lmp->atom->nextra_grow_max, 0);
ASSERT_EQ(lmp->atom->nextra_restart_max, 0);
ASSERT_EQ(lmp->atom->nextra_border_max, 0);
ASSERT_EQ(lmp->atom->nextra_store, 0);
ASSERT_EQ(lmp->atom->extra_grow, nullptr);
ASSERT_EQ(lmp->atom->extra_restart, nullptr);
ASSERT_EQ(lmp->atom->extra_border, nullptr);
ASSERT_EQ(lmp->atom->extra, nullptr);
ASSERT_EQ(lmp->atom->sametag, nullptr);
ASSERT_EQ(lmp->atom->map_style, 0);
ASSERT_EQ(lmp->atom->map_user, 0);
ASSERT_EQ(lmp->atom->map_tag_max, -1);
if (!verbose) ::testing::internal::CaptureStdout();
lmp->input->one("atom_style charge");
lmp->input->one("atom_style atomic");
if (!verbose) ::testing::internal::GetCapturedStdout();
ASSERT_THAT(std::string(lmp->atom->atom_style), Eq("atomic"));
ASSERT_NE(lmp->atom->avec, nullptr);
ASSERT_EQ(lmp->atom->natoms, 0);
ASSERT_EQ(lmp->atom->nlocal, 0);
ASSERT_EQ(lmp->atom->nghost, 0);
ASSERT_EQ(lmp->atom->nmax, 1);
ASSERT_EQ(lmp->atom->tag_enable, 1);
ASSERT_EQ(lmp->atom->molecular, 0);
ASSERT_EQ(lmp->atom->ntypes, 0);
ASSERT_EQ(lmp->atom->molecule_flag, 0);
ASSERT_EQ(lmp->atom->molindex_flag, 0);
ASSERT_EQ(lmp->atom->molatom_flag, 0);
ASSERT_EQ(lmp->atom->q_flag, 0);
ASSERT_EQ(lmp->atom->q, nullptr);
if (!verbose) ::testing::internal::CaptureStdout();
lmp->input->one("atom_modify map hash");
lmp->input->one("create_box 2 box");
lmp->input->one("create_atoms 1 single -2.0 2.0 0.1");
lmp->input->one("create_atoms 1 single -2.0 -2.0 -0.1");
lmp->input->one("create_atoms 2 single 2.0 2.0 -0.1");
lmp->input->one("create_atoms 2 single 2.0 -2.0 0.1");
lmp->input->one("mass 1 4.0");
lmp->input->one("mass 2 2.4");
lmp->input->one("pair_coeff * *");
if (!verbose) ::testing::internal::GetCapturedStdout();
ASSERT_THAT(std::string(lmp->atom->atom_style), Eq("atomic"));
ASSERT_NE(lmp->atom->avec, nullptr);
ASSERT_EQ(lmp->atom->natoms, 4);
ASSERT_EQ(lmp->atom->nlocal, 4);
ASSERT_EQ(lmp->atom->nghost, 0);
ASSERT_NE(lmp->atom->nmax, -1);
ASSERT_EQ(lmp->atom->tag_enable, 1);
ASSERT_EQ(lmp->atom->molecular, 0);
ASSERT_EQ(lmp->atom->ntypes, 2);
ASSERT_NE(lmp->atom->mass, nullptr);
ASSERT_NE(lmp->atom->mass_setflag, nullptr);
ASSERT_NE(lmp->atom->sametag, nullptr);
ASSERT_EQ(lmp->atom->map_style, 2);
ASSERT_EQ(lmp->atom->map_user, 2);
ASSERT_EQ(lmp->atom->map_tag_max, 4);
if (!verbose) ::testing::internal::CaptureStdout();
lmp->input->one("pair_coeff * *");
lmp->input->one("write_data test_atom_styles.data nocoeff");
lmp->input->one("clear");
lmp->input->one("atom_style atomic");
lmp->input->one("pair_style zero 4.0");
lmp->input->one("atom_modify map array");
lmp->input->one("units real");
lmp->input->one("read_data test_atom_styles.data");
if (!verbose) ::testing::internal::GetCapturedStdout();
ASSERT_THAT(std::string(lmp->atom->atom_style), Eq("atomic"));
ASSERT_NE(lmp->atom->avec, nullptr);
ASSERT_EQ(lmp->atom->natoms, 4);
ASSERT_EQ(lmp->atom->nlocal, 4);
ASSERT_EQ(lmp->atom->nghost, 0);
ASSERT_NE(lmp->atom->nmax, -1);
ASSERT_EQ(lmp->atom->tag_enable, 1);
ASSERT_EQ(lmp->atom->molecular, 0);
ASSERT_EQ(lmp->atom->ntypes, 2);
double **x = lmp->atom->x;
double **v = lmp->atom->v;
ASSERT_DOUBLE_EQ(x[0][0], -2.0);
ASSERT_DOUBLE_EQ(x[0][1], 2.0);
ASSERT_DOUBLE_EQ(x[0][2], 0.1);
ASSERT_DOUBLE_EQ(x[1][0], -2.0);
ASSERT_DOUBLE_EQ(x[1][1], -2.0);
ASSERT_DOUBLE_EQ(x[1][2], -0.1);
ASSERT_DOUBLE_EQ(x[2][0], 2.0);
ASSERT_DOUBLE_EQ(x[2][1], 2.0);
ASSERT_DOUBLE_EQ(x[2][2], -0.1);
ASSERT_DOUBLE_EQ(x[3][0], 2.0);
ASSERT_DOUBLE_EQ(x[3][1], -2.0);
ASSERT_DOUBLE_EQ(x[3][2], 0.1);
ASSERT_DOUBLE_EQ(v[0][0], 0.0);
ASSERT_DOUBLE_EQ(v[0][1], 0.0);
ASSERT_DOUBLE_EQ(v[0][2], 0.0);
ASSERT_DOUBLE_EQ(v[1][0], 0.0);
ASSERT_DOUBLE_EQ(v[1][1], 0.0);
ASSERT_DOUBLE_EQ(v[1][2], 0.0);
ASSERT_DOUBLE_EQ(v[2][0], 0.0);
ASSERT_DOUBLE_EQ(v[2][1], 0.0);
ASSERT_DOUBLE_EQ(v[2][2], 0.0);
ASSERT_DOUBLE_EQ(v[3][0], 0.0);
ASSERT_DOUBLE_EQ(v[3][1], 0.0);
ASSERT_DOUBLE_EQ(v[3][2], 0.0);
ASSERT_DOUBLE_EQ(lmp->atom->mass[1], 4.0);
ASSERT_DOUBLE_EQ(lmp->atom->mass[2], 2.4);
ASSERT_EQ(lmp->atom->mass_setflag[1], 1);
ASSERT_EQ(lmp->atom->mass_setflag[2], 1);
ASSERT_EQ(lmp->atom->map_style, 1);
ASSERT_EQ(lmp->atom->map_user, 1);
ASSERT_EQ(lmp->atom->map_tag_max, 4);
ASSERT_EQ(lmp->atom->tag_consecutive(), 1);
if (!verbose) ::testing::internal::CaptureStdout();
lmp->input->one("pair_coeff * *");
lmp->input->one("group two id 2:4:2");
lmp->input->one("delete_atoms group two compress no");
lmp->input->one("write_restart test_atom_styles.restart");
lmp->input->one("clear");
lmp->input->one("read_restart test_atom_styles.restart");
if (!verbose) ::testing::internal::GetCapturedStdout();
ASSERT_THAT(std::string(lmp->atom->atom_style), Eq("atomic"));
ASSERT_NE(lmp->atom->avec, nullptr);
ASSERT_EQ(lmp->atom->natoms, 2);
ASSERT_EQ(lmp->atom->nlocal, 2);
ASSERT_EQ(lmp->atom->nghost, 0);
ASSERT_NE(lmp->atom->nmax, -1);
ASSERT_EQ(lmp->atom->tag_enable, 1);
ASSERT_EQ(lmp->atom->molecular, 0);
ASSERT_EQ(lmp->atom->ntypes, 2);
ASSERT_EQ(lmp->atom->tag_consecutive(), 0);
x = lmp->atom->x;
v = lmp->atom->v;
ASSERT_DOUBLE_EQ(x[0][0], -2.0);
ASSERT_DOUBLE_EQ(x[0][1], 2.0);
ASSERT_DOUBLE_EQ(x[0][2], 0.1);
ASSERT_DOUBLE_EQ(x[1][0], 2.0);
ASSERT_DOUBLE_EQ(x[1][1], 2.0);
ASSERT_DOUBLE_EQ(x[1][2], -0.1);
ASSERT_DOUBLE_EQ(v[0][0], 0.0);
ASSERT_DOUBLE_EQ(v[0][1], 0.0);
ASSERT_DOUBLE_EQ(v[0][2], 0.0);
ASSERT_DOUBLE_EQ(v[1][0], 0.0);
ASSERT_DOUBLE_EQ(v[1][1], 0.0);
ASSERT_DOUBLE_EQ(v[1][2], 0.0);
ASSERT_DOUBLE_EQ(lmp->atom->mass[1], 4.0);
ASSERT_DOUBLE_EQ(lmp->atom->mass[2], 2.4);
ASSERT_EQ(lmp->atom->mass_setflag[1], 1);
ASSERT_EQ(lmp->atom->mass_setflag[2], 1);
ASSERT_EQ(lmp->atom->map_style, 1);
ASSERT_EQ(lmp->atom->map_user, 1);
ASSERT_EQ(lmp->atom->map_tag_max, 3);
if (!verbose) ::testing::internal::CaptureStdout();
lmp->input->one("reset_ids");
if (!verbose) ::testing::internal::GetCapturedStdout();
ASSERT_EQ(lmp->atom->map_tag_max, 2);
ASSERT_EQ(lmp->atom->tag_consecutive(), 1);
}
TEST_F(AtomStyleTest, charge)
{
if (!verbose) ::testing::internal::CaptureStdout();
lmp->input->one("atom_style charge");
if (!verbose) ::testing::internal::GetCapturedStdout();
ASSERT_THAT(std::string(lmp->atom->atom_style), Eq("charge"));
ASSERT_NE(lmp->atom->avec, nullptr);
ASSERT_EQ(lmp->atom->natoms, 0);
ASSERT_EQ(lmp->atom->nlocal, 0);
ASSERT_EQ(lmp->atom->nghost, 0);
ASSERT_EQ(lmp->atom->nmax, 1);
ASSERT_EQ(lmp->atom->tag_enable, 1);
ASSERT_EQ(lmp->atom->molecular, 0);
ASSERT_EQ(lmp->atom->nellipsoids, 0);
ASSERT_EQ(lmp->atom->nlines, 0);
ASSERT_EQ(lmp->atom->ntris, 0);
ASSERT_EQ(lmp->atom->nbodies, 0);
ASSERT_EQ(lmp->atom->nbonds, 0);
ASSERT_EQ(lmp->atom->nangles, 0);
ASSERT_EQ(lmp->atom->ndihedrals, 0);
ASSERT_EQ(lmp->atom->nimpropers, 0);
ASSERT_EQ(lmp->atom->ntypes, 0);
ASSERT_EQ(lmp->atom->nbondtypes, 0);
ASSERT_EQ(lmp->atom->nangletypes, 0);
ASSERT_EQ(lmp->atom->ndihedraltypes, 0);
ASSERT_EQ(lmp->atom->nimpropertypes, 0);
ASSERT_EQ(lmp->atom->bond_per_atom, 0);
ASSERT_EQ(lmp->atom->angle_per_atom, 0);
ASSERT_EQ(lmp->atom->dihedral_per_atom, 0);
ASSERT_EQ(lmp->atom->improper_per_atom, 0);
ASSERT_EQ(lmp->atom->extra_bond_per_atom, 0);
ASSERT_EQ(lmp->atom->extra_angle_per_atom, 0);
ASSERT_EQ(lmp->atom->extra_dihedral_per_atom, 0);
ASSERT_EQ(lmp->atom->extra_improper_per_atom, 0);
ASSERT_EQ(lmp->atom->sphere_flag, 0);
ASSERT_EQ(lmp->atom->ellipsoid_flag, 0);
ASSERT_EQ(lmp->atom->line_flag, 0);
ASSERT_EQ(lmp->atom->tri_flag, 0);
ASSERT_EQ(lmp->atom->body_flag, 0);
ASSERT_EQ(lmp->atom->peri_flag, 0);
ASSERT_EQ(lmp->atom->electron_flag, 0);
ASSERT_EQ(lmp->atom->wavepacket_flag, 0);
ASSERT_EQ(lmp->atom->sph_flag, 0);
ASSERT_EQ(lmp->atom->molecule_flag, 0);
ASSERT_EQ(lmp->atom->molindex_flag, 0);
ASSERT_EQ(lmp->atom->molatom_flag, 0);
ASSERT_EQ(lmp->atom->q_flag, 1);
ASSERT_EQ(lmp->atom->mu_flag, 0);
ASSERT_EQ(lmp->atom->rmass_flag, 0);
ASSERT_EQ(lmp->atom->radius_flag, 0);
ASSERT_EQ(lmp->atom->omega_flag, 0);
ASSERT_EQ(lmp->atom->torque_flag, 0);
ASSERT_EQ(lmp->atom->angmom_flag, 0);
ASSERT_EQ(lmp->atom->vfrac_flag, 0);
ASSERT_EQ(lmp->atom->spin_flag, 0);
ASSERT_EQ(lmp->atom->eradius_flag, 0);
ASSERT_EQ(lmp->atom->ervel_flag, 0);
ASSERT_EQ(lmp->atom->erforce_flag, 0);
ASSERT_EQ(lmp->atom->cs_flag, 0);
ASSERT_EQ(lmp->atom->csforce_flag, 0);
ASSERT_EQ(lmp->atom->vforce_flag, 0);
ASSERT_EQ(lmp->atom->ervelforce_flag, 0);
ASSERT_EQ(lmp->atom->etag_flag, 0);
ASSERT_EQ(lmp->atom->rho_flag, 0);
ASSERT_EQ(lmp->atom->esph_flag, 0);
ASSERT_EQ(lmp->atom->cv_flag, 0);
ASSERT_EQ(lmp->atom->vest_flag, 0);
ASSERT_EQ(lmp->atom->dpd_flag, 0);
ASSERT_EQ(lmp->atom->edpd_flag, 0);
ASSERT_EQ(lmp->atom->tdpd_flag, 0);
ASSERT_EQ(lmp->atom->mesont_flag, 0);
ASSERT_EQ(lmp->atom->sp_flag, 0);
ASSERT_EQ(lmp->atom->x0_flag, 0);
ASSERT_EQ(lmp->atom->smd_flag, 0);
ASSERT_EQ(lmp->atom->damage_flag, 0);
ASSERT_EQ(lmp->atom->contact_radius_flag, 0);
ASSERT_EQ(lmp->atom->smd_data_9_flag, 0);
ASSERT_EQ(lmp->atom->smd_stress_flag, 0);
ASSERT_EQ(lmp->atom->eff_plastic_strain_flag, 0);
ASSERT_EQ(lmp->atom->eff_plastic_strain_rate_flag, 0);
ASSERT_EQ(lmp->atom->pdscale, 1.0);
ASSERT_NE(lmp->atom->tag, nullptr);
ASSERT_NE(lmp->atom->type, nullptr);
ASSERT_NE(lmp->atom->mask, nullptr);
ASSERT_NE(lmp->atom->image, nullptr);
ASSERT_NE(lmp->atom->x, nullptr);
ASSERT_NE(lmp->atom->v, nullptr);
ASSERT_NE(lmp->atom->f, nullptr);
ASSERT_NE(lmp->atom->q, nullptr);
ASSERT_EQ(lmp->atom->mu, nullptr);
ASSERT_EQ(lmp->atom->omega, nullptr);
ASSERT_EQ(lmp->atom->angmom, nullptr);
ASSERT_EQ(lmp->atom->torque, nullptr);
ASSERT_EQ(lmp->atom->radius, nullptr);
ASSERT_EQ(lmp->atom->rmass, nullptr);
ASSERT_EQ(lmp->atom->ellipsoid, nullptr);
ASSERT_EQ(lmp->atom->line, nullptr);
ASSERT_EQ(lmp->atom->tri, nullptr);
ASSERT_EQ(lmp->atom->body, nullptr);
ASSERT_EQ(lmp->atom->molecule, nullptr);
ASSERT_EQ(lmp->atom->molindex, nullptr);
ASSERT_EQ(lmp->atom->molatom, nullptr);
ASSERT_EQ(lmp->atom->num_bond, nullptr);
ASSERT_EQ(lmp->atom->bond_type, nullptr);
ASSERT_EQ(lmp->atom->bond_atom, nullptr);
ASSERT_EQ(lmp->atom->num_angle, nullptr);
ASSERT_EQ(lmp->atom->angle_type, nullptr);
ASSERT_EQ(lmp->atom->angle_atom1, nullptr);
ASSERT_EQ(lmp->atom->angle_atom2, nullptr);
ASSERT_EQ(lmp->atom->angle_atom3, nullptr);
ASSERT_EQ(lmp->atom->num_dihedral, nullptr);
ASSERT_EQ(lmp->atom->dihedral_type, nullptr);
ASSERT_EQ(lmp->atom->dihedral_atom1, nullptr);
ASSERT_EQ(lmp->atom->dihedral_atom2, nullptr);
ASSERT_EQ(lmp->atom->dihedral_atom3, nullptr);
ASSERT_EQ(lmp->atom->dihedral_atom4, nullptr);
ASSERT_EQ(lmp->atom->num_improper, nullptr);
ASSERT_EQ(lmp->atom->improper_type, nullptr);
ASSERT_EQ(lmp->atom->improper_atom1, nullptr);
ASSERT_EQ(lmp->atom->improper_atom2, nullptr);
ASSERT_EQ(lmp->atom->improper_atom3, nullptr);
ASSERT_EQ(lmp->atom->improper_atom4, nullptr);
ASSERT_EQ(lmp->atom->maxspecial, 1);
ASSERT_EQ(lmp->atom->nspecial, nullptr);
ASSERT_EQ(lmp->atom->special, nullptr);
ASSERT_EQ(lmp->atom->vfrac, nullptr);
ASSERT_EQ(lmp->atom->s0, nullptr);
ASSERT_EQ(lmp->atom->x0, nullptr);
ASSERT_EQ(lmp->atom->sp, nullptr);
ASSERT_EQ(lmp->atom->fm, nullptr);
ASSERT_EQ(lmp->atom->fm_long, nullptr);
ASSERT_EQ(lmp->atom->spin, nullptr);
ASSERT_EQ(lmp->atom->eradius, nullptr);
ASSERT_EQ(lmp->atom->ervel, nullptr);
ASSERT_EQ(lmp->atom->erforce, nullptr);
ASSERT_EQ(lmp->atom->ervelforce, nullptr);
ASSERT_EQ(lmp->atom->cs, nullptr);
ASSERT_EQ(lmp->atom->csforce, nullptr);
ASSERT_EQ(lmp->atom->vforce, nullptr);
ASSERT_EQ(lmp->atom->etag, nullptr);
ASSERT_EQ(lmp->atom->uCond, nullptr);
ASSERT_EQ(lmp->atom->uMech, nullptr);
ASSERT_EQ(lmp->atom->uChem, nullptr);
ASSERT_EQ(lmp->atom->uCG, nullptr);
ASSERT_EQ(lmp->atom->uCGnew, nullptr);
ASSERT_EQ(lmp->atom->duChem, nullptr);
ASSERT_EQ(lmp->atom->dpdTheta, nullptr);
ASSERT_EQ(lmp->atom->cc, nullptr);
ASSERT_EQ(lmp->atom->cc_flux, nullptr);
ASSERT_EQ(lmp->atom->edpd_temp, nullptr);
ASSERT_EQ(lmp->atom->edpd_flux, nullptr);
ASSERT_EQ(lmp->atom->edpd_cv, nullptr);
ASSERT_EQ(lmp->atom->length, nullptr);
ASSERT_EQ(lmp->atom->buckling, nullptr);
ASSERT_EQ(lmp->atom->bond_nt, nullptr);
ASSERT_EQ(lmp->atom->contact_radius, nullptr);
ASSERT_EQ(lmp->atom->smd_data_9, nullptr);
ASSERT_EQ(lmp->atom->smd_stress, nullptr);
ASSERT_EQ(lmp->atom->eff_plastic_strain, nullptr);
ASSERT_EQ(lmp->atom->eff_plastic_strain_rate, nullptr);
ASSERT_EQ(lmp->atom->damage, nullptr);
ASSERT_EQ(lmp->atom->rho, nullptr);
ASSERT_EQ(lmp->atom->drho, nullptr);
ASSERT_EQ(lmp->atom->esph, nullptr);
ASSERT_EQ(lmp->atom->desph, nullptr);
ASSERT_EQ(lmp->atom->cv, nullptr);
ASSERT_EQ(lmp->atom->vest, nullptr);
ASSERT_EQ(lmp->atom->nmolecule, 0);
ASSERT_EQ(lmp->atom->molecules, nullptr);
ASSERT_EQ(lmp->atom->nivector, 0);
ASSERT_EQ(lmp->atom->ndvector, 0);
ASSERT_EQ(lmp->atom->iname, nullptr);
ASSERT_EQ(lmp->atom->dname, nullptr);
ASSERT_EQ(lmp->atom->mass, nullptr);
ASSERT_EQ(lmp->atom->mass_setflag, nullptr);
ASSERT_EQ(lmp->atom->nextra_grow, 0);
ASSERT_EQ(lmp->atom->nextra_restart, 0);
ASSERT_EQ(lmp->atom->nextra_border, 0);
ASSERT_EQ(lmp->atom->nextra_grow_max, 0);
ASSERT_EQ(lmp->atom->nextra_restart_max, 0);
ASSERT_EQ(lmp->atom->nextra_border_max, 0);
ASSERT_EQ(lmp->atom->nextra_store, 0);
ASSERT_EQ(lmp->atom->extra_grow, nullptr);
ASSERT_EQ(lmp->atom->extra_restart, nullptr);
ASSERT_EQ(lmp->atom->extra_border, nullptr);
ASSERT_EQ(lmp->atom->extra, nullptr);
ASSERT_EQ(lmp->atom->sametag, nullptr);
ASSERT_EQ(lmp->atom->map_style, 0);
ASSERT_EQ(lmp->atom->map_user, 0);
ASSERT_EQ(lmp->atom->map_tag_max, -1);
if (!verbose) ::testing::internal::CaptureStdout();
lmp->input->one("create_box 2 box");
lmp->input->one("create_atoms 1 single -2.0 2.0 0.1");
lmp->input->one("create_atoms 1 single -2.0 -2.0 -0.1");
lmp->input->one("create_atoms 2 single 2.0 2.0 -0.1");
lmp->input->one("create_atoms 2 single 2.0 -2.0 0.1");
lmp->input->one("mass 1 4.0");
lmp->input->one("mass 2 2.4");
lmp->input->one("set atom 1 charge -0.5");
lmp->input->one("set atom 2 charge 0.5");
lmp->input->one("set atom 3 charge -1.0");
lmp->input->one("set atom 4 charge 1.0");
lmp->input->one("pair_coeff * *");
if (!verbose) ::testing::internal::GetCapturedStdout();
ASSERT_THAT(std::string(lmp->atom->atom_style), Eq("charge"));
ASSERT_NE(lmp->atom->avec, nullptr);
ASSERT_EQ(lmp->atom->natoms, 4);
ASSERT_EQ(lmp->atom->nlocal, 4);
ASSERT_EQ(lmp->atom->nghost, 0);
ASSERT_NE(lmp->atom->nmax, -1);
ASSERT_EQ(lmp->atom->tag_enable, 1);
ASSERT_EQ(lmp->atom->molecular, 0);
ASSERT_EQ(lmp->atom->ntypes, 2);
ASSERT_NE(lmp->atom->mass, nullptr);
ASSERT_NE(lmp->atom->mass_setflag, nullptr);
if (!verbose) ::testing::internal::CaptureStdout();
lmp->input->one("pair_coeff * *");
lmp->input->one("write_data test_atom_styles.data nocoeff");
lmp->input->one("clear");
lmp->input->one("atom_style charge");
lmp->input->one("pair_style zero 4.0");
lmp->input->one("units real");
lmp->input->one("atom_modify map array");
lmp->input->one("read_data test_atom_styles.data");
if (!verbose) ::testing::internal::GetCapturedStdout();
ASSERT_THAT(std::string(lmp->atom->atom_style), Eq("charge"));
ASSERT_NE(lmp->atom->avec, nullptr);
ASSERT_EQ(lmp->atom->natoms, 4);
ASSERT_EQ(lmp->atom->nlocal, 4);
ASSERT_EQ(lmp->atom->nghost, 0);
ASSERT_NE(lmp->atom->nmax, -1);
ASSERT_EQ(lmp->atom->tag_enable, 1);
ASSERT_EQ(lmp->atom->molecular, 0);
ASSERT_EQ(lmp->atom->ntypes, 2);
ASSERT_EQ(lmp->atom->q_flag, 1);
ASSERT_NE(lmp->atom->sametag, nullptr);
ASSERT_EQ(lmp->atom->tag_consecutive(), 1);
ASSERT_EQ(lmp->atom->map_style, 1);
ASSERT_EQ(lmp->atom->map_user, 1);
ASSERT_EQ(lmp->atom->map_tag_max, 4);
double **x = lmp->atom->x;
double **v = lmp->atom->v;
double *q = lmp->atom->q;
ASSERT_DOUBLE_EQ(x[0][0], -2.0);
ASSERT_DOUBLE_EQ(x[0][1], 2.0);
ASSERT_DOUBLE_EQ(x[0][2], 0.1);
ASSERT_DOUBLE_EQ(x[1][0], -2.0);
ASSERT_DOUBLE_EQ(x[1][1], -2.0);
ASSERT_DOUBLE_EQ(x[1][2], -0.1);
ASSERT_DOUBLE_EQ(x[2][0], 2.0);
ASSERT_DOUBLE_EQ(x[2][1], 2.0);
ASSERT_DOUBLE_EQ(x[2][2], -0.1);
ASSERT_DOUBLE_EQ(x[3][0], 2.0);
ASSERT_DOUBLE_EQ(x[3][1], -2.0);
ASSERT_DOUBLE_EQ(x[3][2], 0.1);
ASSERT_DOUBLE_EQ(v[0][0], 0.0);
ASSERT_DOUBLE_EQ(v[0][1], 0.0);
ASSERT_DOUBLE_EQ(v[0][2], 0.0);
ASSERT_DOUBLE_EQ(v[1][0], 0.0);
ASSERT_DOUBLE_EQ(v[1][1], 0.0);
ASSERT_DOUBLE_EQ(v[1][2], 0.0);
ASSERT_DOUBLE_EQ(v[2][0], 0.0);
ASSERT_DOUBLE_EQ(v[2][1], 0.0);
ASSERT_DOUBLE_EQ(v[2][2], 0.0);
ASSERT_DOUBLE_EQ(v[3][0], 0.0);
ASSERT_DOUBLE_EQ(v[3][1], 0.0);
ASSERT_DOUBLE_EQ(v[3][2], 0.0);
ASSERT_DOUBLE_EQ(q[0], -0.5);
ASSERT_DOUBLE_EQ(q[1], 0.5);
ASSERT_DOUBLE_EQ(q[2], -1.0);
ASSERT_DOUBLE_EQ(q[3], 1.0);
ASSERT_DOUBLE_EQ(lmp->atom->mass[1], 4.0);
ASSERT_DOUBLE_EQ(lmp->atom->mass[2], 2.4);
ASSERT_EQ(lmp->atom->mass_setflag[1], 1);
ASSERT_EQ(lmp->atom->mass_setflag[2], 1);
if (!verbose) ::testing::internal::CaptureStdout();
lmp->input->one("pair_coeff * *");
lmp->input->one("group two id 2:4:2");
lmp->input->one("delete_atoms group two compress no");
lmp->input->one("write_restart test_atom_styles.restart");
lmp->input->one("clear");
lmp->input->one("read_restart test_atom_styles.restart");
if (!verbose) ::testing::internal::GetCapturedStdout();
ASSERT_THAT(std::string(lmp->atom->atom_style), Eq("charge"));
ASSERT_NE(lmp->atom->avec, nullptr);
ASSERT_EQ(lmp->atom->natoms, 2);
ASSERT_EQ(lmp->atom->nlocal, 2);
ASSERT_EQ(lmp->atom->nghost, 0);
ASSERT_NE(lmp->atom->nmax, -1);
ASSERT_EQ(lmp->atom->tag_enable, 1);
ASSERT_EQ(lmp->atom->molecular, 0);
ASSERT_EQ(lmp->atom->ntypes, 2);
ASSERT_EQ(lmp->atom->tag_consecutive(), 0);
ASSERT_EQ(lmp->atom->map_tag_max, 3);
x = lmp->atom->x;
v = lmp->atom->v;
q = lmp->atom->q;
ASSERT_DOUBLE_EQ(x[0][0], -2.0);
ASSERT_DOUBLE_EQ(x[0][1], 2.0);
ASSERT_DOUBLE_EQ(x[0][2], 0.1);
ASSERT_DOUBLE_EQ(x[1][0], 2.0);
ASSERT_DOUBLE_EQ(x[1][1], 2.0);
ASSERT_DOUBLE_EQ(x[1][2], -0.1);
ASSERT_DOUBLE_EQ(v[0][0], 0.0);
ASSERT_DOUBLE_EQ(v[0][1], 0.0);
ASSERT_DOUBLE_EQ(v[0][2], 0.0);
ASSERT_DOUBLE_EQ(v[1][0], 0.0);
ASSERT_DOUBLE_EQ(v[1][1], 0.0);
ASSERT_DOUBLE_EQ(v[1][2], 0.0);
ASSERT_DOUBLE_EQ(q[0], -0.5);
ASSERT_DOUBLE_EQ(q[1], -1.0);
ASSERT_DOUBLE_EQ(lmp->atom->mass[1], 4.0);
ASSERT_DOUBLE_EQ(lmp->atom->mass[2], 2.4);
ASSERT_EQ(lmp->atom->mass_setflag[1], 1);
ASSERT_EQ(lmp->atom->mass_setflag[2], 1);
}
} // namespace LAMMPS_NS
int main(int argc, char **argv)
{
MPI_Init(&argc, &argv);
::testing::InitGoogleMock(&argc, argv);
if ((argc > 1) && (strcmp(argv[1], "-v") == 0)) verbose = true;
int rv = RUN_ALL_TESTS();
MPI_Finalize();
return rv;
}

View File

@ -12,15 +12,21 @@
------------------------------------------------------------------------- */
#include "MANYBODY/pair_eim.h"
#include "info.h"
#include "input.h"
#include "lammps.h"
#include "utils.h"
#include "gmock/gmock.h"
#include "gtest/gtest.h"
#include <cstring>
#include <mpi.h>
using namespace LAMMPS_NS;
// whether to print verbose output (i.e. not capturing LAMMPS screen output).
bool verbose = false;
class EIMPotentialFileReaderTest : public ::testing::Test {
protected:
LAMMPS *lmp;
@ -33,9 +39,16 @@ protected:
"PotentialFileReaderTest", "-log", "none", "-echo", "screen", "-nocite"};
char **argv = (char **)args;
int argc = sizeof(args) / sizeof(char *);
::testing::internal::CaptureStdout();
if (!verbose) ::testing::internal::CaptureStdout();
lmp = new LAMMPS(argc, argv, MPI_COMM_WORLD);
::testing::internal::GetCapturedStdout();
lmp->input->one("units metal");
if (!verbose) ::testing::internal::GetCapturedStdout();
ASSERT_NE(lmp, nullptr);
// check if the prerequisite eim pair style is available
Info *info = new Info(lmp);
ASSERT_TRUE(info->has_style("pair", "eim"));
delete info;
int npair = nelements * (nelements + 1) / 2;
setfl.ielement = new int[nelements];
@ -85,17 +98,17 @@ protected:
delete[] setfl.rs;
delete[] setfl.tp;
::testing::internal::CaptureStdout();
if (!verbose) ::testing::internal::CaptureStdout();
delete lmp;
::testing::internal::GetCapturedStdout();
if (!verbose) ::testing::internal::GetCapturedStdout();
}
};
TEST_F(EIMPotentialFileReaderTest, global_line)
{
::testing::internal::CaptureStdout();
if (!verbose) ::testing::internal::CaptureStdout();
EIMPotentialFileReader reader(lmp, "ffield.eim");
::testing::internal::GetCapturedStdout();
if (!verbose) ::testing::internal::GetCapturedStdout();
reader.get_global(&setfl);
ASSERT_DOUBLE_EQ(setfl.division, 2.0);
@ -105,9 +118,9 @@ TEST_F(EIMPotentialFileReaderTest, global_line)
TEST_F(EIMPotentialFileReaderTest, element_line_sequential)
{
::testing::internal::CaptureStdout();
if (!verbose) ::testing::internal::CaptureStdout();
EIMPotentialFileReader reader(lmp, "ffield.eim");
::testing::internal::GetCapturedStdout();
if (!verbose) ::testing::internal::GetCapturedStdout();
reader.get_element(&setfl, 0, "Li");
ASSERT_EQ(setfl.ielement[0], 3);
@ -130,9 +143,9 @@ TEST_F(EIMPotentialFileReaderTest, element_line_sequential)
TEST_F(EIMPotentialFileReaderTest, element_line_random)
{
::testing::internal::CaptureStdout();
if (!verbose) ::testing::internal::CaptureStdout();
EIMPotentialFileReader reader(lmp, "ffield.eim");
::testing::internal::GetCapturedStdout();
if (!verbose) ::testing::internal::GetCapturedStdout();
reader.get_element(&setfl, 0, "Id");
ASSERT_EQ(setfl.ielement[0], 53);
@ -146,9 +159,9 @@ TEST_F(EIMPotentialFileReaderTest, element_line_random)
TEST_F(EIMPotentialFileReaderTest, pair_line)
{
::testing::internal::CaptureStdout();
if (!verbose) ::testing::internal::CaptureStdout();
EIMPotentialFileReader reader(lmp, "ffield.eim");
::testing::internal::GetCapturedStdout();
if (!verbose) ::testing::internal::GetCapturedStdout();
reader.get_pair(&setfl, 0, "Li", "Li");
ASSERT_DOUBLE_EQ(setfl.rcutphiA[0], 6.0490e+00);
@ -169,9 +182,9 @@ TEST_F(EIMPotentialFileReaderTest, pair_line)
TEST_F(EIMPotentialFileReaderTest, pair_identical)
{
::testing::internal::CaptureStdout();
if (!verbose) ::testing::internal::CaptureStdout();
EIMPotentialFileReader reader(lmp, "ffield.eim");
::testing::internal::GetCapturedStdout();
if (!verbose) ::testing::internal::GetCapturedStdout();
reader.get_pair(&setfl, 0, "Li", "Na");
reader.get_pair(&setfl, 1, "Na", "Li");
@ -195,5 +208,9 @@ int main(int argc, char **argv)
{
MPI_Init(&argc, &argv);
::testing::InitGoogleMock(&argc, argv);
return RUN_ALL_TESTS();
if ((argc > 1) && (strcmp(argv[1], "-v") == 0)) verbose = true;
int rv = RUN_ALL_TESTS();
MPI_Finalize();
return rv;
}

View File

@ -23,16 +23,21 @@
#include "MANYBODY/pair_tersoff_mod_c.h"
#include "MANYBODY/pair_tersoff_zbl.h"
#include "MANYBODY/pair_vashishta.h"
#include "input.h"
#include "lammps.h"
#include "potential_file_reader.h"
#include "utils.h"
#include "gmock/gmock.h"
#include "gtest/gtest.h"
#include <cstring>
#include <mpi.h>
using namespace LAMMPS_NS;
// whether to print verbose output (i.e. not capturing LAMMPS screen output).
bool verbose = false;
const int LAMMPS_NS::PairSW::NPARAMS_PER_LINE;
const int LAMMPS_NS::PairComb::NPARAMS_PER_LINE;
const int LAMMPS_NS::PairComb3::NPARAMS_PER_LINE;
@ -55,24 +60,25 @@ protected:
"PotentialFileReaderTest", "-log", "none", "-echo", "screen", "-nocite"};
char **argv = (char **)args;
int argc = sizeof(args) / sizeof(char *);
::testing::internal::CaptureStdout();
if (!verbose) ::testing::internal::CaptureStdout();
lmp = new LAMMPS(argc, argv, MPI_COMM_WORLD);
::testing::internal::GetCapturedStdout();
if (!verbose) ::testing::internal::GetCapturedStdout();
}
void TearDown() override
{
::testing::internal::CaptureStdout();
if (!verbose) ::testing::internal::CaptureStdout();
delete lmp;
::testing::internal::GetCapturedStdout();
if (!verbose) ::testing::internal::GetCapturedStdout();
}
};
TEST_F(PotentialFileReaderTest, Si)
{
::testing::internal::CaptureStdout();
if (!verbose) ::testing::internal::CaptureStdout();
lmp->input->one("units metal");
PotentialFileReader reader(lmp, "Si.sw", "Stillinger-Weber");
::testing::internal::GetCapturedStdout();
if (!verbose) ::testing::internal::GetCapturedStdout();
auto line = reader.next_line(PairSW::NPARAMS_PER_LINE);
ASSERT_EQ(utils::count_words(line), PairSW::NPARAMS_PER_LINE);
@ -80,9 +86,10 @@ TEST_F(PotentialFileReaderTest, Si)
TEST_F(PotentialFileReaderTest, Comb)
{
::testing::internal::CaptureStdout();
if (!verbose) ::testing::internal::CaptureStdout();
lmp->input->one("units metal");
PotentialFileReader reader(lmp, "ffield.comb", "COMB");
::testing::internal::GetCapturedStdout();
if (!verbose) ::testing::internal::GetCapturedStdout();
auto line = reader.next_line(PairComb::NPARAMS_PER_LINE);
ASSERT_EQ(utils::count_words(line), PairComb::NPARAMS_PER_LINE);
@ -90,9 +97,10 @@ TEST_F(PotentialFileReaderTest, Comb)
TEST_F(PotentialFileReaderTest, Comb3)
{
::testing::internal::CaptureStdout();
if (!verbose) ::testing::internal::CaptureStdout();
lmp->input->one("units metal");
PotentialFileReader reader(lmp, "ffield.comb3", "COMB3");
::testing::internal::GetCapturedStdout();
if (!verbose) ::testing::internal::GetCapturedStdout();
auto line = reader.next_line(PairComb3::NPARAMS_PER_LINE);
ASSERT_EQ(utils::count_words(line), PairComb3::NPARAMS_PER_LINE);
@ -100,9 +108,10 @@ TEST_F(PotentialFileReaderTest, Comb3)
TEST_F(PotentialFileReaderTest, Tersoff)
{
::testing::internal::CaptureStdout();
if (!verbose) ::testing::internal::CaptureStdout();
lmp->input->one("units metal");
PotentialFileReader reader(lmp, "Si.tersoff", "Tersoff");
::testing::internal::GetCapturedStdout();
if (!verbose) ::testing::internal::GetCapturedStdout();
auto line = reader.next_line(PairTersoff::NPARAMS_PER_LINE);
ASSERT_EQ(utils::count_words(line), PairTersoff::NPARAMS_PER_LINE);
@ -110,9 +119,10 @@ TEST_F(PotentialFileReaderTest, Tersoff)
TEST_F(PotentialFileReaderTest, TersoffMod)
{
::testing::internal::CaptureStdout();
if (!verbose) ::testing::internal::CaptureStdout();
lmp->input->one("units metal");
PotentialFileReader reader(lmp, "Si.tersoff.mod", "Tersoff/Mod");
::testing::internal::GetCapturedStdout();
if (!verbose) ::testing::internal::GetCapturedStdout();
auto line = reader.next_line(PairTersoffMOD::NPARAMS_PER_LINE);
ASSERT_EQ(utils::count_words(line), PairTersoffMOD::NPARAMS_PER_LINE);
@ -120,9 +130,10 @@ TEST_F(PotentialFileReaderTest, TersoffMod)
TEST_F(PotentialFileReaderTest, TersoffModC)
{
::testing::internal::CaptureStdout();
if (!verbose) ::testing::internal::CaptureStdout();
lmp->input->one("units metal");
PotentialFileReader reader(lmp, "Si.tersoff.modc", "Tersoff/ModC");
::testing::internal::GetCapturedStdout();
if (!verbose) ::testing::internal::GetCapturedStdout();
auto line = reader.next_line(PairTersoffMODC::NPARAMS_PER_LINE);
ASSERT_EQ(utils::count_words(line), PairTersoffMODC::NPARAMS_PER_LINE);
@ -130,9 +141,10 @@ TEST_F(PotentialFileReaderTest, TersoffModC)
TEST_F(PotentialFileReaderTest, TersoffZBL)
{
::testing::internal::CaptureStdout();
if (!verbose) ::testing::internal::CaptureStdout();
lmp->input->one("units metal");
PotentialFileReader reader(lmp, "SiC.tersoff.zbl", "Tersoff/ZBL");
::testing::internal::GetCapturedStdout();
if (!verbose) ::testing::internal::GetCapturedStdout();
auto line = reader.next_line(PairTersoffZBL::NPARAMS_PER_LINE);
ASSERT_EQ(utils::count_words(line), PairTersoffZBL::NPARAMS_PER_LINE);
@ -140,9 +152,10 @@ TEST_F(PotentialFileReaderTest, TersoffZBL)
TEST_F(PotentialFileReaderTest, GW)
{
::testing::internal::CaptureStdout();
if (!verbose) ::testing::internal::CaptureStdout();
lmp->input->one("units metal");
PotentialFileReader reader(lmp, "SiC.gw", "GW");
::testing::internal::GetCapturedStdout();
if (!verbose) ::testing::internal::GetCapturedStdout();
auto line = reader.next_line(PairGW::NPARAMS_PER_LINE);
ASSERT_EQ(utils::count_words(line), PairGW::NPARAMS_PER_LINE);
@ -150,9 +163,10 @@ TEST_F(PotentialFileReaderTest, GW)
TEST_F(PotentialFileReaderTest, GWZBL)
{
::testing::internal::CaptureStdout();
if (!verbose) ::testing::internal::CaptureStdout();
lmp->input->one("units metal");
PotentialFileReader reader(lmp, "SiC.gw.zbl", "GW/ZBL");
::testing::internal::GetCapturedStdout();
if (!verbose) ::testing::internal::GetCapturedStdout();
auto line = reader.next_line(PairGWZBL::NPARAMS_PER_LINE);
ASSERT_EQ(utils::count_words(line), PairGWZBL::NPARAMS_PER_LINE);
@ -160,9 +174,10 @@ TEST_F(PotentialFileReaderTest, GWZBL)
TEST_F(PotentialFileReaderTest, Nb3bHarmonic)
{
::testing::internal::CaptureStdout();
if (!verbose) ::testing::internal::CaptureStdout();
lmp->input->one("units metal");
PotentialFileReader reader(lmp, "MOH.nb3b.harmonic", "NB3B Harmonic");
::testing::internal::GetCapturedStdout();
if (!verbose) ::testing::internal::GetCapturedStdout();
auto line = reader.next_line(PairNb3bHarmonic::NPARAMS_PER_LINE);
ASSERT_EQ(utils::count_words(line), PairNb3bHarmonic::NPARAMS_PER_LINE);
@ -170,9 +185,10 @@ TEST_F(PotentialFileReaderTest, Nb3bHarmonic)
TEST_F(PotentialFileReaderTest, Vashishta)
{
::testing::internal::CaptureStdout();
if (!verbose) ::testing::internal::CaptureStdout();
lmp->input->one("units metal");
PotentialFileReader reader(lmp, "SiC.vashishta", "Vashishta");
::testing::internal::GetCapturedStdout();
if (!verbose) ::testing::internal::GetCapturedStdout();
auto line = reader.next_line(PairVashishta::NPARAMS_PER_LINE);
ASSERT_EQ(utils::count_words(line), PairVashishta::NPARAMS_PER_LINE);
@ -182,5 +198,9 @@ int main(int argc, char **argv)
{
MPI_Init(&argc, &argv);
::testing::InitGoogleMock(&argc, argv);
return RUN_ALL_TESTS();
if ((argc > 1) && (strcmp(argv[1], "-v") == 0)) verbose = true;
int rv = RUN_ALL_TESTS();
MPI_Finalize();
return rv;
}