Merge pull request #4530 from akohlmey/collected-small-fixes
Collected small fixes and changes.
This commit is contained in:
@ -1,10 +1,18 @@
|
|||||||
# the geturl command needs libcurl
|
# the geturl command needs libcurl
|
||||||
|
|
||||||
find_package(CURL QUIET COMPONENTS HTTP HTTPS)
|
find_package(CURL QUIET)
|
||||||
option(WITH_CURL "Enable libcurl support" ${CURL_FOUND})
|
option(WITH_CURL "Enable libcurl support" ${CURL_FOUND})
|
||||||
if(WITH_CURL)
|
if(WITH_CURL)
|
||||||
find_package(CURL REQUIRED COMPONENTS HTTP HTTPS)
|
|
||||||
target_compile_definitions(lammps PRIVATE -DLAMMPS_CURL)
|
target_compile_definitions(lammps PRIVATE -DLAMMPS_CURL)
|
||||||
|
|
||||||
|
# need to use pkgconfig for fully static bins to find custom static libs
|
||||||
|
if (CMAKE_SYSTEM_NAME STREQUAL "LinuxMUSL")
|
||||||
|
include(FindPkgConfig)
|
||||||
|
pkg_check_modules(CURL IMPORTED_TARGET libcurl libssl libcrypto)
|
||||||
|
target_link_libraries(lammps PUBLIC PkgConfig::CURL)
|
||||||
|
else()
|
||||||
|
find_package(CURL REQUIRED)
|
||||||
target_link_libraries(lammps PRIVATE CURL::libcurl)
|
target_link_libraries(lammps PRIVATE CURL::libcurl)
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
|||||||
@ -21,10 +21,11 @@ to the online LAMMPS documentation for known LAMMPS commands and styles.
|
|||||||
Sur or later), and Windows (version 10 or later) :ref:`are available
|
Sur or later), and Windows (version 10 or later) :ref:`are available
|
||||||
<lammps_gui_install>` for download. Non-MPI LAMMPS executables (as
|
<lammps_gui_install>` for download. Non-MPI LAMMPS executables (as
|
||||||
``lmp``) for running LAMMPS from the command-line and :doc:`some
|
``lmp``) for running LAMMPS from the command-line and :doc:`some
|
||||||
LAMMPS tools <Tools>` compiled executables are also included.
|
LAMMPS tools <Tools>` compiled executables are also included. Also,
|
||||||
Also, the pre-compiled LAMMPS-GUI packages include the WHAM executables
|
the pre-compiled LAMMPS-GUI packages include the WHAM executables
|
||||||
from http://membrane.urmc.rochester.edu/content/wham/ for use with
|
from http://membrane.urmc.rochester.edu/content/wham/ for use with
|
||||||
LAMMPS tutorials.
|
LAMMPS tutorials documented in this paper (:ref:`Gravelle1
|
||||||
|
<Gravelle1>`).
|
||||||
|
|
||||||
The source code for LAMMPS-GUI is included in the LAMMPS source code
|
The source code for LAMMPS-GUI is included in the LAMMPS source code
|
||||||
distribution and can be found in the ``tools/lammps-gui`` folder. It
|
distribution and can be found in the ``tools/lammps-gui`` folder. It
|
||||||
@ -720,6 +721,19 @@ output, charts, slide show, variables, or snapshot images. The
|
|||||||
default settings for their visibility can be changed in the
|
default settings for their visibility can be changed in the
|
||||||
*Preferences* dialog.
|
*Preferences* dialog.
|
||||||
|
|
||||||
|
Tutorials
|
||||||
|
^^^^^^^^^
|
||||||
|
|
||||||
|
The *Tutorials* menu is to support the set of LAMMPS tutorials for
|
||||||
|
beginners and intermediate LAMMPS users documented in (:ref:`Gravelle1
|
||||||
|
<Gravelle1>`). From the drop down menu you can select which of the eight
|
||||||
|
currently available tutorial sessions you want to start and then will be
|
||||||
|
taken to a 'wizard' dialog where you can choose in which folder you want
|
||||||
|
to work, whether you want that folder to be cleared, and also whether
|
||||||
|
you want to download the solutions files (can be large). The dialog
|
||||||
|
will then start downloading the files requested and load the first input
|
||||||
|
file for the selected session into LAMMPS-GUI.
|
||||||
|
|
||||||
About
|
About
|
||||||
^^^^^
|
^^^^^
|
||||||
|
|
||||||
@ -848,6 +862,11 @@ General Settings:
|
|||||||
the plots in the *Charts* window in milliseconds. The default is to
|
the plots in the *Charts* window in milliseconds. The default is to
|
||||||
redraw the plots every 500 milliseconds. This is just for the drawing,
|
redraw the plots every 500 milliseconds. This is just for the drawing,
|
||||||
data collection is managed with the previous setting.
|
data collection is managed with the previous setting.
|
||||||
|
- *HTTPS proxy setting:* Allows to enter a URL for an HTTPS proxy. This
|
||||||
|
may be needed when the LAMMPS input contains :doc:`geturl commands <geturl>`
|
||||||
|
or for downloading tutorial files from the *Tutorials* menu. If the
|
||||||
|
``https_proxy`` environment variable was set externally, its value is
|
||||||
|
displayed but cannot be changed.
|
||||||
|
|
||||||
Accelerators:
|
Accelerators:
|
||||||
^^^^^^^^^^^^^
|
^^^^^^^^^^^^^
|
||||||
@ -976,10 +995,21 @@ available (On macOS use the Command key instead of Ctrl/Control).
|
|||||||
- Ctrl+Shift+T
|
- Ctrl+Shift+T
|
||||||
- LAMMPS Tutorial
|
- LAMMPS Tutorial
|
||||||
|
|
||||||
Further editing keybindings `are documented with the Qt documentation
|
Further keybindings of the editor window `are documented with the Qt
|
||||||
|
documentation
|
||||||
<https://doc.qt.io/qt-5/qplaintextedit.html#editing-key-bindings>`_. In
|
<https://doc.qt.io/qt-5/qplaintextedit.html#editing-key-bindings>`_. In
|
||||||
case of conflicts the list above takes precedence.
|
case of conflicts the list above takes precedence.
|
||||||
|
|
||||||
All other windows only support a subset of keyboard shortcuts listed
|
All other windows only support a subset of keyboard shortcuts listed
|
||||||
above. Typically, the shortcuts `Ctrl-/` (Stop Run), `Ctrl-W` (Close
|
above. Typically, the shortcuts `Ctrl-/` (Stop Run), `Ctrl-W` (Close
|
||||||
Window), and `Ctrl-Q` (Quit Application) are supported.
|
Window), and `Ctrl-Q` (Quit Application) are supported.
|
||||||
|
|
||||||
|
-------------
|
||||||
|
|
||||||
|
.. _Gravelle1:
|
||||||
|
|
||||||
|
**(Gravelle1)** Gravelle, Gissinger, Kohlmeyer, `arXiv:2503.14020 \[physics.comp-ph\] <https://doi.org/10.48550/arXiv.2503.14020>`_ (2025)
|
||||||
|
|
||||||
|
.. _Gravelle2:
|
||||||
|
|
||||||
|
**(Gravelle2)** Gravelle https://lammpstutorials.github.io/
|
||||||
|
|||||||
@ -1,19 +1,21 @@
|
|||||||
Compute styles
|
Compute styles
|
||||||
==============
|
==============
|
||||||
|
|
||||||
Classes that compute scalar and vector quantities like temperature
|
Classes that compute scalar and vector quantities like temperature and
|
||||||
and the pressure tensor, as well as classes that compute per-atom
|
the pressure tensor, as well as classes that compute per-atom quantities
|
||||||
quantities like kinetic energy and the centro-symmetry parameter
|
like kinetic energy and the centro-symmetry parameter are derived from
|
||||||
are derived from the Compute class. New styles can be created
|
the Compute class. New styles can be created to add new calculations to
|
||||||
to add new calculations to LAMMPS.
|
LAMMPS.
|
||||||
|
|
||||||
Compute_temp.cpp is a simple example of computing a scalar
|
The ``src/compute_temp.cpp`` file is a simple example of computing a
|
||||||
temperature. Compute_ke_atom.cpp is a simple example of computing
|
scalar temperature. The ``src/compute_ke_atom.cpp`` file is a simple
|
||||||
per-atom kinetic energy.
|
example of computing per-atom kinetic energy.
|
||||||
|
|
||||||
Here is a brief description of methods you define in your new derived
|
Here is a brief description of methods you define in your new derived
|
||||||
class. See compute.h for details.
|
class. See ``src/compute.h`` for additional details.
|
||||||
|
|
||||||
|
+-----------------------+------------------------------------------------------------------+
|
||||||
|
| post_constructor | perform tasks that cannot be run in the constructor (optional) |
|
||||||
+-----------------------+------------------------------------------------------------------+
|
+-----------------------+------------------------------------------------------------------+
|
||||||
| init | perform one time setup (required) |
|
| init | perform one time setup (required) |
|
||||||
+-----------------------+------------------------------------------------------------------+
|
+-----------------------+------------------------------------------------------------------+
|
||||||
@ -50,10 +52,11 @@ class. See compute.h for details.
|
|||||||
| memory_usage | tally memory usage (optional) |
|
| memory_usage | tally memory usage (optional) |
|
||||||
+-----------------------+------------------------------------------------------------------+
|
+-----------------------+------------------------------------------------------------------+
|
||||||
|
|
||||||
Tally-style computes are a special case, as their computation is done
|
Tally-style computes are a special case, as their computation is done in
|
||||||
in two stages: the callback function is registered with the pair style
|
two stages: the callback function is registered with the pair style and
|
||||||
and then called from the Pair::ev_tally() function, which is called for
|
then called from the Pair::ev_tally() function, which is called for each
|
||||||
each pair after force and energy has been computed for this pair. Then
|
pair after force and energy has been computed for this pair. Then the
|
||||||
the tallied values are retrieved with the standard compute_scalar or
|
tallied values are retrieved with the standard compute_scalar or
|
||||||
compute_vector or compute_peratom methods. The :doc:`compute styles in the TALLY package <compute_tally>`
|
compute_vector or compute_peratom methods. The :doc:`compute styles in
|
||||||
provide *examples* for utilizing this mechanism.
|
the TALLY package <compute_tally>` provide *examples* for utilizing this
|
||||||
|
mechanism.
|
||||||
|
|||||||
@ -1,23 +1,25 @@
|
|||||||
Fix styles
|
Fix styles
|
||||||
==========
|
==========
|
||||||
|
|
||||||
In LAMMPS, a "fix" is any operation that is computed during
|
In LAMMPS, a "fix" is any operation that is computed during timestepping
|
||||||
timestepping that alters some property of the system. Essentially
|
that alters some property of the system. Essentially everything that
|
||||||
everything that happens during a simulation besides force computation,
|
happens during a simulation besides force computation, neighbor list
|
||||||
neighbor list construction, and output, is a "fix". This includes
|
construction, and output, is a "fix". This includes time integration
|
||||||
time integration (update of coordinates and velocities), force
|
(update of coordinates and velocities), force constraints or boundary
|
||||||
constraints or boundary conditions (SHAKE or walls), and diagnostics
|
conditions (SHAKE or walls), and diagnostics (compute a diffusion
|
||||||
(compute a diffusion coefficient). New styles can be created to add
|
coefficient). New styles can be created to add new options to LAMMPS.
|
||||||
new options to LAMMPS.
|
|
||||||
|
|
||||||
Fix_setforce.cpp is a simple example of setting forces on atoms to
|
The file ``src/fix_setforce.cpp`` is a simple example of setting forces
|
||||||
prescribed values. There are dozens of fix options already in LAMMPS;
|
on atoms to prescribed values. There are dozens of fix options already
|
||||||
choose one as a template that is similar to what you want to
|
in LAMMPS; choose one as a template that is similar to what you want to
|
||||||
implement.
|
implement. There also is a detailed discussion of :doc:`how to write
|
||||||
|
new fix styles <Developer_write_fix>` in LAMMPS.
|
||||||
|
|
||||||
Here is a brief description of methods you can define in your new
|
Here is a brief description of methods you can define in your new
|
||||||
derived class. See fix.h for details.
|
derived class. See ``src/fix.h`` for additional details.
|
||||||
|
|
||||||
|
+---------------------------+--------------------------------------------------------------------------------------------+
|
||||||
|
| post_constructor | perform tasks that cannot be run in the constructor (optional) |
|
||||||
+---------------------------+--------------------------------------------------------------------------------------------+
|
+---------------------------+--------------------------------------------------------------------------------------------+
|
||||||
| setmask | determines when the fix is called during the timestep (required) |
|
| setmask | determines when the fix is called during the timestep (required) |
|
||||||
+---------------------------+--------------------------------------------------------------------------------------------+
|
+---------------------------+--------------------------------------------------------------------------------------------+
|
||||||
@ -130,10 +132,11 @@ derived class. See fix.h for details.
|
|||||||
|
|
||||||
Typically, only a small fraction of these methods are defined for a
|
Typically, only a small fraction of these methods are defined for a
|
||||||
particular fix. Setmask is mandatory, as it determines when the fix
|
particular fix. Setmask is mandatory, as it determines when the fix
|
||||||
will be invoked during the timestep. Fixes that perform time
|
will be invoked during :doc:`the evolution of a timestep
|
||||||
integration (\ *nve*, *nvt*, *npt*\ ) implement initial_integrate() and
|
<Developer_flow>`. Fixes that perform time integration (\ *nve*, *nvt*,
|
||||||
final_integrate() to perform velocity Verlet updates. Fixes that
|
*npt*\ ) implement initial_integrate() and final_integrate() to perform
|
||||||
constrain forces implement post_force().
|
velocity Verlet updates. Fixes that constrain forces implement
|
||||||
|
post_force().
|
||||||
|
|
||||||
Fixes that perform diagnostics typically implement end_of_step(). For
|
Fixes that perform diagnostics typically implement end_of_step(). For
|
||||||
an end_of_step fix, one of your fix arguments must be the variable
|
an end_of_step fix, one of your fix arguments must be the variable
|
||||||
@ -143,13 +146,13 @@ is the first argument the fix defines (after the ID, group-ID, style).
|
|||||||
|
|
||||||
If the fix needs to store information for each atom that persists from
|
If the fix needs to store information for each atom that persists from
|
||||||
timestep to timestep, it can manage that memory and migrate the info
|
timestep to timestep, it can manage that memory and migrate the info
|
||||||
with the atoms as they move from processors to processor by
|
with the atoms as they move from processors to processor by implementing
|
||||||
implementing the grow_arrays, copy_arrays, pack_exchange, and
|
the grow_arrays, copy_arrays, pack_exchange, and unpack_exchange
|
||||||
unpack_exchange methods. Similarly, the pack_restart and
|
methods. Similarly, the pack_restart and unpack_restart methods can be
|
||||||
unpack_restart methods can be implemented to store information about
|
implemented to store information about the fix in restart files. If you
|
||||||
the fix in restart files. If you wish an integrator or force
|
wish an integrator or force constraint fix to work with rRESPA (see the
|
||||||
constraint fix to work with rRESPA (see the :doc:`run_style <run_style>`
|
:doc:`run_style <run_style>` command), the initial_integrate,
|
||||||
command), the initial_integrate, post_force_integrate, and
|
post_force_integrate, and final_integrate_respa methods can be
|
||||||
final_integrate_respa methods can be implemented. The thermo method
|
implemented. The thermo method enables a fix to contribute values to
|
||||||
enables a fix to contribute values to thermodynamic output, as printed
|
thermodynamic output, as printed quantities and/or to be summed to the
|
||||||
quantities and/or to be summed to the potential energy of the system.
|
potential energy of the system.
|
||||||
|
|||||||
@ -3,17 +3,16 @@ Scatter/gather operations
|
|||||||
|
|
||||||
.. code-block:: python
|
.. code-block:: python
|
||||||
|
|
||||||
data = lmp.gather_atoms(name,type,count) # return per-atom property of all atoms gathered into data, ordered by atom ID
|
data = lmp.gather_atoms(name,dtype,count) # return per-atom property of all atoms gathered into data, ordered by atom ID
|
||||||
# name = "x", "charge", "type", etc
|
# name = "x", "q", "type", etc
|
||||||
data = lmp.gather_atoms_concat(name,type,count) # ditto, but concatenated atom values from each proc (unordered)
|
data = lmp.gather_atoms_concat(name,dtype,count) # ditto, but concatenated atom values from each proc (unordered)
|
||||||
data = lmp.gather_atoms_subset(name,type,count,ndata,ids) # ditto, but for subset of Ndata atoms with IDs
|
data = lmp.gather_atoms_subset(name,dtype,count,ndata,ids) # ditto, but for subset of Ndata atoms with IDs
|
||||||
|
|
||||||
lmp.scatter_atoms(name,type,count,data) # scatter per-atom property to all atoms from data, ordered by atom ID
|
lmp.scatter_atoms(name,dtype,count,data) # scatter per-atom property to all atoms from data, ordered by atom ID
|
||||||
# name = "x", "charge", "type", etc
|
# name = "x", "q", "type", etc
|
||||||
# count = # of per-atom values, 1 or 3, etc
|
# count = # of per-atom values, 1 or 3, etc
|
||||||
|
|
||||||
lmp.scatter_atoms_subset(name,type,count,ndata,ids,data) # ditto, but for subset of Ndata atoms with IDs
|
lmp.scatter_atoms_subset(name,dtype,count,ndata,ids,data) # ditto, but for subset of Ndata atoms with IDs
|
||||||
|
|
||||||
|
|
||||||
The gather methods collect peratom info of the requested type (atom
|
The gather methods collect peratom info of the requested type (atom
|
||||||
coords, atom types, forces, etc) from all processors, and returns the
|
coords, atom types, forces, etc) from all processors, and returns the
|
||||||
@ -22,6 +21,12 @@ functions do the inverse. They distribute a vector of peratom values,
|
|||||||
passed by all calling processors, to individual atoms, which may be
|
passed by all calling processors, to individual atoms, which may be
|
||||||
owned by different processors.
|
owned by different processors.
|
||||||
|
|
||||||
|
The *dtype* parameter is 0 for ``int`` values and 1 for ``double``
|
||||||
|
values. The *count* parameter is 1 for per-atom vectors like "type"
|
||||||
|
or "q" and 3 for per-atom arrays like "x", "v", "f". Use *count* = 3
|
||||||
|
with name = "image" if you want the single integer storing the image
|
||||||
|
flags unpacked into 3 components ("x", "y", and "z").
|
||||||
|
|
||||||
Note that the data returned by the gather methods,
|
Note that the data returned by the gather methods,
|
||||||
e.g. :py:meth:`gather_atoms("x") <lammps.lammps.gather_atoms()>`, is
|
e.g. :py:meth:`gather_atoms("x") <lammps.lammps.gather_atoms()>`, is
|
||||||
different from the data structure returned by
|
different from the data structure returned by
|
||||||
|
|||||||
@ -1276,11 +1276,13 @@ Those scripts were written by Steve Plimpton sjplimp at gmail.com
|
|||||||
valgrind tool
|
valgrind tool
|
||||||
-------------
|
-------------
|
||||||
|
|
||||||
The ``valgrind`` folder contains additional suppressions fur LAMMPS when using
|
The ``valgrind`` folder contains additional suppressions fur LAMMPS when
|
||||||
valgrind's memcheck tool to search for memory access violation and memory
|
using `valgrind's <https://valgrind.org/>`_ ` `memcheck tool
|
||||||
leaks. These suppressions are automatically invoked when running tests through
|
<https://valgrind.org/info/tools.html#memcheck>`_ to search for memory
|
||||||
CMake "ctest -T memcheck". See the provided README file to add these
|
access violation and memory leaks. These suppressions are automatically
|
||||||
suppressions when running LAMMPS.
|
invoked when running tests through CMake "ctest -T memcheck". See the
|
||||||
|
instruction in the ``README`` file to add these suppressions when using
|
||||||
|
valgrind with LAMMPS or other programs.
|
||||||
|
|
||||||
----------
|
----------
|
||||||
|
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
.. index:: dihedral_style multi/harmonic
|
.. index:: dihedral_style multi/harmonic
|
||||||
|
.. index:: dihedral_style multi/harmonic/kk
|
||||||
.. index:: dihedral_style multi/harmonic/omp
|
.. index:: dihedral_style multi/harmonic/omp
|
||||||
|
|
||||||
dihedral_style multi/harmonic command
|
dihedral_style multi/harmonic command
|
||||||
|
|||||||
@ -58,6 +58,32 @@ behave as expected. If the argument is *no*, geturl will operate silently
|
|||||||
and only report the error status number provided by libcurl, in case of a
|
and only report the error status number provided by libcurl, in case of a
|
||||||
failure.
|
failure.
|
||||||
|
|
||||||
|
.. _geturl_proxy:
|
||||||
|
|
||||||
|
.. admonition:: Using *geturl* with proxies for http or https
|
||||||
|
:class: note
|
||||||
|
|
||||||
|
The `libcurl library <https:://curl.se/libcurl/>`_ supports `routing
|
||||||
|
traffic through proxies
|
||||||
|
<https://everything.curl.dev/usingcurl/proxies/env.html>`_ by setting
|
||||||
|
suitable environment variables (e.g. ``http_proxy`` or
|
||||||
|
``https_proxy``) as required by some institutional or corporate
|
||||||
|
security protocols. In that case you probably also want to use the
|
||||||
|
*verify* *no* setting.
|
||||||
|
|
||||||
|
Using a proxy may also be needed if you are running on an HPC cluster
|
||||||
|
where only the login or head nodes have access to the internet, but
|
||||||
|
not the compute nodes. In this case the following input can be adapted
|
||||||
|
and used for your local HPC environment:
|
||||||
|
|
||||||
|
.. code-block:: LAMMPS
|
||||||
|
|
||||||
|
variable headnode getenv PBS_O_HOST # use SLURM_SUBMIT_HOST when using SLURM instead of Torque/PBS
|
||||||
|
shell ssh -N -f -D 8001 ${headnode} # start SOCKS5 proxy with backgrounded ssh connection to cluster head node
|
||||||
|
shell putenv http_proxy=socks5://localhost:8001 https_proxy=socks5://localhost:8001
|
||||||
|
geturl https://download.lammps.org/tars/SHA256SUMS # download a file using proxy
|
||||||
|
shell head SHA256SUMS # check if the download was successful
|
||||||
|
|
||||||
----------
|
----------
|
||||||
|
|
||||||
Restrictions
|
Restrictions
|
||||||
|
|||||||
@ -63,6 +63,13 @@ DumpExtXYZ::DumpExtXYZ(LAMMPS *lmp, int narg, char **arg) :
|
|||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
DumpExtXYZ::~DumpExtXYZ()
|
||||||
|
{
|
||||||
|
delete[] properties_string;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
void DumpExtXYZ::update_properties()
|
void DumpExtXYZ::update_properties()
|
||||||
{
|
{
|
||||||
// How many per-atom elements we buffer
|
// How many per-atom elements we buffer
|
||||||
|
|||||||
@ -26,6 +26,7 @@ namespace LAMMPS_NS {
|
|||||||
class DumpExtXYZ : public DumpXYZ {
|
class DumpExtXYZ : public DumpXYZ {
|
||||||
public:
|
public:
|
||||||
DumpExtXYZ(class LAMMPS *, int, char **);
|
DumpExtXYZ(class LAMMPS *, int, char **);
|
||||||
|
~DumpExtXYZ() override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
int with_vel;
|
int with_vel;
|
||||||
|
|||||||
@ -29,6 +29,7 @@ template <class DeviceType> class MLIAPModelKokkos : protected Pointers {
|
|||||||
MLIAPModelKokkos(LAMMPS *lmp, MLIAPModel *model_in) : Pointers(lmp), model(model_in) {}
|
MLIAPModelKokkos(LAMMPS *lmp, MLIAPModel *model_in) : Pointers(lmp), model(model_in) {}
|
||||||
virtual ~MLIAPModelKokkos()
|
virtual ~MLIAPModelKokkos()
|
||||||
{
|
{
|
||||||
|
memoryKK->destroy_kokkos(k_coeffelem,model->coeffelem);
|
||||||
model->coeffelem = nullptr;
|
model->coeffelem = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -39,7 +40,7 @@ template <class DeviceType> class MLIAPModelKokkos : protected Pointers {
|
|||||||
"MLIAPModelKokkos::coeffelem");
|
"MLIAPModelKokkos::coeffelem");
|
||||||
for (int i = 0; i < model->nelements; ++i)
|
for (int i = 0; i < model->nelements; ++i)
|
||||||
for (int j = 0; j < model->nparams; ++j) tmp[i][j] = model->coeffelem[i][j];
|
for (int j = 0; j < model->nparams; ++j) tmp[i][j] = model->coeffelem[i][j];
|
||||||
delete model->coeffelem;
|
memory->destroy(model->coeffelem);
|
||||||
model->coeffelem = tmp;
|
model->coeffelem = tmp;
|
||||||
k_coeffelem.modify<LMPHostType>();
|
k_coeffelem.modify<LMPHostType>();
|
||||||
k_coeffelem.sync<LMPDeviceType>();
|
k_coeffelem.sync<LMPDeviceType>();
|
||||||
|
|||||||
@ -56,8 +56,8 @@ PairMLIAPKokkos<DeviceType>::~PairMLIAPKokkos()
|
|||||||
memoryKK->destroy_kokkos(k_map, map);
|
memoryKK->destroy_kokkos(k_map, map);
|
||||||
memoryKK->destroy_kokkos(k_cutsq, cutsq);
|
memoryKK->destroy_kokkos(k_cutsq, cutsq);
|
||||||
memoryKK->destroy_kokkos(k_setflag, setflag);
|
memoryKK->destroy_kokkos(k_setflag, setflag);
|
||||||
memoryKK->destroy_kokkos(k_eatom,eatom);
|
memoryKK->destroy_kokkos(k_eatom, eatom);
|
||||||
memoryKK->destroy_kokkos(k_vatom,vatom);
|
memoryKK->destroy_kokkos(k_vatom, vatom);
|
||||||
delete model;
|
delete model;
|
||||||
delete descriptor;
|
delete descriptor;
|
||||||
model=nullptr;
|
model=nullptr;
|
||||||
|
|||||||
@ -42,16 +42,16 @@ public:
|
|||||||
typedef ArrayTypes<DeviceType> AT;
|
typedef ArrayTypes<DeviceType> AT;
|
||||||
|
|
||||||
PairMLIAPKokkos(class LAMMPS*);
|
PairMLIAPKokkos(class LAMMPS*);
|
||||||
~PairMLIAPKokkos();
|
~PairMLIAPKokkos() override;
|
||||||
void settings(int narg, char ** arg);
|
void settings(int narg, char ** arg) override;
|
||||||
void init_style();
|
void init_style() override;
|
||||||
|
|
||||||
void compute(int, int);
|
void compute(int, int) override;
|
||||||
void e_tally(MLIAPData* data);
|
void e_tally(MLIAPData* data);
|
||||||
|
|
||||||
void allocate();
|
void allocate() override;
|
||||||
|
|
||||||
void coeff(int narg, char **arg);
|
void coeff(int narg, char **arg) override;
|
||||||
|
|
||||||
//Outward facing functions to be invoked by the ML layer via MLIAPDataKokkosDevice
|
//Outward facing functions to be invoked by the ML layer via MLIAPDataKokkosDevice
|
||||||
template <typename CommType>
|
template <typename CommType>
|
||||||
|
|||||||
@ -47,7 +47,7 @@ using namespace LAMMPS_NS;
|
|||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
PairMLIAP::PairMLIAP(LAMMPS *lmp) :
|
PairMLIAP::PairMLIAP(LAMMPS *lmp) :
|
||||||
Pair(lmp), map(nullptr), model(nullptr), descriptor(nullptr), data(nullptr)
|
Pair(lmp), model(nullptr), descriptor(nullptr), data(nullptr)
|
||||||
{
|
{
|
||||||
single_enable = 0;
|
single_enable = 0;
|
||||||
restartinfo = 0;
|
restartinfo = 0;
|
||||||
@ -55,8 +55,6 @@ PairMLIAP::PairMLIAP(LAMMPS *lmp) :
|
|||||||
manybody_flag = 1;
|
manybody_flag = 1;
|
||||||
is_child = false;
|
is_child = false;
|
||||||
centroidstressflag = CENTROID_NOTAVAIL;
|
centroidstressflag = CENTROID_NOTAVAIL;
|
||||||
model=nullptr;
|
|
||||||
descriptor=nullptr;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|||||||
@ -36,7 +36,6 @@ class PairMLIAP : public Pair {
|
|||||||
void init_style() override;
|
void init_style() override;
|
||||||
double init_one(int, int) override;
|
double init_one(int, int) override;
|
||||||
double memory_usage() override;
|
double memory_usage() override;
|
||||||
int *map; // mapping from atom types to elements
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void allocate();
|
virtual void allocate();
|
||||||
|
|||||||
@ -101,7 +101,10 @@ void FixQEqRelReaxFF::calc_chi_eff()
|
|||||||
sum_d += overlap;
|
sum_d += overlap;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (sum_d != 0.0)
|
||||||
chi_eff[i] = chia + scale * (phia - sum_n / sum_d);
|
chi_eff[i] = chia + scale * (phia - sum_n / sum_d);
|
||||||
|
else
|
||||||
|
chi_eff[i] = chia;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
for (i = 0; i < nn; i++) { chi_eff[i] = chi[type[i]]; }
|
for (i = 0; i < nn; i++) { chi_eff[i] = chi[type[i]]; }
|
||||||
|
|||||||
167
src/library.cpp
167
src/library.cpp
@ -3309,9 +3309,9 @@ x[0][2], x[1][0], x[1][1], x[1][2], x[2][0], :math:`\dots`);
|
|||||||
\endverbatim
|
\endverbatim
|
||||||
*
|
*
|
||||||
* \param handle pointer to a previously created LAMMPS instance
|
* \param handle pointer to a previously created LAMMPS instance
|
||||||
* \param name desired quantity (e.g., *x* or *charge*)
|
* \param name desired quantity (e.g., *x* or *q*)
|
||||||
* \param type 0 for ``int`` values, 1 for ``double`` values
|
* \param dtype 0 for ``int`` values, 1 for ``double`` values
|
||||||
* \param count number of per-atom values (e.g., 1 for *type* or *charge*,
|
* \param count number of per-atom values (e.g., 1 for *type* or *q*,
|
||||||
* 3 for *x* or *f*); use *count* = 3 with *image* if you want
|
* 3 for *x* or *f*); use *count* = 3 with *image* if you want
|
||||||
* a single image flag unpacked into (*x*,*y*,*z*) components.
|
* a single image flag unpacked into (*x*,*y*,*z*) components.
|
||||||
* \param data per-atom values packed in a 1-dimensional array of length
|
* \param data per-atom values packed in a 1-dimensional array of length
|
||||||
@ -3325,7 +3325,7 @@ x[0][2], x[1][0], x[1][1], x[1][2], x[2][0], :math:`\dots`);
|
|||||||
Allreduce to sum vector into data across all procs
|
Allreduce to sum vector into data across all procs
|
||||||
------------------------------------------------------------------------- */
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
void lammps_gather_atoms(void *handle, const char *name, int type, int count, void *data)
|
void lammps_gather_atoms(void *handle, const char *name, int dtype, int count, void *data)
|
||||||
{
|
{
|
||||||
auto *lmp = (LAMMPS *) handle;
|
auto *lmp = (LAMMPS *) handle;
|
||||||
if (!lmp || !lmp->error || !lmp->atom || !lmp->memory) {
|
if (!lmp || !lmp->error || !lmp->atom || !lmp->memory) {
|
||||||
@ -3360,7 +3360,7 @@ void lammps_gather_atoms(void *handle, const char *name, int type, int count, vo
|
|||||||
// use atom ID to insert each atom's values into copy
|
// use atom ID to insert each atom's values into copy
|
||||||
// MPI_Allreduce with MPI_SUM to merge into data, ordered by atom ID
|
// MPI_Allreduce with MPI_SUM to merge into data, ordered by atom ID
|
||||||
|
|
||||||
if (type == 0) {
|
if (dtype == 0) {
|
||||||
int *vector = nullptr;
|
int *vector = nullptr;
|
||||||
int **array = nullptr;
|
int **array = nullptr;
|
||||||
const int imgunpack = (count == 3) && (strcmp(name,"image") == 0);
|
const int imgunpack = (count == 3) && (strcmp(name,"image") == 0);
|
||||||
@ -3399,7 +3399,7 @@ void lammps_gather_atoms(void *handle, const char *name, int type, int count, vo
|
|||||||
MPI_Allreduce(copy, data, count * natoms, MPI_INT, MPI_SUM, lmp->world);
|
MPI_Allreduce(copy, data, count * natoms, MPI_INT, MPI_SUM, lmp->world);
|
||||||
lmp->memory->destroy(copy);
|
lmp->memory->destroy(copy);
|
||||||
|
|
||||||
} else if (type == 1) {
|
} else if (dtype == 1) {
|
||||||
double *vector = nullptr;
|
double *vector = nullptr;
|
||||||
double **array = nullptr;
|
double **array = nullptr;
|
||||||
if (count == 1) vector = (double *) vptr;
|
if (count == 1) vector = (double *) vptr;
|
||||||
@ -3427,7 +3427,7 @@ void lammps_gather_atoms(void *handle, const char *name, int type, int count, vo
|
|||||||
MPI_Allreduce(copy, data, count*natoms, MPI_DOUBLE, MPI_SUM, lmp->world);
|
MPI_Allreduce(copy, data, count*natoms, MPI_DOUBLE, MPI_SUM, lmp->world);
|
||||||
lmp->memory->destroy(copy);
|
lmp->memory->destroy(copy);
|
||||||
} else {
|
} else {
|
||||||
lmp->error->all(FLERR, Error::NOLASTLINE, "{}(): unsupported data type: {}", FNERR, type);
|
lmp->error->all(FLERR, Error::NOLASTLINE, "{}(): unsupported data type: {}", FNERR, dtype);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -3469,13 +3469,13 @@ or :cpp:func:`lammps_extract_setting`.
|
|||||||
|
|
||||||
\endverbatim
|
\endverbatim
|
||||||
*
|
*
|
||||||
* \param handle: pointer to a previously created LAMMPS instance
|
* \param handle pointer to a previously created LAMMPS instance
|
||||||
* \param name: desired quantity (e.g., *x* or *charge*\ )
|
* \param name desired quantity (e.g., *x* or *q*\ )
|
||||||
* \param type: 0 for ``int`` values, 1 for ``double`` values
|
* \param dtype 0 for ``int`` values, 1 for ``double`` values
|
||||||
* \param count: number of per-atom values (e.g., 1 for *type* or *charge*,
|
* \param count number of per-atom values (e.g., 1 for *type* or *q*,
|
||||||
* 3 for *x* or *f*); use *count* = 3 with "image" if you want
|
* 3 for *x* or *f*); use *count* = 3 with "image" if you want
|
||||||
* single image flags unpacked into (*x*,*y*,*z*)
|
* single image flags unpacked into (*x*,*y*,*z*)
|
||||||
* \param data: per-atom values packed in a 1-dimensional array of length
|
* \param data per-atom values packed in a 1-dimensional array of length
|
||||||
* *natoms* \* *count*.
|
* *natoms* \* *count*.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
@ -3485,7 +3485,7 @@ or :cpp:func:`lammps_extract_setting`.
|
|||||||
Allgather Nlocal atoms from each proc into data
|
Allgather Nlocal atoms from each proc into data
|
||||||
------------------------------------------------------------------------- */
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
void lammps_gather_atoms_concat(void *handle, const char *name, int type,
|
void lammps_gather_atoms_concat(void *handle, const char *name, int dtype,
|
||||||
int count, void *data)
|
int count, void *data)
|
||||||
{
|
{
|
||||||
auto *lmp = (LAMMPS *) handle;
|
auto *lmp = (LAMMPS *) handle;
|
||||||
@ -3523,7 +3523,7 @@ void lammps_gather_atoms_concat(void *handle, const char *name, int type,
|
|||||||
lmp->memory->create(recvcounts,nprocs,"lib/gather:recvcounts");
|
lmp->memory->create(recvcounts,nprocs,"lib/gather:recvcounts");
|
||||||
lmp->memory->create(displs,nprocs,"lib/gather:displs");
|
lmp->memory->create(displs,nprocs,"lib/gather:displs");
|
||||||
|
|
||||||
if (type == 0) {
|
if (dtype == 0) {
|
||||||
int *vector = nullptr;
|
int *vector = nullptr;
|
||||||
int **array = nullptr;
|
int **array = nullptr;
|
||||||
const int imgunpack = (count == 3) && (strcmp(name,"image") == 0);
|
const int imgunpack = (count == 3) && (strcmp(name,"image") == 0);
|
||||||
@ -3631,15 +3631,15 @@ x[100][2], x[57][0], x[57][1], x[57][2], x[210][0], :math:`\dots`);
|
|||||||
|
|
||||||
\endverbatim
|
\endverbatim
|
||||||
*
|
*
|
||||||
* \param handle: pointer to a previously created LAMMPS instance
|
* \param handle pointer to a previously created LAMMPS instance
|
||||||
* \param name: desired quantity (e.g., *x* or *charge*)
|
* \param name desired quantity (e.g., *x* or *q*)
|
||||||
* \param type: 0 for ``int`` values, 1 for ``double`` values
|
* \param dtype 0 for ``int`` values, 1 for ``double`` values
|
||||||
* \param count: number of per-atom values (e.g., 1 for *type* or *charge*,
|
* \param count number of per-atom values (e.g., 1 for *type* or *q*,
|
||||||
* 3 for *x* or *f*); use *count* = 3 with "image" if you want
|
* 3 for *x* or *f*); use *count* = 3 with "image" if you want
|
||||||
* single image flags unpacked into (*x*,*y*,*z*)
|
* single image flags unpacked into (*x*,*y*,*z*)
|
||||||
* \param ndata: number of atoms for which to return data (can be all of them)
|
* \param ndata number of atoms for which to return data (can be all of them)
|
||||||
* \param ids: list of *ndata* atom IDs for which to return data
|
* \param ids list of *ndata* atom IDs for which to return data
|
||||||
* \param data: per-atom values packed in a 1-dimensional array of length
|
* \param data per-atom values packed in a 1-dimensional array of length
|
||||||
* *ndata* \* *count*.
|
* *ndata* \* *count*.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
@ -3651,7 +3651,7 @@ x[100][2], x[57][0], x[57][1], x[57][2], x[210][0], :math:`\dots`);
|
|||||||
Allreduce to sum vector into data across all procs
|
Allreduce to sum vector into data across all procs
|
||||||
------------------------------------------------------------------------- */
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
void lammps_gather_atoms_subset(void *handle, const char *name, int type,
|
void lammps_gather_atoms_subset(void *handle, const char *name, int dtype,
|
||||||
int count, int ndata, int *ids, void *data)
|
int count, int ndata, int *ids, void *data)
|
||||||
{
|
{
|
||||||
auto *lmp = (LAMMPS *) handle;
|
auto *lmp = (LAMMPS *) handle;
|
||||||
@ -3686,7 +3686,7 @@ void lammps_gather_atoms_subset(void *handle, const char *name, int type,
|
|||||||
// use atom ID to insert each atom's values into copy
|
// use atom ID to insert each atom's values into copy
|
||||||
// MPI_Allreduce with MPI_SUM to merge into data
|
// MPI_Allreduce with MPI_SUM to merge into data
|
||||||
|
|
||||||
if (type == 0) {
|
if (dtype == 0) {
|
||||||
int *vector = nullptr;
|
int *vector = nullptr;
|
||||||
int **array = nullptr;
|
int **array = nullptr;
|
||||||
const int imgunpack = (count == 3) && (strcmp(name,"image") == 0);
|
const int imgunpack = (count == 3) && (strcmp(name,"image") == 0);
|
||||||
@ -3799,9 +3799,9 @@ atom ID (e.g., if *name* is *x* and *count* = 3, then
|
|||||||
\endverbatim
|
\endverbatim
|
||||||
*
|
*
|
||||||
* \param handle pointer to a previously created LAMMPS instance
|
* \param handle pointer to a previously created LAMMPS instance
|
||||||
* \param name desired quantity (e.g., *x* or *charge*)
|
* \param name desired quantity (e.g., *x* or *q*)
|
||||||
* \param type 0 for ``int`` values, 1 for ``double`` values
|
* \param dtype 0 for ``int`` values, 1 for ``double`` values
|
||||||
* \param count number of per-atom values (e.g., 1 for *type* or *charge*,
|
* \param count number of per-atom values (e.g., 1 for *type* or *q*,
|
||||||
* 3 for *x* or *f*); use *count* = 3 with *image* if you have
|
* 3 for *x* or *f*); use *count* = 3 with *image* if you have
|
||||||
* a single image flag packed into (*x*,*y*,*z*) components.
|
* a single image flag packed into (*x*,*y*,*z*) components.
|
||||||
* \param data per-atom values packed in a one-dimensional array of length
|
* \param data per-atom values packed in a one-dimensional array of length
|
||||||
@ -3814,7 +3814,7 @@ atom ID (e.g., if *name* is *x* and *count* = 3, then
|
|||||||
loop over Natoms, if I own atom ID, set its values from data
|
loop over Natoms, if I own atom ID, set its values from data
|
||||||
------------------------------------------------------------------------- */
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
void lammps_scatter_atoms(void *handle, const char *name, int type, int count, void *data)
|
void lammps_scatter_atoms(void *handle, const char *name, int dtype, int count, void *data)
|
||||||
{
|
{
|
||||||
auto *lmp = (LAMMPS *) handle;
|
auto *lmp = (LAMMPS *) handle;
|
||||||
if (!lmp || !lmp->error || !lmp->atom || !lmp->memory) {
|
if (!lmp || !lmp->error || !lmp->atom || !lmp->memory) {
|
||||||
@ -3847,7 +3847,7 @@ void lammps_scatter_atoms(void *handle, const char *name, int type, int count, v
|
|||||||
void *vptr = lmp->atom->extract(name);
|
void *vptr = lmp->atom->extract(name);
|
||||||
if (!vptr) lmp->error->all(FLERR, Error::NOLASTLINE, "{}(): unknown property {}", FNERR, name);
|
if (!vptr) lmp->error->all(FLERR, Error::NOLASTLINE, "{}(): unknown property {}", FNERR, name);
|
||||||
|
|
||||||
if (type == 0) {
|
if (dtype == 0) {
|
||||||
int *vector = nullptr;
|
int *vector = nullptr;
|
||||||
int **array = nullptr;
|
int **array = nullptr;
|
||||||
const int imgpack = (count == 3) && (strcmp(name,"image") == 0);
|
const int imgpack = (count == 3) && (strcmp(name,"image") == 0);
|
||||||
@ -3935,14 +3935,14 @@ be {1, 100, 57}.
|
|||||||
|
|
||||||
\endverbatim
|
\endverbatim
|
||||||
*
|
*
|
||||||
* \param handle: pointer to a previously created LAMMPS instance
|
* \param handle pointer to a previously created LAMMPS instance
|
||||||
* \param name: desired quantity (e.g., *x* or *charge*)
|
* \param name desired quantity (e.g., *x* or *q*)
|
||||||
* \param type: 0 for ``int`` values, 1 for ``double`` values
|
* \param dtype 0 for ``int`` values, 1 for ``double`` values
|
||||||
* \param count: number of per-atom values (e.g., 1 for *type* or *charge*,
|
* \param count number of per-atom values (e.g., 1 for *dtype* or *q*,
|
||||||
* 3 for *x* or *f*); use *count* = 3 with "image" if you have
|
* 3 for *x* or *f*); use *count* = 3 with "image" if you have
|
||||||
* all the image flags packed into (*xyz*)
|
* all the image flags packed into (*xyz*)
|
||||||
* \param ndata: number of atoms listed in *ids* and *data* arrays
|
* \param ndata number of atoms listed in *ids* and *data* arrays
|
||||||
* \param ids: list of *ndata* atom IDs to scatter data to
|
* \param ids list of *ndata* atom IDs to scatter data to
|
||||||
* \param data per-atom values packed in a 1-dimensional array of length
|
* \param data per-atom values packed in a 1-dimensional array of length
|
||||||
* *ndata* \* *count*.
|
* *ndata* \* *count*.
|
||||||
*
|
*
|
||||||
@ -3953,9 +3953,9 @@ be {1, 100, 57}.
|
|||||||
data is ordered by provided atom IDs
|
data is ordered by provided atom IDs
|
||||||
no requirement for consecutive atom IDs (1 to N)
|
no requirement for consecutive atom IDs (1 to N)
|
||||||
see scatter_atoms() to scatter data for all atoms, ordered by consecutive IDs
|
see scatter_atoms() to scatter data for all atoms, ordered by consecutive IDs
|
||||||
name = desired quantity (e.g., x or charge)
|
name = desired quantity (e.g., x or q)
|
||||||
type = 0 for integer values, 1 for double values
|
dtype = 0 for integer values, 1 for double values
|
||||||
count = # of per-atom values (e.g., 1 for type or charge, 3 for x or f)
|
count = # of per-atom values (e.g., 1 for type or q, 3 for x or f)
|
||||||
use count = 3 with "image" for xyz to be packed into single image flag
|
use count = 3 with "image" for xyz to be packed into single image flag
|
||||||
ndata = # of atoms in ids and data (could be all atoms)
|
ndata = # of atoms in ids and data (could be all atoms)
|
||||||
ids = list of Ndata atom IDs to scatter data to
|
ids = list of Ndata atom IDs to scatter data to
|
||||||
@ -3966,7 +3966,7 @@ be {1, 100, 57}.
|
|||||||
loop over Ndata, if I own atom ID, set its values from data
|
loop over Ndata, if I own atom ID, set its values from data
|
||||||
------------------------------------------------------------------------- */
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
void lammps_scatter_atoms_subset(void *handle, const char *name, int type,
|
void lammps_scatter_atoms_subset(void *handle, const char *name, int dtype,
|
||||||
int count, int ndata, int *ids, void *data)
|
int count, int ndata, int *ids, void *data)
|
||||||
{
|
{
|
||||||
auto *lmp = (LAMMPS *) handle;
|
auto *lmp = (LAMMPS *) handle;
|
||||||
@ -3997,7 +3997,7 @@ void lammps_scatter_atoms_subset(void *handle, const char *name, int type,
|
|||||||
void *vptr = lmp->atom->extract(name);
|
void *vptr = lmp->atom->extract(name);
|
||||||
if (!vptr) lmp->error->all(FLERR, Error::NOLASTLINE, "{}(): Unknown property {}", FNERR, name);
|
if (!vptr) lmp->error->all(FLERR, Error::NOLASTLINE, "{}(): Unknown property {}", FNERR, name);
|
||||||
|
|
||||||
if (type == 0) {
|
if (dtype == 0) {
|
||||||
int *vector = nullptr;
|
int *vector = nullptr;
|
||||||
int **array = nullptr;
|
int **array = nullptr;
|
||||||
const int imgpack = (count == 3) && (strcmp(name,"image") == 0);
|
const int imgpack = (count == 3) && (strcmp(name,"image") == 0);
|
||||||
@ -4572,8 +4572,8 @@ given does not have per-atom data.
|
|||||||
* data, "c_id" for per-atom compute data, "d_name" or "i_name" for fix
|
* data, "c_id" for per-atom compute data, "d_name" or "i_name" for fix
|
||||||
* property/atom vectors with *count* = 1, "d2_name" or "i2_name" for fix
|
* property/atom vectors with *count* = 1, "d2_name" or "i2_name" for fix
|
||||||
* property/atom vectors with *count* > 1)
|
* property/atom vectors with *count* > 1)
|
||||||
* \param type 0 for ``int`` values, 1 for ``double`` values
|
* \param dtype 0 for ``int`` values, 1 for ``double`` values
|
||||||
* \param count number of per-atom values (e.g., 1 for *type* or *charge*, 3 for *x* or *f*);
|
* \param count number of per-atom values (e.g., 1 for *type* or *q*, 3 for *x* or *f*);
|
||||||
* use *count* = 3 with *image* if you want the image flags unpacked into
|
* use *count* = 3 with *image* if you want the image flags unpacked into
|
||||||
* (*x*,*y*,*z*) components.
|
* (*x*,*y*,*z*) components.
|
||||||
* \param data per-atom values packed into a one-dimensional array of length
|
* \param data per-atom values packed into a one-dimensional array of length
|
||||||
@ -4593,8 +4593,8 @@ given does not have per-atom data.
|
|||||||
"d_name" or "i_name" for fix property/atom vectors with count = 1
|
"d_name" or "i_name" for fix property/atom vectors with count = 1
|
||||||
"d2_name" or "i2_name" for fix property/atom arrays with count > 1
|
"d2_name" or "i2_name" for fix property/atom arrays with count > 1
|
||||||
will return error if fix/compute isn't atom-based
|
will return error if fix/compute isn't atom-based
|
||||||
type = 0 for integer values, 1 for double values
|
dtype = 0 for integer values, 1 for double values
|
||||||
count = # of per-atom values (e.g., 1 for type or charge, 3 for x or f)
|
count = # of per-atom values (e.g., 1 for type or q, 3 for x or f)
|
||||||
use count = 3 with "image" if want single image flag unpacked into xyz
|
use count = 3 with "image" if want single image flag unpacked into xyz
|
||||||
return atom-based values in 1d data, ordered by count, then by atom ID
|
return atom-based values in 1d data, ordered by count, then by atom ID
|
||||||
(e.g., x[0][0],x[0][1],x[0][2],x[1][0],x[1][1],x[1][2],x[2][0],...)
|
(e.g., x[0][0],x[0][1],x[0][2],x[1][0],x[1][1],x[1][2],x[2][0],...)
|
||||||
@ -4606,7 +4606,7 @@ given does not have per-atom data.
|
|||||||
Allreduce to sum vector into data across all procs
|
Allreduce to sum vector into data across all procs
|
||||||
------------------------------------------------------------------------- */
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
void lammps_gather(void *handle, const char *name, int type, int count, void *data)
|
void lammps_gather(void *handle, const char *name, int dtype, int count, void *data)
|
||||||
{
|
{
|
||||||
auto *lmp = (LAMMPS *) handle;
|
auto *lmp = (LAMMPS *) handle;
|
||||||
if (!lmp || !lmp->error || !lmp->atom || !lmp->memory || !lmp->modify) {
|
if (!lmp || !lmp->error || !lmp->atom || !lmp->memory || !lmp->modify) {
|
||||||
@ -4696,7 +4696,7 @@ void lammps_gather(void *handle, const char *name, int type, int count, void *da
|
|||||||
if (idx < 0)
|
if (idx < 0)
|
||||||
lmp->error->all(FLERR, Error::NOLASTLINE,
|
lmp->error->all(FLERR, Error::NOLASTLINE,
|
||||||
"{}(): Could not find custom per-atom property ID {}", FNERR, propid);
|
"{}(): Could not find custom per-atom property ID {}", FNERR, propid);
|
||||||
if (ltype != type)
|
if (ltype != dtype)
|
||||||
lmp->error->all(FLERR, Error::NOLASTLINE,
|
lmp->error->all(FLERR, Error::NOLASTLINE,
|
||||||
"{}(): Custom per-atom property {} type mismatch", FNERR, propid);
|
"{}(): Custom per-atom property {} type mismatch", FNERR, propid);
|
||||||
if ((count == 1) && (icol != 0))
|
if ((count == 1) && (icol != 0))
|
||||||
@ -4723,7 +4723,7 @@ void lammps_gather(void *handle, const char *name, int type, int count, void *da
|
|||||||
// use atom ID to insert each atom's values into copy
|
// use atom ID to insert each atom's values into copy
|
||||||
// MPI_Allreduce with MPI_SUM to merge into data, ordered by atom ID
|
// MPI_Allreduce with MPI_SUM to merge into data, ordered by atom ID
|
||||||
|
|
||||||
if (type==0) {
|
if (dtype==0) {
|
||||||
int *vector = nullptr;
|
int *vector = nullptr;
|
||||||
int **array = nullptr;
|
int **array = nullptr;
|
||||||
|
|
||||||
@ -4826,16 +4826,16 @@ pre-allocated by the caller to length (*count* :math:`\times` *natoms*), as quer
|
|||||||
|
|
||||||
\endverbatim
|
\endverbatim
|
||||||
*
|
*
|
||||||
* \param handle: pointer to a previously created LAMMPS instance
|
* \param handle pointer to a previously created LAMMPS instance
|
||||||
* \param name: desired quantity (e.g., "x" or "f" for atom properties, "f_id" for per-atom fix
|
* \param name desired quantity (e.g., "x" or "f" for atom properties, "f_id" for per-atom fix
|
||||||
* data, "c_id" for per-atom compute data, "d_name" or "i_name" for fix
|
* data, "c_id" for per-atom compute data, "d_name" or "i_name" for fix
|
||||||
* property/atom vectors with count = 1, "d2_name" or "i2_name" for fix
|
* property/atom vectors with count = 1, "d2_name" or "i2_name" for fix
|
||||||
* property/atom vectors with count > 1)
|
* property/atom vectors with count > 1)
|
||||||
* \param type: 0 for ``int`` values, 1 for ``double`` values
|
* \param dtype 0 for ``int`` values, 1 for ``double`` values
|
||||||
* \param count: number of per-atom values (e.g., 1 for *type* or *charge*, 3 for *x* or *f*);
|
* \param count number of per-atom values (e.g., 1 for *type* or *q*, 3 for *x* or *f*);
|
||||||
* use *count* = 3 with *image* if you want the image flags unpacked into
|
* use *count* = 3 with *image* if you want the image flags unpacked into
|
||||||
* (*x*,*y*,*z*) components.
|
* (*x*,*y*,*z*) components.
|
||||||
* \param data: per-atom values packed into a one-dimensional array of length
|
* \param data per-atom values packed into a one-dimensional array of length
|
||||||
* *natoms* \* *count*.
|
* *natoms* \* *count*.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
@ -4852,8 +4852,8 @@ pre-allocated by the caller to length (*count* :math:`\times` *natoms*), as quer
|
|||||||
"d_name" or "i_name" for fix property/atom vectors with count = 1
|
"d_name" or "i_name" for fix property/atom vectors with count = 1
|
||||||
"d2_name" or "i2_name" for fix property/atom arrays with count > 1
|
"d2_name" or "i2_name" for fix property/atom arrays with count > 1
|
||||||
will return error if fix/compute isn't atom-based
|
will return error if fix/compute isn't atom-based
|
||||||
type = 0 for integer values, 1 for double values
|
dtype = 0 for integer values, 1 for double values
|
||||||
count = # of per-atom values (e.g., 1 for type or charge, 3 for x or f)
|
count = # of per-atom values (e.g., 1 for type or q, 3 for x or f)
|
||||||
use count = 3 with "image" if want single image flag unpacked into xyz
|
use count = 3 with "image" if want single image flag unpacked into xyz
|
||||||
return atom-based values in 1d data, ordered by count, then by atom ID
|
return atom-based values in 1d data, ordered by count, then by atom ID
|
||||||
(e.g., x[0][0],x[0][1],x[0][2],x[1][0],x[1][1],x[1][2],x[2][0],...)
|
(e.g., x[0][0],x[0][1],x[0][2],x[1][0],x[1][1],x[1][2],x[2][0],...)
|
||||||
@ -4865,7 +4865,7 @@ pre-allocated by the caller to length (*count* :math:`\times` *natoms*), as quer
|
|||||||
Allreduce to sum vector into data across all procs
|
Allreduce to sum vector into data across all procs
|
||||||
------------------------------------------------------------------------- */
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
void lammps_gather_concat(void *handle, const char *name, int type, int count, void *data)
|
void lammps_gather_concat(void *handle, const char *name, int dtype, int count, void *data)
|
||||||
{
|
{
|
||||||
auto *lmp = (LAMMPS *) handle;
|
auto *lmp = (LAMMPS *) handle;
|
||||||
if (!lmp || !lmp->error || !lmp->atom || !lmp->memory || !lmp->modify || !lmp->comm) {
|
if (!lmp || !lmp->error || !lmp->atom || !lmp->memory || !lmp->modify || !lmp->comm) {
|
||||||
@ -4953,7 +4953,7 @@ void lammps_gather_concat(void *handle, const char *name, int type, int count, v
|
|||||||
if (idx < 0)
|
if (idx < 0)
|
||||||
lmp->error->all(FLERR, Error::NOLASTLINE,
|
lmp->error->all(FLERR, Error::NOLASTLINE,
|
||||||
"{}(): Could not find custom per-atom property ID {}", FNERR, propid);
|
"{}(): Could not find custom per-atom property ID {}", FNERR, propid);
|
||||||
if (ltype != type)
|
if (ltype != dtype)
|
||||||
lmp->error->all(FLERR, Error::NOLASTLINE,
|
lmp->error->all(FLERR, Error::NOLASTLINE,
|
||||||
"{}(): Custom per-atom property {} type mismatch", FNERR, propid);
|
"{}(): Custom per-atom property {} type mismatch", FNERR, propid);
|
||||||
if ((count == 1) && (icol != 0))
|
if ((count == 1) && (icol != 0))
|
||||||
@ -4985,7 +4985,7 @@ void lammps_gather_concat(void *handle, const char *name, int type, int count, v
|
|||||||
lmp->memory->create(recvcounts,nprocs,"lib/gather:recvcounts");
|
lmp->memory->create(recvcounts,nprocs,"lib/gather:recvcounts");
|
||||||
lmp->memory->create(displs,nprocs,"lib/gather:displs");
|
lmp->memory->create(displs,nprocs,"lib/gather:displs");
|
||||||
|
|
||||||
if (type == 0) {
|
if (dtype == 0) {
|
||||||
int *vector = nullptr;
|
int *vector = nullptr;
|
||||||
int **array = nullptr;
|
int **array = nullptr;
|
||||||
|
|
||||||
@ -5093,20 +5093,19 @@ pre-allocated by the caller to length (*count*\ :math:`{}\times{}`\ *ndata*).
|
|||||||
|
|
||||||
\endverbatim
|
\endverbatim
|
||||||
*
|
*
|
||||||
* \param handle: pointer to a previously created LAMMPS instance
|
* \param handle pointer to a previously created LAMMPS instance
|
||||||
* \param name desired quantity (e.g., "x" or "f" for atom properties, "f_id" for per-atom fix
|
* \param name desired quantity (e.g., "x" or "f" for atom properties, "f_id" for per-atom fix
|
||||||
* data, "c_id" for per-atom compute data, "d_name" or "i_name" for fix
|
* data, "c_id" for per-atom compute data, "d_name" or "i_name" for fix
|
||||||
* property/atom vectors with *count* = 1, "d2_name" or "i2_name" for fix
|
* property/atom vectors with *count* = 1, "d2_name" or "i2_name" for fix
|
||||||
* property/atom vectors with *count* > 1)
|
* property/atom vectors with *count* > 1)
|
||||||
* \param type 0 for ``int`` values, 1 for ``double`` values
|
* \param dtype 0 for ``int`` values, 1 for ``double`` values
|
||||||
* \param count number of per-atom values (e.g., 1 for *type* or *charge*, 3 for *x* or *f*);
|
* \param count number of per-atom values (e.g., 1 for *type* or *q*, 3 for *x* or *f*);
|
||||||
* use *count* = 3 with *image* if you want the image flags unpacked into
|
* use *count* = 3 with *image* if you want the image flags unpacked into
|
||||||
* (*x*,*y*,*z*) components.
|
* (*x*,*y*,*z*) components.
|
||||||
* \param ndata: number of atoms for which to return data (can be all of them)
|
* \param ndata number of atoms for which to return data (can be all of them)
|
||||||
* \param ids: list of *ndata* atom IDs for which to return data
|
* \param ids list of *ndata* atom IDs for which to return data
|
||||||
* \param data per-atom values packed into a one-dimensional array of length
|
* \param data per-atom values packed into a one-dimensional array of length
|
||||||
* *ndata* \* *count*.
|
* *ndata* \* *count*.
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
/* ----------------------------------------------------------------------
|
/* ----------------------------------------------------------------------
|
||||||
Contributing author: Thomas Swinburne (CNRS & CINaM, Marseille, France)
|
Contributing author: Thomas Swinburne (CNRS & CINaM, Marseille, France)
|
||||||
@ -5121,8 +5120,8 @@ pre-allocated by the caller to length (*count*\ :math:`{}\times{}`\ *ndata*).
|
|||||||
"d_name" or "i_name" for fix property/atom vectors with count = 1
|
"d_name" or "i_name" for fix property/atom vectors with count = 1
|
||||||
"d2_name" or "i2_name" for fix property/atom arrays with count > 1
|
"d2_name" or "i2_name" for fix property/atom arrays with count > 1
|
||||||
will return error if fix/compute isn't atom-based
|
will return error if fix/compute isn't atom-based
|
||||||
type = 0 for integer values, 1 for double values
|
dtype = 0 for integer values, 1 for double values
|
||||||
count = # of per-atom values (e.g., 1 for type or charge, 3 for x or f)
|
count = # of per-atom values (e.g., 1 for type or q, 3 for x or f)
|
||||||
use count = 3 with "image" if want single image flag unpacked into xyz
|
use count = 3 with "image" if want single image flag unpacked into xyz
|
||||||
return atom-based values in 1d data, ordered by count, then by atom ID
|
return atom-based values in 1d data, ordered by count, then by atom ID
|
||||||
(e.g., x[0][0],x[0][1],x[0][2],x[1][0],x[1][1],x[1][2],x[2][0],...)
|
(e.g., x[0][0],x[0][1],x[0][2],x[1][0],x[1][1],x[1][2],x[2][0],...)
|
||||||
@ -5134,7 +5133,7 @@ pre-allocated by the caller to length (*count*\ :math:`{}\times{}`\ *ndata*).
|
|||||||
Allreduce to sum vector into data across all procs
|
Allreduce to sum vector into data across all procs
|
||||||
------------------------------------------------------------------------- */
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
void lammps_gather_subset(void *handle, const char *name, int type, int count, int ndata, int *ids,
|
void lammps_gather_subset(void *handle, const char *name, int dtype, int count, int ndata, int *ids,
|
||||||
void *data)
|
void *data)
|
||||||
{
|
{
|
||||||
auto *lmp = (LAMMPS *) handle;
|
auto *lmp = (LAMMPS *) handle;
|
||||||
@ -5225,7 +5224,7 @@ void lammps_gather_subset(void *handle, const char *name, int type, int count, i
|
|||||||
if (idx < 0)
|
if (idx < 0)
|
||||||
lmp->error->all(FLERR, Error::NOLASTLINE,
|
lmp->error->all(FLERR, Error::NOLASTLINE,
|
||||||
"{}(): Could not find custom per-atom property ID {}", FNERR, propid);
|
"{}(): Could not find custom per-atom property ID {}", FNERR, propid);
|
||||||
if (ltype != type)
|
if (ltype != dtype)
|
||||||
lmp->error->all(FLERR, Error::NOLASTLINE,
|
lmp->error->all(FLERR, Error::NOLASTLINE,
|
||||||
"{}(): Custom per-atom property {} type mismatch", FNERR, propid);
|
"{}(): Custom per-atom property {} type mismatch", FNERR, propid);
|
||||||
if ((count == 1) && (icol != 0))
|
if ((count == 1) && (icol != 0))
|
||||||
@ -5253,7 +5252,7 @@ void lammps_gather_subset(void *handle, const char *name, int type, int count, i
|
|||||||
// use atom ID to insert each atom's values into copy
|
// use atom ID to insert each atom's values into copy
|
||||||
// MPI_Allreduce with MPI_SUM to merge into data
|
// MPI_Allreduce with MPI_SUM to merge into data
|
||||||
|
|
||||||
if (type == 0) {
|
if (dtype == 0) {
|
||||||
int *vector = nullptr;
|
int *vector = nullptr;
|
||||||
int **array = nullptr;
|
int **array = nullptr;
|
||||||
const int imgunpack = (count == 3) && (strcmp(name,"image") == 0);
|
const int imgunpack = (count == 3) && (strcmp(name,"image") == 0);
|
||||||
@ -5370,8 +5369,8 @@ x[1][2], x[2][0], :math:`\dots`}); *data* must be of length (*count* :math:`\tim
|
|||||||
* data, "c_id" for per-atom compute data, "d_name" or "i_name" for fix
|
* data, "c_id" for per-atom compute data, "d_name" or "i_name" for fix
|
||||||
* property/atom vectors with *count* = 1, "d2_name" or "i2_name" for fix
|
* property/atom vectors with *count* = 1, "d2_name" or "i2_name" for fix
|
||||||
* property/atom vectors with *count* > 1)
|
* property/atom vectors with *count* > 1)
|
||||||
* \param type 0 for ``int`` values, 1 for ``double`` values
|
* \param dtype 0 for ``int`` values, 1 for ``double`` values
|
||||||
* \param count number of per-atom values (e.g., 1 for *type* or *charge*,
|
* \param count number of per-atom values (e.g., 1 for *type* or *q*,
|
||||||
* 3 for *x* or *f*); use *count* = 3 with *image* if you have
|
* 3 for *x* or *f*); use *count* = 3 with *image* if you have
|
||||||
* a single image flag packed into (*x*,*y*,*z*) components.
|
* a single image flag packed into (*x*,*y*,*z*) components.
|
||||||
* \param data per-atom values packed in a one-dimensional array of length
|
* \param data per-atom values packed in a one-dimensional array of length
|
||||||
@ -5389,8 +5388,8 @@ x[1][2], x[2][0], :math:`\dots`}); *data* must be of length (*count* :math:`\tim
|
|||||||
"d_name" or "i_name" for fix property/atom vectors with count = 1
|
"d_name" or "i_name" for fix property/atom vectors with count = 1
|
||||||
"d2_name" or "i2_name" for fix property/atom arrays with count > 1
|
"d2_name" or "i2_name" for fix property/atom arrays with count > 1
|
||||||
will return error if fix/compute isn't atom-based
|
will return error if fix/compute isn't atom-based
|
||||||
type = 0 for integer values, 1 for double values
|
dtype = 0 for integer values, 1 for double values
|
||||||
count = # of per-atom values (e.g., 1 for type or charge, 3 for x or f)
|
count = # of per-atom values (e.g., 1 for type or q, 3 for x or f)
|
||||||
use count = 3 with "image" if want single image flag unpacked into xyz
|
use count = 3 with "image" if want single image flag unpacked into xyz
|
||||||
return atom-based values in 1d data, ordered by count, then by atom ID
|
return atom-based values in 1d data, ordered by count, then by atom ID
|
||||||
(e.g., x[0][0],x[0][1],x[0][2],x[1][0],x[1][1],x[1][2],x[2][0],...)
|
(e.g., x[0][0],x[0][1],x[0][2],x[1][0],x[1][1],x[1][2],x[2][0],...)
|
||||||
@ -5402,7 +5401,7 @@ x[1][2], x[2][0], :math:`\dots`}); *data* must be of length (*count* :math:`\tim
|
|||||||
Allreduce to sum vector into data across all procs
|
Allreduce to sum vector into data across all procs
|
||||||
------------------------------------------------------------------------- */
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
void lammps_scatter(void *handle, const char *name, int type, int count, void *data)
|
void lammps_scatter(void *handle, const char *name, int dtype, int count, void *data)
|
||||||
{
|
{
|
||||||
auto *lmp = (LAMMPS *) handle;
|
auto *lmp = (LAMMPS *) handle;
|
||||||
if (!lmp || !lmp->error || !lmp->atom || !lmp->memory || !lmp->modify || !lmp->comm) {
|
if (!lmp || !lmp->error || !lmp->atom || !lmp->memory || !lmp->modify || !lmp->comm) {
|
||||||
@ -5495,7 +5494,7 @@ void lammps_scatter(void *handle, const char *name, int type, int count, void *d
|
|||||||
if (idx < 0)
|
if (idx < 0)
|
||||||
lmp->error->all(FLERR, Error::NOLASTLINE,
|
lmp->error->all(FLERR, Error::NOLASTLINE,
|
||||||
"{}(): Could not find custom per-atom property ID {}", FNERR, propid);
|
"{}(): Could not find custom per-atom property ID {}", FNERR, propid);
|
||||||
if (ltype != type)
|
if (ltype != dtype)
|
||||||
lmp->error->all(FLERR, Error::NOLASTLINE,
|
lmp->error->all(FLERR, Error::NOLASTLINE,
|
||||||
"{}(): Custom per-atom property {} type mismatch", FNERR, propid);
|
"{}(): Custom per-atom property {} type mismatch", FNERR, propid);
|
||||||
if ((count == 1) && (icol != 0))
|
if ((count == 1) && (icol != 0))
|
||||||
@ -5518,7 +5517,7 @@ void lammps_scatter(void *handle, const char *name, int type, int count, void *d
|
|||||||
|
|
||||||
if (!vptr) lmp->error->all(FLERR, Error::NOLASTLINE, "{}(): Unknown property {}", name);
|
if (!vptr) lmp->error->all(FLERR, Error::NOLASTLINE, "{}(): Unknown property {}", name);
|
||||||
|
|
||||||
if (type == 0) {
|
if (dtype == 0) {
|
||||||
int *vector = nullptr;
|
int *vector = nullptr;
|
||||||
int **array = nullptr;
|
int **array = nullptr;
|
||||||
const int imgpack = (count == 3) && (strcmp(name,"image") == 0);
|
const int imgpack = (count == 3) && (strcmp(name,"image") == 0);
|
||||||
@ -5606,17 +5605,17 @@ be {1, 100, 57}.
|
|||||||
|
|
||||||
\endverbatim
|
\endverbatim
|
||||||
*
|
*
|
||||||
* \param handle: pointer to a previously created LAMMPS instance
|
* \param handle pointer to a previously created LAMMPS instance
|
||||||
* \param name desired quantity (e.g., "x" or "f" for atom properties, "f_id" for per-atom fix
|
* \param name desired quantity (e.g., "x" or "f" for atom properties, "f_id" for per-atom fix
|
||||||
* data, "c_id" for per-atom compute data, "d_name" or "i_name" for fix
|
* data, "c_id" for per-atom compute data, "d_name" or "i_name" for fix
|
||||||
* property/atom vectors with *count* = 1, "d2_name" or "i2_name" for fix
|
* property/atom vectors with *count* = 1, "d2_name" or "i2_name" for fix
|
||||||
* property/atom vectors with *count* > 1)
|
* property/atom vectors with *count* > 1)
|
||||||
* \param type: 0 for ``int`` values, 1 for ``double`` values
|
* \param dtype 0 for ``int`` values, 1 for ``double`` values
|
||||||
* \param count: number of per-atom values (e.g., 1 for *type* or *charge*,
|
* \param count number of per-atom values (e.g., 1 for *type* or *q*,
|
||||||
* 3 for *x* or *f*); use *count* = 3 with "image" if you want
|
* 3 for *x* or *f*); use *count* = 3 with "image" if you want
|
||||||
* single image flags unpacked into (*x*,*y*,*z*)
|
* single image flags unpacked into (*x*,*y*,*z*)
|
||||||
* \param ndata: number of atoms listed in *ids* and *data* arrays
|
* \param ndata number of atoms listed in *ids* and *data* arrays
|
||||||
* \param ids: list of *ndata* atom IDs to scatter data to
|
* \param ids list of *ndata* atom IDs to scatter data to
|
||||||
* \param data per-atom values packed in a 1-dimensional array of length
|
* \param data per-atom values packed in a 1-dimensional array of length
|
||||||
* *ndata* \* *count*.
|
* *ndata* \* *count*.
|
||||||
*
|
*
|
||||||
@ -5631,8 +5630,8 @@ be {1, 100, 57}.
|
|||||||
"d_name" or "i_name" for fix property/atom quantities
|
"d_name" or "i_name" for fix property/atom quantities
|
||||||
"f_fix", "c_compute" for fixes / computes
|
"f_fix", "c_compute" for fixes / computes
|
||||||
will return error if fix/compute doesn't isn't atom-based
|
will return error if fix/compute doesn't isn't atom-based
|
||||||
type = 0 for integer values, 1 for double values
|
dtype = 0 for integer values, 1 for double values
|
||||||
count = # of per-atom values (e.g., 1 for type or charge, 3 for x or f)
|
count = # of per-atom values (e.g., 1 for type or q, 3 for x or f)
|
||||||
use count = 3 with "image" for xyz to be packed into single image flag
|
use count = 3 with "image" for xyz to be packed into single image flag
|
||||||
ndata = # of atoms in ids and data (could be all atoms)
|
ndata = # of atoms in ids and data (could be all atoms)
|
||||||
ids = list of Ndata atom IDs to scatter data to
|
ids = list of Ndata atom IDs to scatter data to
|
||||||
@ -5643,7 +5642,7 @@ be {1, 100, 57}.
|
|||||||
loop over Ndata, if I own atom ID, set its values from data
|
loop over Ndata, if I own atom ID, set its values from data
|
||||||
------------------------------------------------------------------------- */
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
void lammps_scatter_subset(void *handle, const char *name, int type, int count, int ndata,
|
void lammps_scatter_subset(void *handle, const char *name, int dtype, int count, int ndata,
|
||||||
int *ids, void *data)
|
int *ids, void *data)
|
||||||
{
|
{
|
||||||
auto *lmp = (LAMMPS *) handle;
|
auto *lmp = (LAMMPS *) handle;
|
||||||
@ -5733,7 +5732,7 @@ void lammps_scatter_subset(void *handle, const char *name, int type, int count,
|
|||||||
if (idx < 0)
|
if (idx < 0)
|
||||||
lmp->error->all(FLERR, Error::NOLASTLINE,
|
lmp->error->all(FLERR, Error::NOLASTLINE,
|
||||||
"{}(): Could not find custom per-atom property ID {}", FNERR, propid);
|
"{}(): Could not find custom per-atom property ID {}", FNERR, propid);
|
||||||
if (ltype != type)
|
if (ltype != dtype)
|
||||||
lmp->error->all(FLERR, Error::NOLASTLINE,
|
lmp->error->all(FLERR, Error::NOLASTLINE,
|
||||||
"{}(): Custom per-atom property {} type mismatch", FNERR, propid);
|
"{}(): Custom per-atom property {} type mismatch", FNERR, propid);
|
||||||
if ((count == 1) && (icol != 0))
|
if ((count == 1) && (icol != 0))
|
||||||
@ -5756,7 +5755,7 @@ void lammps_scatter_subset(void *handle, const char *name, int type, int count,
|
|||||||
|
|
||||||
if (!vptr) lmp->error->all(FLERR, Error::NOLASTLINE, "{}(): Unknown property {}", name);
|
if (!vptr) lmp->error->all(FLERR, Error::NOLASTLINE, "{}(): Unknown property {}", name);
|
||||||
|
|
||||||
if (type == 0) {
|
if (dtype == 0) {
|
||||||
int *vector = nullptr;
|
int *vector = nullptr;
|
||||||
int **array = nullptr;
|
int **array = nullptr;
|
||||||
const int imgpack = (count == 3) && (strcmp(name,"image") == 0);
|
const int imgpack = (count == 3) && (strcmp(name,"image") == 0);
|
||||||
|
|||||||
@ -1 +1,2 @@
|
|||||||
#define LAMMPS_VERSION "2 Apr 2025"
|
#define LAMMPS_VERSION "2 Apr 2025"
|
||||||
|
#define LAMMPS_UPDATE "Development"
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
cmake_minimum_required(VERSION 3.16)
|
cmake_minimum_required(VERSION 3.16)
|
||||||
|
|
||||||
project(lammps-gui VERSION 1.6.12 LANGUAGES CXX)
|
project(lammps-gui VERSION 1.6.13 LANGUAGES CXX)
|
||||||
|
|
||||||
set(CMAKE_AUTOUIC ON)
|
set(CMAKE_AUTOUIC ON)
|
||||||
set(CMAKE_AUTOMOC ON)
|
set(CMAKE_AUTOMOC ON)
|
||||||
|
|||||||
@ -15,6 +15,8 @@ LAMMPS-GUI TODO list:
|
|||||||
colors to individual atom types.
|
colors to individual atom types.
|
||||||
- Support color by property (e.g. scan computes or fixes with per-atom data), define colormaps etc.
|
- Support color by property (e.g. scan computes or fixes with per-atom data), define colormaps etc.
|
||||||
- Add a "Diameters" dialog where diamaters can by specified by atom type
|
- Add a "Diameters" dialog where diamaters can by specified by atom type
|
||||||
|
- figure out how widgets can be resized to fraction of available screen size.
|
||||||
|
- figure out stacking order of frames and whether it can be more flexible
|
||||||
|
|
||||||
- implement indenting regions for (nested) loops?
|
- implement indenting regions for (nested) loops?
|
||||||
- implement data file manager GUI with the following features:
|
- implement data file manager GUI with the following features:
|
||||||
|
|||||||
@ -55,6 +55,12 @@
|
|||||||
</provides>
|
</provides>
|
||||||
|
|
||||||
<releases>
|
<releases>
|
||||||
|
<release version="1.6.13" timestamp="1743734509">
|
||||||
|
<description>
|
||||||
|
Change working directory to user's home dir if initial directory is "/" or the Application folder
|
||||||
|
Add preferences option to set https proxy, if not already set via environment variable
|
||||||
|
</description>
|
||||||
|
</release>
|
||||||
<release version="1.6.12" timestamp="1734890080">
|
<release version="1.6.12" timestamp="1734890080">
|
||||||
<description>
|
<description>
|
||||||
Update Tutorial menu entries to cover all 8 tutorials
|
Update Tutorial menu entries to cover all 8 tutorials
|
||||||
|
|||||||
@ -389,6 +389,11 @@ LammpsGui::LammpsGui(QWidget *parent, const QString &filename) :
|
|||||||
ui->textEdit->setReformatOnReturn(settings.value("return", false).toBool());
|
ui->textEdit->setReformatOnReturn(settings.value("return", false).toBool());
|
||||||
ui->textEdit->setAutoComplete(settings.value("automatic", true).toBool());
|
ui->textEdit->setAutoComplete(settings.value("automatic", true).toBool());
|
||||||
settings.endGroup();
|
settings.endGroup();
|
||||||
|
|
||||||
|
// apply https proxy setting: prefer environment variable or fall back to preferences value
|
||||||
|
auto https_proxy = QString::fromLocal8Bit(qgetenv("https_proxy"));
|
||||||
|
if (https_proxy.isEmpty()) https_proxy = settings.value("https_proxy", "").toString();
|
||||||
|
if (!https_proxy.isEmpty()) lammps.command(QString("shell putenv https_proxy=") + https_proxy);
|
||||||
}
|
}
|
||||||
|
|
||||||
LammpsGui::~LammpsGui()
|
LammpsGui::~LammpsGui()
|
||||||
@ -1238,6 +1243,11 @@ void LammpsGui::do_run(bool use_buffer)
|
|||||||
runner->setup_run(&lammps, nullptr, fname);
|
runner->setup_run(&lammps, nullptr, fname);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// apply https proxy setting: prefer environment variable or fall back to preferences value
|
||||||
|
auto https_proxy = QString::fromLocal8Bit(qgetenv("https_proxy"));
|
||||||
|
if (https_proxy.isEmpty()) https_proxy = settings.value("https_proxy", "").toString();
|
||||||
|
if (!https_proxy.isEmpty()) lammps.command(QString("shell putenv https_proxy=") + https_proxy);
|
||||||
|
|
||||||
connect(runner, &LammpsRunner::resultReady, this, &LammpsGui::run_done);
|
connect(runner, &LammpsRunner::resultReady, this, &LammpsGui::run_done);
|
||||||
connect(runner, &LammpsRunner::finished, runner, &QObject::deleteLater);
|
connect(runner, &LammpsRunner::finished, runner, &QObject::deleteLater);
|
||||||
runner->start();
|
runner->start();
|
||||||
@ -2020,9 +2030,13 @@ void LammpsGui::setup_tutorial(int tutno, const QString &dir, bool purgedir, boo
|
|||||||
lammps.command("clear");
|
lammps.command("clear");
|
||||||
lammps.command(QString("shell cd " + dir));
|
lammps.command(QString("shell cd " + dir));
|
||||||
|
|
||||||
|
// apply https proxy setting: prefer environment variable or fall back to preferences value
|
||||||
|
auto https_proxy = QString::fromLocal8Bit(qgetenv("https_proxy"));
|
||||||
|
if (https_proxy.isEmpty()) https_proxy = QSettings().value("https_proxy", "").toString();
|
||||||
|
if (!https_proxy.isEmpty()) lammps.command(QString("shell putenv https_proxy=") + https_proxy);
|
||||||
|
|
||||||
// download and process manifest for selected tutorial
|
// download and process manifest for selected tutorial
|
||||||
// must check for error after download, e.g. when there is no network.
|
// must check for error after download, e.g. when there is no network.
|
||||||
|
|
||||||
lammps.command(geturl.arg(tutno).arg(".manifest"));
|
lammps.command(geturl.arg(tutno).arg(".manifest"));
|
||||||
if (lammps.has_error()) {
|
if (lammps.has_error()) {
|
||||||
lammps.get_last_error_message(errorbuf, BUFLEN);
|
lammps.get_last_error_message(errorbuf, BUFLEN);
|
||||||
|
|||||||
@ -174,6 +174,9 @@ void Preferences::accept()
|
|||||||
spin = tabWidget->findChild<QSpinBox *>("updchart");
|
spin = tabWidget->findChild<QSpinBox *>("updchart");
|
||||||
if (spin) settings->setValue("updchart", spin->value());
|
if (spin) settings->setValue("updchart", spin->value());
|
||||||
|
|
||||||
|
field = tabWidget->findChild<QLineEdit *>("proxyval");
|
||||||
|
if (field) settings->setValue("https_proxy", field->text());
|
||||||
|
|
||||||
if (need_relaunch) {
|
if (need_relaunch) {
|
||||||
QMessageBox msg(QMessageBox::Information, QString("Relaunching LAMMPS-GUI"),
|
QMessageBox msg(QMessageBox::Information, QString("Relaunching LAMMPS-GUI"),
|
||||||
QString("LAMMPS library plugin path was changed.\n"
|
QString("LAMMPS library plugin path was changed.\n"
|
||||||
@ -262,7 +265,7 @@ GeneralTab::GeneralTab(QSettings *_settings, LammpsWrapper *_lammps, QWidget *pa
|
|||||||
connect(getallfont, &QPushButton::released, this, &GeneralTab::newallfont);
|
connect(getallfont, &QPushButton::released, this, &GeneralTab::newallfont);
|
||||||
connect(gettextfont, &QPushButton::released, this, &GeneralTab::newtextfont);
|
connect(gettextfont, &QPushButton::released, this, &GeneralTab::newtextfont);
|
||||||
|
|
||||||
auto *freqlabel = new QLabel("Data update interval (ms)");
|
auto *freqlabel = new QLabel("Data update interval (ms):");
|
||||||
auto *freqval = new QSpinBox;
|
auto *freqval = new QSpinBox;
|
||||||
freqval->setRange(1, 1000);
|
freqval->setRange(1, 1000);
|
||||||
freqval->setStepType(QAbstractSpinBox::AdaptiveDecimalStepType);
|
freqval->setStepType(QAbstractSpinBox::AdaptiveDecimalStepType);
|
||||||
@ -271,7 +274,7 @@ GeneralTab::GeneralTab(QSettings *_settings, LammpsWrapper *_lammps, QWidget *pa
|
|||||||
gridlayout->addWidget(freqlabel, 1, 0);
|
gridlayout->addWidget(freqlabel, 1, 0);
|
||||||
gridlayout->addWidget(freqval, 1, 1);
|
gridlayout->addWidget(freqval, 1, 1);
|
||||||
|
|
||||||
auto *chartlabel = new QLabel("Charts update interval (ms)");
|
auto *chartlabel = new QLabel("Charts update interval (ms):");
|
||||||
auto *chartval = new QSpinBox;
|
auto *chartval = new QSpinBox;
|
||||||
chartval->setRange(1, 5000);
|
chartval->setRange(1, 5000);
|
||||||
chartval->setStepType(QAbstractSpinBox::AdaptiveDecimalStepType);
|
chartval->setStepType(QAbstractSpinBox::AdaptiveDecimalStepType);
|
||||||
@ -280,6 +283,19 @@ GeneralTab::GeneralTab(QSettings *_settings, LammpsWrapper *_lammps, QWidget *pa
|
|||||||
gridlayout->addWidget(chartlabel, 2, 0);
|
gridlayout->addWidget(chartlabel, 2, 0);
|
||||||
gridlayout->addWidget(chartval, 2, 1);
|
gridlayout->addWidget(chartval, 2, 1);
|
||||||
|
|
||||||
|
auto *proxylabel = new QLabel("HTTPS proxy setting (empty for no proxy):");
|
||||||
|
gridlayout->addWidget(proxylabel, 3, 0);
|
||||||
|
|
||||||
|
auto https_proxy = QString::fromLocal8Bit(qgetenv("https_proxy"));
|
||||||
|
if (https_proxy.isEmpty()) {
|
||||||
|
https_proxy = settings->value("https_proxy", "").toString();
|
||||||
|
auto *proxyedit = new QLineEdit(https_proxy);
|
||||||
|
proxyedit->setObjectName("proxyval");
|
||||||
|
gridlayout->addWidget(proxyedit, 3, 1);
|
||||||
|
} else {
|
||||||
|
gridlayout->addWidget(new QLabel(https_proxy), 3, 1);
|
||||||
|
}
|
||||||
|
|
||||||
layout->addWidget(echo);
|
layout->addWidget(echo);
|
||||||
layout->addWidget(cite);
|
layout->addWidget(cite);
|
||||||
layout->addWidget(logv);
|
layout->addWidget(logv);
|
||||||
|
|||||||
@ -5,7 +5,6 @@
|
|||||||
fun:malloc
|
fun:malloc
|
||||||
fun:strdup
|
fun:strdup
|
||||||
...
|
...
|
||||||
fun:_ZN7testing8UnitTest3RunEv
|
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
Run_register_state_1
|
Run_register_state_1
|
||||||
@ -14,7 +13,6 @@
|
|||||||
fun:malloc
|
fun:malloc
|
||||||
fun:register_state
|
fun:register_state
|
||||||
...
|
...
|
||||||
fun:_ZN7testing8TestSuite3RunEv.part.0
|
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
Run_register_state_2
|
Run_register_state_2
|
||||||
@ -23,5 +21,4 @@
|
|||||||
fun:malloc
|
fun:malloc
|
||||||
fun:register_state
|
fun:register_state
|
||||||
...
|
...
|
||||||
fun:_ZN7testing8TestSuite3RunEv
|
|
||||||
}
|
}
|
||||||
|
|||||||
17
tools/valgrind/Kokkos.supp
Normal file
17
tools/valgrind/Kokkos.supp
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
{
|
||||||
|
Kokkos_OpenMP_init1
|
||||||
|
Memcheck:Leak
|
||||||
|
match-leak-kinds: reachable
|
||||||
|
fun:*
|
||||||
|
fun:_ZNK6Kokkos9HostSpace13impl_allocateEPKcmm28Kokkos_Profiling_SpaceHandle
|
||||||
|
fun:_ZNK6Kokkos9HostSpace8allocateEPKcmm
|
||||||
|
fun:_ZN6Kokkos4Impl14OpenMPInternal18resize_thread_dataEmmmm
|
||||||
|
fun:_ZN6Kokkos4Impl14OpenMPInternal10initializeEi
|
||||||
|
fun:_ZN6Kokkos4Impl16ExecSpaceManager17initialize_spacesERKNS_22InitializationSettingsE
|
||||||
|
fun:initialize_backends
|
||||||
|
fun:initialize_internal
|
||||||
|
fun:_ZN6Kokkos10initializeERKNS_22InitializationSettingsE
|
||||||
|
fun:_ZN9LAMMPS_NS9KokkosLMPC1EPNS_6LAMMPSEiPPc
|
||||||
|
...
|
||||||
|
}
|
||||||
|
|
||||||
140
tools/valgrind/LLVM.supp
Normal file
140
tools/valgrind/LLVM.supp
Normal file
@ -0,0 +1,140 @@
|
|||||||
|
{
|
||||||
|
LLVM_addOption1
|
||||||
|
Memcheck:Leak
|
||||||
|
match-leak-kinds: reachable
|
||||||
|
fun:*
|
||||||
|
fun:*
|
||||||
|
fun:Allocate
|
||||||
|
...
|
||||||
|
fun:insert
|
||||||
|
...
|
||||||
|
fun:forEachSubCommand
|
||||||
|
fun:addOption
|
||||||
|
...
|
||||||
|
fun:call_init
|
||||||
|
fun:call_init
|
||||||
|
fun:_dl_init
|
||||||
|
obj:*
|
||||||
|
obj:*
|
||||||
|
obj:*
|
||||||
|
obj:*
|
||||||
|
}
|
||||||
|
{
|
||||||
|
LLVM_addOption2
|
||||||
|
Memcheck:Leak
|
||||||
|
match-leak-kinds: reachable
|
||||||
|
fun:*
|
||||||
|
fun:*
|
||||||
|
fun:Allocate
|
||||||
|
...
|
||||||
|
fun:insert
|
||||||
|
...
|
||||||
|
fun:call_init
|
||||||
|
fun:call_init
|
||||||
|
fun:_dl_init
|
||||||
|
fun:forEachSubCommand
|
||||||
|
fun:addOption
|
||||||
|
...
|
||||||
|
fun:call_init
|
||||||
|
fun:call_init
|
||||||
|
fun:_dl_init
|
||||||
|
obj:*
|
||||||
|
obj:*
|
||||||
|
obj:*
|
||||||
|
obj:*
|
||||||
|
obj:*
|
||||||
|
}
|
||||||
|
{
|
||||||
|
LLVM_addOption3
|
||||||
|
Memcheck:Leak
|
||||||
|
match-leak-kinds: reachable
|
||||||
|
fun:calloc
|
||||||
|
fun:safe_calloc
|
||||||
|
fun:insert
|
||||||
|
...
|
||||||
|
fun:forEachSubCommand
|
||||||
|
fun:addOption
|
||||||
|
...
|
||||||
|
fun:call_init
|
||||||
|
fun:call_init
|
||||||
|
fun:_dl_init
|
||||||
|
obj:*
|
||||||
|
obj:*
|
||||||
|
obj:*
|
||||||
|
}
|
||||||
|
{
|
||||||
|
LLVM_addOption4
|
||||||
|
Memcheck:Leak
|
||||||
|
match-leak-kinds: reachable
|
||||||
|
fun:calloc
|
||||||
|
fun:safe_calloc
|
||||||
|
...
|
||||||
|
fun:insert
|
||||||
|
...
|
||||||
|
fun:forEachSubCommand
|
||||||
|
fun:addOption
|
||||||
|
...
|
||||||
|
fun:call_init
|
||||||
|
fun:call_init
|
||||||
|
fun:_dl_init
|
||||||
|
obj:*
|
||||||
|
obj:*
|
||||||
|
obj:*
|
||||||
|
}
|
||||||
|
{
|
||||||
|
LLVM_insert1
|
||||||
|
Memcheck:Leak
|
||||||
|
match-leak-kinds: reachable
|
||||||
|
fun:*
|
||||||
|
fun:*
|
||||||
|
fun:Allocate
|
||||||
|
...
|
||||||
|
fun:insert
|
||||||
|
...
|
||||||
|
fun:call_init
|
||||||
|
fun:call_init
|
||||||
|
fun:_dl_init
|
||||||
|
obj:*
|
||||||
|
obj:*
|
||||||
|
obj:*
|
||||||
|
obj:*
|
||||||
|
obj:*
|
||||||
|
}
|
||||||
|
{
|
||||||
|
LLVM_init1
|
||||||
|
Memcheck:Leak
|
||||||
|
match-leak-kinds: reachable
|
||||||
|
fun:*
|
||||||
|
fun:call
|
||||||
|
...
|
||||||
|
fun:call_init
|
||||||
|
fun:call_init
|
||||||
|
fun:_dl_init
|
||||||
|
obj:*
|
||||||
|
obj:*
|
||||||
|
obj:*
|
||||||
|
obj:*
|
||||||
|
obj:*
|
||||||
|
}
|
||||||
|
{
|
||||||
|
LLVM_register1
|
||||||
|
Memcheck:Leak
|
||||||
|
match-leak-kinds: reachable
|
||||||
|
fun:*
|
||||||
|
fun:*
|
||||||
|
fun:*
|
||||||
|
fun:*
|
||||||
|
fun:*
|
||||||
|
fun:registerCategory
|
||||||
|
...
|
||||||
|
fun:Option
|
||||||
|
...
|
||||||
|
fun:call_init
|
||||||
|
fun:call_init
|
||||||
|
fun:_dl_init
|
||||||
|
obj:*
|
||||||
|
obj:*
|
||||||
|
obj:*
|
||||||
|
obj:*
|
||||||
|
obj:*
|
||||||
|
}
|
||||||
@ -10,7 +10,7 @@
|
|||||||
fun:MPIDI_OFI_init_local
|
fun:MPIDI_OFI_init_local
|
||||||
...
|
...
|
||||||
fun:PMPI_Init
|
fun:PMPI_Init
|
||||||
fun:main
|
...
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
MPICH_MPI_init2
|
MPICH_MPI_init2
|
||||||
@ -25,7 +25,7 @@
|
|||||||
fun:MPIDI_OFI_init_local
|
fun:MPIDI_OFI_init_local
|
||||||
...
|
...
|
||||||
fun:PMPI_Init
|
fun:PMPI_Init
|
||||||
fun:main
|
...
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
MPICH_MPI_init3
|
MPICH_MPI_init3
|
||||||
@ -37,7 +37,7 @@
|
|||||||
fun:MPIDI_OFI_init_local
|
fun:MPIDI_OFI_init_local
|
||||||
...
|
...
|
||||||
fun:PMPI_Init
|
fun:PMPI_Init
|
||||||
fun:main
|
...
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
MPICH_MPI_init4
|
MPICH_MPI_init4
|
||||||
@ -51,7 +51,7 @@
|
|||||||
fun:MPIDI_Init.constprop.0
|
fun:MPIDI_Init.constprop.0
|
||||||
...
|
...
|
||||||
fun:PMPI_Init
|
fun:PMPI_Init
|
||||||
fun:main
|
...
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
MPICH_MPI_init5
|
MPICH_MPI_init5
|
||||||
@ -65,7 +65,7 @@
|
|||||||
fun:MPID_Init.constprop.0
|
fun:MPID_Init.constprop.0
|
||||||
...
|
...
|
||||||
fun:PMPI_Init
|
fun:PMPI_Init
|
||||||
fun:main
|
...
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
MPICH_MPI_init6
|
MPICH_MPI_init6
|
||||||
@ -79,5 +79,45 @@
|
|||||||
...
|
...
|
||||||
obj:*
|
obj:*
|
||||||
fun:PMPI_Init
|
fun:PMPI_Init
|
||||||
fun:main
|
...
|
||||||
|
}
|
||||||
|
{
|
||||||
|
MPICH_MPI_init7
|
||||||
|
Memcheck:Param
|
||||||
|
socketcall.sendto(msg)
|
||||||
|
fun:__libc_send
|
||||||
|
fun:send
|
||||||
|
...
|
||||||
|
fun:psmx3_sep_open
|
||||||
|
...
|
||||||
|
fun:PMPI_Init
|
||||||
|
...
|
||||||
|
}
|
||||||
|
{
|
||||||
|
MPICH_MPI_init8
|
||||||
|
Memcheck:Param
|
||||||
|
socketcall.sendto(msg)
|
||||||
|
fun:__libc_send
|
||||||
|
fun:send
|
||||||
|
...
|
||||||
|
fun:psmx3_sep_close
|
||||||
|
...
|
||||||
|
fun:MPID_Finalize
|
||||||
|
fun:MPII_Finalize
|
||||||
|
fun:*
|
||||||
|
fun:*
|
||||||
|
fun:PMPI_Finalize
|
||||||
|
...
|
||||||
|
}
|
||||||
|
{
|
||||||
|
MPICH_MPI_init9
|
||||||
|
Memcheck:Leak
|
||||||
|
match-leak-kinds: definite
|
||||||
|
fun:calloc
|
||||||
|
fun:psmx3_recv_generic
|
||||||
|
...
|
||||||
|
fun:MPIDI_OFI_init_local
|
||||||
|
...
|
||||||
|
fun:PMPI_Init
|
||||||
|
...
|
||||||
}
|
}
|
||||||
|
|||||||
@ -31,7 +31,6 @@
|
|||||||
obj:/usr/lib*/libgomp.so.1*
|
obj:/usr/lib*/libgomp.so.1*
|
||||||
fun:GOMP_parallel
|
fun:GOMP_parallel
|
||||||
...
|
...
|
||||||
fun:main
|
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
OpenMP_init_part3
|
OpenMP_init_part3
|
||||||
@ -42,7 +41,6 @@
|
|||||||
obj:/usr/lib*/libgomp.so.1*
|
obj:/usr/lib*/libgomp.so.1*
|
||||||
fun:omp_set_num_threads
|
fun:omp_set_num_threads
|
||||||
...
|
...
|
||||||
fun:main
|
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
OpenMP_init_part4
|
OpenMP_init_part4
|
||||||
@ -54,7 +52,6 @@
|
|||||||
obj:/usr/lib64/libomp.so
|
obj:/usr/lib64/libomp.so
|
||||||
fun:omp_set_num_threads
|
fun:omp_set_num_threads
|
||||||
...
|
...
|
||||||
fun:_ZN9LAMMPS_NS6LAMMPSC1EiPPci
|
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
OpenMP_init_part5
|
OpenMP_init_part5
|
||||||
@ -66,7 +63,6 @@
|
|||||||
obj:/usr/lib64/libomp.so
|
obj:/usr/lib64/libomp.so
|
||||||
fun:omp_set_num_threads
|
fun:omp_set_num_threads
|
||||||
...
|
...
|
||||||
fun:main
|
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
OpenMP_init_part6
|
OpenMP_init_part6
|
||||||
|
|||||||
@ -7,7 +7,7 @@
|
|||||||
...
|
...
|
||||||
fun:ompi_mpi_init
|
fun:ompi_mpi_init
|
||||||
fun:PMPI_Init
|
fun:PMPI_Init
|
||||||
fun:main
|
...
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
OpenMPI_MPI_init2
|
OpenMPI_MPI_init2
|
||||||
@ -33,7 +33,7 @@
|
|||||||
...
|
...
|
||||||
fun:ompi_mpi_init
|
fun:ompi_mpi_init
|
||||||
fun:PMPI_Init
|
fun:PMPI_Init
|
||||||
fun:main
|
...
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
OpenMPI_MPI_init4
|
OpenMPI_MPI_init4
|
||||||
@ -43,7 +43,7 @@
|
|||||||
...
|
...
|
||||||
fun:ompi_mpi_init
|
fun:ompi_mpi_init
|
||||||
fun:PMPI_Init
|
fun:PMPI_Init
|
||||||
fun:main
|
...
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
OpenMPI_MPI_init5
|
OpenMPI_MPI_init5
|
||||||
@ -68,7 +68,7 @@
|
|||||||
fun:opal_progress
|
fun:opal_progress
|
||||||
fun:ompi_mpi_init
|
fun:ompi_mpi_init
|
||||||
fun:PMPI_Init
|
fun:PMPI_Init
|
||||||
fun:main
|
...
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
OpenMPI_MPI_init7
|
OpenMPI_MPI_init7
|
||||||
|
|||||||
@ -5,15 +5,34 @@ and fixing real issues. When using CMake, these are automatically included
|
|||||||
when running "ctest -T memcheck". To manually add them to do a memory check
|
when running "ctest -T memcheck". To manually add them to do a memory check
|
||||||
on running LAMMPS, use a command line like following:
|
on running LAMMPS, use a command line like following:
|
||||||
|
|
||||||
valgrind --show-leak-kinds=all --track-origins=yes \
|
valgrind --leak-check=full --show-leak-kinds=all --track-origins=yes \
|
||||||
--suppressions=/path/to/lammps/tools/valgrind/OpenMP.supp \
|
--suppressions=/path/to/lammps/tools/valgrind/OpenMP.supp \
|
||||||
--suppressions=/path/to/lammps/tools/valgrind/OpenMPI.supp \
|
--suppressions=/path/to/lammps/tools/valgrind/OpenMPI.supp \
|
||||||
--suppressions=/path/to/lammps/tools/valgrind/MPICH.supp \
|
--suppressions=/path/to/lammps/tools/valgrind/MPICH.supp \
|
||||||
|
--suppressions=/path/to/lammps/tools/valgrind/LLVM.supp \
|
||||||
--suppressions=/path/to/lammps/tools/valgrind/Python3.supp \
|
--suppressions=/path/to/lammps/tools/valgrind/Python3.supp \
|
||||||
--suppressions=/path/to/lammps/tools/valgrind/GTest.supp \
|
--suppressions=/path/to/lammps/tools/valgrind/GTest.supp \
|
||||||
|
--suppressions=/path/to/lammps/tools/valgrind/Kokkos.supp \
|
||||||
--suppressions=/path/to/lammps/tools/valgrind/FlexiBLAS.supp \
|
--suppressions=/path/to/lammps/tools/valgrind/FlexiBLAS.supp \
|
||||||
--suppressions=/path/to/lammps/tools/valgrind/readline.supp \
|
--suppressions=/path/to/lammps/tools/valgrind/readline.supp \
|
||||||
lmp -in in.melt
|
lmp -in in.melt
|
||||||
|
|
||||||
Last update: 2022-08-11
|
Or you can create a file $HOME/.valgrindrc with one option per line:
|
||||||
|
|
||||||
|
--leak-check=full
|
||||||
|
--show-leak-kinds=all
|
||||||
|
--track-origins=yes
|
||||||
|
--suppressions=/path/to/lammps/tools/valgrind/OpenMP.supp
|
||||||
|
--suppressions=/path/to/lammps/tools/valgrind/OpenMPI.supp
|
||||||
|
--suppressions=/path/to/lammps/tools/valgrind/MPICH.supp
|
||||||
|
--suppressions=/path/to/lammps/tools/valgrind/LLVM.supp
|
||||||
|
--suppressions=/path/to/lammps/tools/valgrind/GTest.supp
|
||||||
|
--suppressions=/path/to/lammps/tools/valgrind/Kokkos.supp
|
||||||
|
--suppressions=/path/to/lammps/tools/valgrind/FlexiBLAS.supp
|
||||||
|
--suppressions=/path/to/lammps/tools/valgrind/readline.supp
|
||||||
|
--suppressions=/path/to/lammps/tools/valgrind/Python3.supp
|
||||||
|
|
||||||
|
These options will be automatically added to the valgrind
|
||||||
|
command line, so it becomes: valgrind lmp -in in.melt
|
||||||
|
|
||||||
|
Last update: 2025-04-04
|
||||||
|
|||||||
Reference in New Issue
Block a user