Merge branch 'develop' of https://www.github.com/lammps/lammps into lubricate

This commit is contained in:
Chris Knight
2024-10-02 15:27:39 +00:00
143 changed files with 4132 additions and 2203 deletions

View File

@ -3,71 +3,70 @@ Running LAMMPS on Windows
To run a serial (non-MPI) executable, follow these steps:
* Get a command prompt by going to Start->Run... ,
then typing "cmd".
* Move to the directory where you have your input script,
* Install a LAMMPS installer package from https://packages.lammps.org/windows.html
* Open the "Command Prompt" or "Terminal" app.
* Change to the directory where you have your input script,
(e.g. by typing: cd "Documents").
* At the command prompt, type "lmp -in in.file", where
in.file is the name of your LAMMPS input script.
* At the command prompt, type "lmp -in in.file.lmp", where
``in.file.lmp`` is the name of your LAMMPS input script.
Note that the serial executable includes support for multi-threading
parallelization from the styles in the OPENMP packages. To run with
4 threads, you can type this:
parallelization from the styles in the OPENMP and KOKKOS packages.
To run with 4 threads, you can type this:
.. code-block:: bash
lmp -in in.lj -pk omp 4 -sf omp
lmp -in in.lj.lmp -pk omp 4 -sf omp
lmp -in in.lj.lmp -k on t 4 -sf kk
Alternately, you can also install a package with LAMMPS-GUI included and
open the LAMMPS-GUI app (the package includes the command line version
of LAMMPS as well) and open the input file in the GUI and run it from
there. For details on LAMMPS-GUI, see :doc:`Howto_lammps_gui`.
----------
For the MPI executable, which allows you to run LAMMPS under Windows
in parallel, follow these steps.
For the MS-MPI executables, which allow you to run LAMMPS under Windows
in parallel using MPI rather than multi-threading, follow these steps.
Download and install a compatible MPI library binary package:
* for 32-bit Windows: `mpich2-1.4.1p1-win-ia32.msi <https://download.lammps.org/thirdparty/mpich2-1.4.1p1-win-ia32.msi>`_
* for 64-bit Windows: `mpich2-1.4.1p1-win-x86-64.msi <https://download.lammps.org/thirdparty/mpich2-1.4.1p1-win-x86-64.msi>`_
The LAMMPS Windows installer packages will automatically adjust your
path for the default location of this MPI package. After the
installation of the MPICH2 software, it needs to be integrated into
the system. For this you need to start a Command Prompt in
*Administrator Mode* (right click on the icon and select it). Change
into the MPICH2 installation directory, then into the subdirectory
**bin** and execute **smpd.exe -install**\ . Exit the command window.
* Get a new, regular command prompt by going to Start->Run... ,
then typing "cmd".
* Move to the directory where you have your input file
(e.g. by typing: cd "Documents").
Download and install the MS-MPI runtime package ``msmpisetup.exe`` from
https://www.microsoft.com/en-us/download/details.aspx?id=105289 (Note
that the ``msmpisdk.msi`` is **only** required for **compilation** of
LAMMPS from source on Windows using Microsoft Visual Studio). After
installation of MS-MPI perform a reboot.
Then you can run the executable in serial like in the example above
or in parallel using MPI with one of the following commands:
.. code-block:: bash
mpiexec -localonly 4 lmp -in in.file
mpiexec -np 4 lmp -in in.file
mpiexec -localonly 4 lmp -in in.file.lmp
mpiexec -np 4 lmp -in in.file.lmp
where in.file is the name of your LAMMPS input script. For the latter
case, you may be prompted to enter the password that you set during
installation of the MPI library software.
where ``in.file.lmp`` is the name of your LAMMPS input script. For the
latter case, you may be prompted to enter the password that you set
during installation of the MPI library software.
In this mode, output may not immediately show up on the screen, so if
your input script takes a long time to execute, you may need to be
patient before the output shows up.
The parallel executable can also run on a single processor by typing
something like this:
Note that the parallel executable also includes OpenMP multi-threading
through both the OPENMP and the KOKKOS package, which can be combined
with MPI using something like:
.. code-block:: bash
lmp -in in.lj
mpiexec -localonly 2 lmp -in in.lj.lmp -pk omp 2 -sf omp
mpiexec -localonly 2 lmp -in in.lj.lmp -kokkos on t 2 -sf kk
Note that the parallel executable also includes OpenMP
multi-threading, which can be combined with MPI using something like:
.. code-block:: bash
mpiexec -localonly 2 lmp -in in.lj -pk omp 2 -sf omp
-------------
MPI parallelization will work for *all* functionality in LAMMPS and in
many cases the MPI parallelization is more efficient than
multi-threading since LAMMPS was designed from ground up for MPI
parallelization using domain decomposition. Multi-threading is only
available for selected styles and implemented on top of the MPI
parallelization. Multi-threading is most useful for systems with large
load imbalances when using domain decomposition and a smaller number
of threads (<= 8).

View File

@ -322,29 +322,31 @@ all types from 1 to :math:`N`. A leading asterisk means all types from
If :doc:`bond_style hybrid <bond_hybrid>` is used, *bstyle* should be a
sub-style name. The bond styles that currently work with fix adapt are:
+---------------------------------------------------+---------------------------+------------+
| :doc:`class2 <bond_class2>` | r0 | type bonds |
+---------------------------------------------------+---------------------------+------------+
| :doc:`fene <bond_fene>` | k,r0 | type bonds |
+---------------------------------------------------+---------------------------+------------+
| :doc:`fene/expand <bond_fene_expand>` | k,r0,epsilon,sigma,shift | type bonds |
+---------------------------------------------------+---------------------------+------------+
| :doc:`fene/nm <bond_fene>` | k,r0 | type bonds |
+---------------------------------------------------+---------------------------+------------+
| :doc:`gromos <bond_gromos>` | k,r0 | type bonds |
+---------------------------------------------------+---------------------------+------------+
| :doc:`harmonic <bond_harmonic>` | k,r0 | type bonds |
+---------------------------------------------------+---------------------------+------------+
| :doc:`harmonic/shift <bond_harmonic_shift>` | k,r0,r1 | type bonds |
+---------------------------------------------------+---------------------------+------------+
| :doc:`harmonic/restrain <bond_harmonic_restrain>` | k | type bonds |
+---------------------------------------------------+---------------------------+------------+
| :doc:`mm3 <bond_mm3>` | k,r0 | type bonds |
+---------------------------------------------------+---------------------------+------------+
| :doc:`morse <bond_morse>` | r0 | type bonds |
+---------------------------------------------------+---------------------------+------------+
| :doc:`nonlinear <bond_nonlinear>` | epsilon,r0 | type bonds |
+---------------------------------------------------+---------------------------+------------+
+-----------------------------------------------------+---------------------------+------------+
| :doc:`class2 <bond_class2>` | r0 | type bonds |
+-----------------------------------------------------+---------------------------+------------+
| :doc:`fene <bond_fene>` | k,r0 | type bonds |
+-----------------------------------------------------+---------------------------+------------+
| :doc:`fene/expand <bond_fene_expand>` | k,r0,epsilon,sigma,shift | type bonds |
+-----------------------------------------------------+---------------------------+------------+
| :doc:`fene/nm <bond_fene>` | k,r0 | type bonds |
+-----------------------------------------------------+---------------------------+------------+
| :doc:`gromos <bond_gromos>` | k,r0 | type bonds |
+-----------------------------------------------------+---------------------------+------------+
| :doc:`harmonic <bond_harmonic>` | k,r0 | type bonds |
+-----------------------------------------------------+---------------------------+------------+
| :doc:`harmonic/restrain <bond_harmonic_restrain>` | k | type bonds |
+-----------------------------------------------------+---------------------------+------------+
| :doc:`harmonic/shift <bond_harmonic_shift>` | k,r0,r1 | type bonds |
+-----------------------------------------------------+---------------------------+------------+
| :doc:`harmonic/shift/cut <bond_harmonic_shift_cut>` | k,r0,r1 | type bonds |
+-----------------------------------------------------+---------------------------+------------+
| :doc:`mm3 <bond_mm3>` | k,r0 | type bonds |
+-----------------------------------------------------+---------------------------+------------+
| :doc:`morse <bond_morse>` | r0 | type bonds |
+-----------------------------------------------------+---------------------------+------------+
| :doc:`nonlinear <bond_nonlinear>` | epsilon,r0 | type bonds |
+-----------------------------------------------------+---------------------------+------------+
----------

View File

@ -50,8 +50,8 @@ Syntax
*intra_energy* value = intramolecular energy (energy units)
*tfac_insert* value = scale up/down temperature of inserted atoms (unitless)
*overlap_cutoff* value = maximum pair distance for overlap rejection (distance units)
*max* value = Maximum number of molecules allowed in the system
*min* value = Minimum number of molecules allowed in the system
*max* value = Maximum number of atoms allowed in the fix group (and region)
*min* value = Minimum number of atoms allowed in the fix group (and region)
Examples
""""""""
@ -380,10 +380,11 @@ an infinite positive energy to all new configurations that place any
pair of atoms closer than the specified overlap cutoff distance.
The *max* and *min* keywords allow for the restriction of the number of
atoms in the simulation. They automatically reject all insertion or
deletion moves that would take the system beyond the set boundaries.
Should the system already be beyond the boundary, only moves that bring
the system closer to the bounds may be accepted.
atoms in the fix group (and region in case the *region* keyword is
used). They automatically reject all insertion or deletion moves that
would take the system beyond the set boundaries. Should the system
already be beyond the boundary, only moves that bring the system closer
to the bounds may be accepted.
The *group* keyword adds all inserted atoms to the :doc:`group <group>`
of the group-ID value. The *grouptype* keyword adds all inserted atoms

View File

@ -115,10 +115,11 @@ to tell LAMMPS how many parallel files exist, via its specified
The format of the dump file is selected through the *format* keyword.
If specified, it must be the last keyword used, since all remaining
arguments are passed on to the dump reader. The *native* format is
for native LAMMPS dump files, written with a :doc:`dump atom <dump>`
or :doc:`dump custom <dump>` command. The *xyz* format is for generic XYZ
formatted dump files. These formats take no additional values.
arguments are passed on to the dump reader. The *native* format is for
native LAMMPS dump files, written with a :doc:`dump atom <dump>` or
:doc:`dump custom <dump>` command. The *xyz* format is for generic XYZ
formatted dump files (see details below). These formats take no
additional values.
The *molfile* format supports reading data through using the `VMD <vmd_>`_
molfile plugin interface. This dump reader format is only available,
@ -230,23 +231,39 @@ will then have a label corresponding to the fix-ID rather than "x" or
"xs". The *label* keyword can also be used to specify new column
labels for fields *id* and *type*\ .
For dump files in *xyz* format, only the *x*, *y*, and *z* fields are
supported. The dump file does not store atom IDs, so these are
assigned consecutively to the atoms as they appear in the dump file,
starting from 1. Thus you should ensure that order of atoms is
consistent from snapshot to snapshot in the XYZ dump file. See
the :doc:`dump_modify sort <dump_modify>` command if the XYZ dump file
was written by LAMMPS.
For dump files in *xyz* format, only the *type*, *x*, *y*, and *z*
fields are supported. There are many variants of the XYZ file format.
LAMMPS will read the number of atoms from the first line of each frame,
ignore the second (title) line, and then read one line for each atom in the format:
.. parsed-literal::
<label> <x coordinate> <y coordinate> <z coordinate>
If the atom label is a numeric integer (like with XYZ files created by
created with default settings by :doc:`dump style <dump>` *xyz*), that
number will be used as the atom type. If the atom label is a string,
then a type map must be created using the :doc:`labelmap command
<labelmap>`. This map needs to associate each (numeric) atom type with
a string label. The numeric atom type is stored internally.
The xyz format dump file does not store atom IDs, so these are assigned
consecutively to the atoms as they appear in the dump file, starting
from 1. Thus you should ensure that the order of atoms is consistent
from snapshot to snapshot in the XYZ dump file. See the
:doc:`dump_modify sort <dump_modify>` command if the XYZ dump file was
written by LAMMPS.
For dump files in *molfile* format, the *x*, *y*, *z*, *vx*, *vy*, and
*vz* fields can be specified. However, not all molfile formats store
velocities, or their respective plugins may not support reading of
velocities. The molfile dump files do not store atom IDs, so these
are assigned consecutively to the atoms as they appear in the dump
file, starting from 1. Thus you should ensure that order of atoms are
consistent from snapshot to snapshot in the molfile dump file.
See the :doc:`dump_modify sort <dump_modify>` command if the dump file
was written by LAMMPS.
velocities. The molfile dump files do not store atom IDs, so these are
assigned consecutively to the atoms as they appear in the dump file,
starting from 1. Thus you should ensure that the order of atoms are
consistent from snapshot to snapshot in the molfile dump file. See the
:doc:`dump_modify sort <dump_modify>` command if the dump file was
written by LAMMPS.
The *adios* format supports all fields that the *native* format supports
except for the *q* charge field.

View File

@ -13,11 +13,11 @@ neigh_modify delay 0 every 1 check yes
neigh_modify exclude molecule/intra all
pair_style line/lj 2.5
pair_coeff * * 1.0 1.0 1.0 0.25 2.5
pair_coeff * * 0.25 0.25 1.0 0.25 2.5
fix 2 all rigid molecule langevin 2.0 2.0 1.0 492983
fix 3 all deform 1 x scale 0.3 y scale 0.3
fix 3 all deform 5 x scale 0.8 y scale 0.8
fix 4 all enforce2d
compute 10 all property/atom end1x end1y end2x end2y
@ -26,7 +26,7 @@ compute 10 all property/atom end1x end1y end2x end2y
#dump 2 all custom 500 dump1.line id type &
# c_10[1] c_10[2] c_10[3] c_10[4]
timestep 0.004
timestep 0.001
compute 1 all erotate/asphere
compute 2 all ke

View File

@ -21,10 +21,10 @@ set group small mass 0.01
# delete overlaps
# must set 1-2 cutoff to non-zero value
pair_style lj/cut 1.5
pair_style lj/cut 1.5
pair_coeff 1 1 1.0 1.0
pair_coeff 2 2 0.0 1.0 0.0
pair_coeff 1 2 0.0 1.0
pair_coeff 1 2 1.0 1.0
delete_atoms overlap 1.5 small big
@ -34,7 +34,7 @@ reset_timestep 0
velocity small create 1.44 87287 loop geom
neighbor 0.3 multi
neighbor 0.8 multi
neigh_modify delay 0 every 1 check yes
neigh_modify exclude molecule/intra big include big
@ -44,21 +44,21 @@ neigh_modify include big
# no pairwise interactions with small particles
pair_style line/lj 2.5
pair_coeff 1 1 1.0 1.0 1.0 1.0 2.5
pair_coeff 2 2 0.0 0.0 0.0 1.0 0.0
pair_coeff 1 2 1.0 0.0 0.0 1.0 0.0
pair_coeff 1 1 1.0 1.0 1.0 1.0 2.5
pair_coeff 2 2 0.0 0.0 0.0 1.0 0.0
pair_coeff 1 2 1.0 0.2 1.0 0.2 2.5
# use fix SRD to push small particles out from inside big ones
# if comment out, big particles won't see SRD particles
timestep 0.001
timestep 0.0001
fix 1 big rigid molecule
fix 2 small srd 20 big 1.0 0.25 49894 &
search 0.2 cubic warn 0.0001 shift yes 49829 &
overlap yes collision noslip
fix 3 all deform 1 x scale 0.35 y scale 0.35
fix 3 all deform 1 x scale 1.25 y scale 1.25
fix 4 all enforce2d
# diagnostics
@ -96,12 +96,12 @@ change_box all triclinic
fix 2 small srd 20 big 1.0 0.25 49894 &
search 0.2 cubic warn 0.0001 shift yes 49829 &
overlap yes collision noslip tstat yes
overlap yes collision noslip #tstat yes
#dump 1 all custom 500 dump2.atom.srd id type x y z ix iy iz
#dump 2 all custom 500 dump2.line.srd id type &
# c_10[1] c_10[2] c_10[3] c_10[4]
fix 3 all deform 1 xy erate 0.05 units box remap v
fix 3 all deform 1 xy erate 0.0002 units box remap v
run 40000
run 30000

View File

@ -1,213 +0,0 @@
LAMMPS (1 Feb 2014)
# Aspherical shear demo - 2d line box and triangle mixture, implicit solvent
units lj
atom_style line
dimension 2
read_data data.line
orthogonal box = (-22.5539 -22.5539 -0.5) to (22.5539 22.5539 0.5)
4 by 2 by 1 MPI processor grid
reading atoms ...
350 atoms
350 lines
velocity all create 1.44 320984 loop geom
neighbor 0.3 bin
neigh_modify delay 0 every 1 check yes
neigh_modify exclude molecule all
pair_style line/lj 2.5
pair_coeff * * 1.0 0.25
fix 2 all rigid molecule langevin 2.0 2.0 1.0 492983
100 rigid bodies with 350 atoms
fix 3 all deform 1 x scale 0.3 y scale 0.3
fix 4 all enforce2d
compute 10 all property/atom end1x end1y end2x end2y
#dump 1 all custom 500 dump1.atom id type x y z ix iy iz
#dump 2 all custom 500 dump1.line id type # c_10[1] c_10[2] c_10[3] c_10[4]
timestep 0.004
compute 1 all erotate/asphere
compute 2 all ke
compute 3 all pe
variable toteng equal (c_1+c_2+c_3)/atoms
thermo 1000
thermo_style custom step temp f_2 pe ke c_1 c_2 c_3 v_toteng
run 10000
Memory usage per processor = 2.6072 Mbytes
Step Temp 2 PotEng KinEng 1 2 3 toteng
0 0 1.2780105 0 -0 0.037823677 0.50989511 0 0.54771879
1000 0 1.9896906 -0.13333756 -0 0.12630626 0.72641827 -0.13333756 0.71938697
2000 0 2.0408541 -0.24906647 -0 0.13199238 0.74265938 -0.24906647 0.62558529
3000 0 1.9921323 -0.39759798 -0 0.11671173 0.73705927 -0.39759798 0.45617302
4000 0 2.1392159 -0.36475197 -0 0.11923802 0.7975688 -0.36475197 0.55205485
5000 0 2.139715 -0.52582091 -0 0.15846417 0.75855653 -0.52582091 0.39119979
6000 0 2.1313904 -0.65532027 -0 0.11090422 0.80254883 -0.65532027 0.25813278
7000 0 1.9416614 -0.81322598 -0 0.11722471 0.71491587 -0.81322598 0.018914608
8000 0 1.9388183 -1.0581149 -0 0.10142762 0.72949452 -1.0581149 -0.22719275
9000 0 2.2830265 -1.583347 -0 0.14583927 0.83260066 -1.583347 -0.60490709
10000 0 4.1416666 -2.6034045 -0 0.18839177 1.5866082 -2.6034045 -0.82840455
Loop time of 2.84713 on 8 procs for 10000 steps with 350 atoms
Pair time (%) = 1.26607 (44.4682)
Neigh time (%) = 0.0163046 (0.572669)
Comm time (%) = 0.786148 (27.612)
Outpt time (%) = 0.000368953 (0.0129588)
Other time (%) = 0.778241 (27.3342)
Nlocal: 43.75 ave 51 max 39 min
Histogram: 1 2 0 2 0 1 1 0 0 1
Nghost: 170.25 ave 180 max 160 min
Histogram: 2 1 0 0 0 0 2 0 1 2
Neighs: 963.125 ave 1209 max 767 min
Histogram: 2 0 2 0 1 0 1 0 1 1
Total # of neighbors = 7705
Ave neighs/atom = 22.0143
Neighbor list builds = 987
Dangerous builds = 0
#undump 1
#undump 2
unfix 3
change_box all triclinic
triclinic box = (-6.76616 -6.76616 -0.5) to (6.76616 6.76616 0.5) with tilt (0 0 0)
#dump 1 all custom 500 dump2.atom id type x y z ix iy iz
#dump 2 all custom 500 dump2.line id type # c_10[1] c_10[2] c_10[3] c_10[4]
fix 3 all deform 1 xy erate 0.01 units box
run 100000
Memory usage per processor = 2.75978 Mbytes
Step Temp 2 PotEng KinEng 1 2 3 toteng
10000 0 4.1416666 -2.6024092 -0 0.18839177 1.5866082 -2.6024092 -0.82740923
11000 0 1.8408319 -3.1031477 -0 0.12073234 0.66819561 -3.1031477 -2.3142198
12000 0 2.0793172 -3.0329681 -0 0.086927592 0.80420833 -3.0329681 -2.1418322
13000 0 2.2022136 -2.99776 -0 0.14309291 0.8007129 -2.99776 -2.0539542
14000 0 1.9510757 -3.094649 -0 0.09482969 0.74134559 -3.094649 -2.2584737
15000 0 1.9874689 -3.1431753 -0 0.1083061 0.7434663 -3.1431753 -2.2914029
16000 0 1.8484778 -2.9491537 -0 0.079102883 0.71310191 -2.9491537 -2.1569489
17000 0 2.1978438 -2.9675694 -0 0.11677634 0.82515673 -2.9675694 -2.0256363
18000 0 2.0293397 -2.9860257 -0 0.1287845 0.7409325 -2.9860257 -2.1163087
19000 0 2.0077219 -3.005622 -0 0.12697603 0.7334762 -3.005622 -2.1451698
20000 0 2.1806369 -3.0622132 -0 0.11066657 0.82389212 -3.0622132 -2.1276545
21000 0 1.8156509 -3.1031481 -0 0.10227614 0.67585994 -3.1031481 -2.325012
22000 0 2.1028516 -3.0861182 -0 0.098877162 0.80234493 -3.0861182 -2.1848961
23000 0 1.8994891 -3.0110243 -0 0.10961187 0.70445488 -3.0110243 -2.1969576
24000 0 1.9305389 -3.0057136 -0 0.11735151 0.7100223 -3.0057136 -2.1783398
25000 0 1.9553918 -3.0848948 -0 0.13217467 0.70585039 -3.0848948 -2.2468697
26000 0 1.8903754 -2.9543658 -0 0.099925113 0.71023579 -2.9543658 -2.1442049
27000 0 2.2624684 -3.2416154 -0 0.11398815 0.85564117 -3.2416154 -2.2719861
28000 0 2.0335234 -3.1795174 -0 0.10291986 0.76859015 -3.1795174 -2.3080074
29000 0 1.7056403 -3.1198739 -0 0.076174496 0.65481419 -3.1198739 -2.3888853
30000 0 2.1203465 -3.0863113 -0 0.11355683 0.79516311 -3.0863113 -2.1775914
31000 0 1.8446708 -3.2764357 -0 0.11006455 0.68050865 -3.2764357 -2.4858625
32000 0 1.7947968 -3.081031 -0 0.087540776 0.68165784 -3.081031 -2.3118324
33000 0 2.2576228 -3.1042222 -0 0.15666855 0.81088407 -3.1042222 -2.1366696
34000 0 1.8522306 -3.0037311 -0 0.08276626 0.71104684 -3.0037311 -2.209918
35000 0 2.0611686 -2.9877406 -0 0.10822003 0.77513794 -2.9877406 -2.1043826
36000 0 2.0739798 -2.981184 -0 0.11784198 0.77100651 -2.981184 -2.0923355
37000 0 2.2120215 -2.8961216 -0 0.13172943 0.8162798 -2.8961216 -1.9481124
38000 0 2.1097357 -2.9746777 -0 0.11881736 0.78535507 -2.9746777 -2.0705053
39000 0 1.8928127 -2.9482169 -0 0.10915752 0.70204792 -2.9482169 -2.1370115
40000 0 1.8515483 -3.003524 -0 0.096981256 0.69653943 -3.003524 -2.2100033
41000 0 1.8569065 -3.0834675 -0 0.10562739 0.6901897 -3.0834675 -2.2876504
42000 0 2.2638459 -3.0577224 -0 0.10896442 0.86125524 -3.0577224 -2.0875027
43000 0 2.0992151 -3.1219185 -0 0.13280434 0.76685929 -3.1219185 -2.2222548
44000 0 2.3479986 -3.0702445 -0 0.14438131 0.86190379 -3.0702445 -2.0639594
45000 0 2.0295235 -2.9619688 -0 0.13726365 0.73253213 -2.9619688 -2.092173
46000 0 2.0597998 -3.1282569 -0 0.10139093 0.7813804 -3.1282569 -2.2454856
47000 0 1.8173541 -3.1122647 -0 0.10380346 0.67506259 -3.1122647 -2.3333986
48000 0 1.9650208 -3.22153 -0 0.10115952 0.74099226 -3.22153 -2.3793782
49000 0 1.8836303 -3.0781944 -0 0.10561306 0.70165705 -3.0781944 -2.2709243
50000 0 1.7799289 -3.1090208 -0 0.10522105 0.65760561 -3.1090208 -2.3461941
51000 0 1.7270244 -2.894789 -0 0.079316066 0.66083727 -2.894789 -2.1546357
52000 0 2.1036512 -3.0708266 -0 0.11762021 0.7839446 -3.0708266 -2.1692618
53000 0 2.1749106 -3.043193 -0 0.11908953 0.81301499 -3.043193 -2.1110885
54000 0 1.7245018 -3.1528646 -0 0.11118993 0.62788226 -3.1528646 -2.4137924
55000 0 1.7599209 -3.0543405 -0 0.098996756 0.65525507 -3.0543405 -2.3000886
56000 0 1.9085953 -3.1072383 -0 0.10931083 0.70865859 -3.1072383 -2.2892689
57000 0 1.9682028 -3.131335 -0 0.094973379 0.74854212 -3.131335 -2.2878195
58000 0 1.7813545 -3.167275 -0 0.085523136 0.6779145 -3.167275 -2.4038374
59000 0 2.0324497 -3.1103534 -0 0.13343285 0.73761703 -3.1103534 -2.2393035
60000 0 1.697349 -3.152831 -0 0.086035815 0.64139945 -3.152831 -2.4253957
61000 0 2.061537 -3.0730484 -0 0.12753143 0.75598441 -3.0730484 -2.1895325
62000 0 1.8186587 -3.1590894 -0 0.096701457 0.68272371 -3.1590894 -2.3796643
63000 0 1.9692063 -3.1053354 -0 0.094864849 0.7490807 -3.1053354 -2.2613899
64000 0 2.0113722 -3.0898117 -0 0.12640828 0.73560838 -3.0898117 -2.227795
65000 0 1.9350085 -3.2290712 -0 0.11850297 0.71078638 -3.2290712 -2.3997819
66000 0 2.0569306 -3.0489252 -0 0.12731012 0.75423156 -3.0489252 -2.1673835
67000 0 2.0119071 -3.10894 -0 0.099142151 0.76310375 -3.10894 -2.2466941
68000 0 2.0615321 -3.167552 -0 0.11066625 0.77284751 -3.167552 -2.2840383
69000 0 1.8731077 -3.1864825 -0 0.12982742 0.672933 -3.1864825 -2.3837221
70000 0 2.109088 -3.1787326 -0 0.13107619 0.77281866 -3.1787326 -2.2748377
71000 0 1.9764202 -3.0731116 -0 0.12035585 0.72668137 -3.0731116 -2.2260744
72000 0 1.6460591 -3.0865952 -0 0.09486718 0.61058673 -3.0865952 -2.3811413
73000 0 1.9756864 -3.0431747 -0 0.1041775 0.74254526 -3.0431747 -2.196452
74000 0 2.0553658 -3.1290715 -0 0.12267262 0.75819842 -3.1290715 -2.2482004
75000 0 1.550997 -2.9813403 -0 0.094350599 0.57036238 -2.9813403 -2.3166273
76000 0 1.9824851 -3.0057088 -0 0.11621875 0.73341774 -3.0057088 -2.1560723
77000 0 1.8451505 -3.0063772 -0 0.12602143 0.66475735 -3.0063772 -2.2155984
78000 0 1.934755 -3.0603773 -0 0.11800375 0.71117696 -3.0603773 -2.2311966
79000 0 2.1982093 -3.095224 -0 0.12840585 0.81368383 -3.095224 -2.1531343
80000 0 1.7547828 -3.0620364 -0 0.092552269 0.65949751 -3.0620364 -2.3099866
81000 0 2.1064588 -3.1631358 -0 0.11415036 0.78861768 -3.1631358 -2.2603677
82000 0 2.0039288 -3.1190532 -0 0.13374009 0.72508654 -3.1190532 -2.2602266
83000 0 1.7749465 -3.2172309 -0 0.11017601 0.65051537 -3.2172309 -2.4565396
84000 0 1.7865147 -3.1433093 -0 0.086859958 0.67878922 -3.1433093 -2.3776602
85000 0 1.4541199 -3.0123872 -0 0.096301993 0.52689225 -3.0123872 -2.3891929
86000 0 2.0345567 -2.9577061 -0 0.11756878 0.7543841 -2.9577061 -2.0857532
87000 0 1.9655671 -3.0235755 -0 0.13068174 0.71170417 -3.0235755 -2.1811896
88000 0 2.1238733 -3.0972095 -0 0.15660293 0.75362848 -3.0972095 -2.1869781
89000 0 1.93413 -3.0018414 -0 0.11736651 0.71154634 -3.0018414 -2.1729285
90000 0 2.0106701 -3.0778989 -0 0.1150105 0.74670527 -3.0778989 -2.2161831
91000 0 1.9700224 -3.0072749 -0 0.1200151 0.72428023 -3.0072749 -2.1629796
92000 0 2.3062898 -3.1245149 -0 0.16045862 0.82795128 -3.1245149 -2.136105
93000 0 1.9977984 -3.1072212 -0 0.098381856 0.75781746 -3.1072212 -2.2510219
94000 0 1.9684844 -3.0923519 -0 0.11228362 0.73135255 -3.0923519 -2.2487157
95000 0 1.8913269 -3.1044766 -0 0.088944817 0.72162386 -3.1044766 -2.293908
96000 0 2.139258 -2.9032081 -0 0.12122357 0.7956013 -2.9032081 -1.9863833
97000 0 2.1549839 -3.0073823 -0 0.14177897 0.78178555 -3.0073823 -2.0838178
98000 0 2.001084 -3.0411655 -0 0.16549603 0.69211139 -3.0411655 -2.1835581
99000 0 2.269108 -3.0749812 -0 0.11370514 0.85876972 -3.0749812 -2.1025064
100000 0 2.0270482 -3.0802101 -0 0.098599302 0.77013563 -3.0802101 -2.2114752
101000 0 1.9412796 -3.1543623 -0 0.11953004 0.71244692 -3.1543623 -2.3223853
102000 0 2.0146461 -3.0140006 -0 0.10152606 0.7618937 -3.0140006 -2.1505808
103000 0 1.7377282 -3.1862597 -0 0.082111131 0.66262952 -3.1862597 -2.441519
104000 0 1.7973897 -3.1055088 -0 0.093370304 0.67693958 -3.1055088 -2.3351989
105000 0 2.2615194 -2.9636424 -0 0.12584102 0.84338157 -2.9636424 -1.9944198
106000 0 1.8974182 -2.9505576 -0 0.085928679 0.72725057 -2.9505576 -2.1373783
107000 0 2.0691161 -3.0804349 -0 0.12411017 0.76265389 -3.0804349 -2.1936708
108000 0 2.0457472 -2.981702 -0 0.09308074 0.78366806 -2.981702 -2.1049532
109000 0 1.6610604 -3.1463569 -0 0.066318676 0.64556436 -3.1463569 -2.4344738
110000 0 1.9606721 -3.080013 -0 0.13164067 0.70864736 -3.080013 -2.2397249
Loop time of 62.2251 on 8 procs for 100000 steps with 350 atoms
Pair time (%) = 43.4946 (69.8987)
Neigh time (%) = 0.395421 (0.635469)
Comm time (%) = 10.3551 (16.6414)
Outpt time (%) = 0.00358662 (0.00576394)
Other time (%) = 7.97644 (12.8187)
Nlocal: 43.75 ave 51 max 33 min
Histogram: 1 0 1 0 0 2 0 1 2 1
Nghost: 168.375 ave 180 max 155 min
Histogram: 1 1 0 0 1 0 2 2 0 1
Neighs: 971 ave 1278 max 631 min
Histogram: 1 1 0 1 0 1 2 1 0 1
Total # of neighbors = 7768
Ave neighs/atom = 22.1943
Neighbor list builds = 7621
Dangerous builds = 0

View File

@ -1,244 +0,0 @@
LAMMPS (1 Feb 2014)
# Aspherical shear demo - 2d line boxes, solvated by SRD particles
units lj
atom_style line
atom_modify first big
dimension 2
read_data data.line.srd
orthogonal box = (-28.7968 -28.7968 -0.5) to (28.7968 28.7968 0.5)
4 by 2 by 1 MPI processor grid
reading atoms ...
400 atoms
400 lines
# add small particles as hi density lattice
lattice sq 0.4
Lattice spacing in x,y,z = 1.58114 1.58114 1.58114
region plane block INF INF INF INF -0.001 0.001
lattice sq 10.0
Lattice spacing in x,y,z = 0.316228 0.316228 0.316228
create_atoms 2 region plane
Created 33489 atoms
group big type 1
400 atoms in group big
group small type 2
33489 atoms in group small
set group small mass 0.01
33489 settings made for mass
# delete overlaps
# must set 1-2 cutoff to non-zero value
pair_style lj/cut 1.5
pair_coeff 1 1 1.0 1.0
pair_coeff 2 2 0.0 1.0 0.0
pair_coeff 1 2 0.0 1.0
delete_atoms overlap 1.5 small big
Deleted 13605 atoms, new total = 20284
# SRD run
reset_timestep 0
velocity small create 1.44 87287 loop geom
neighbor 0.3 bin
neigh_modify delay 0 every 1 check yes
neigh_modify exclude molecule big include big
communicate multi group big vel yes
neigh_modify include big
# no pairwise interactions with small particles
pair_style line/lj 2.5
pair_coeff 1 1 1.0 1.0
pair_coeff 2 2 0.0 1.0 0.0
pair_coeff 1 2 0.0 1.0 0.0
# use fix SRD to push small particles out from inside big ones
# if comment out, big particles won't see SRD particles
timestep 0.001
fix 1 big rigid molecule
100 rigid bodies with 400 atoms
fix 2 small srd 20 big 1.0 0.25 49894 search 0.2 cubic warn 0.0001 shift yes 49829 overlap yes collision noslip
fix 3 all deform 1 x scale 0.35 y scale 0.35
fix 4 all enforce2d
# diagnostics
compute tsmall small temp/deform
compute tbig big temp
variable pebig equal pe*atoms/count(big)
variable ebig equal etotal*atoms/count(big)
compute 1 big erotate/asphere
compute 2 all ke
compute 3 all pe
variable toteng equal (c_1+c_2+c_3)/atoms
thermo 1000
thermo_style custom step temp c_tsmall f_2[9] c_1 etotal v_pebig v_ebig press
thermo_modify temp tbig
WARNING: Temperature for thermo pressure is not for group all (../thermo.cpp:439)
compute 10 big property/atom end1x end1y end2x end2y
#dump 1 all custom 500 dump1.atom.srd id type x y z ix iy iz
#dump 2 all custom 500 dump1.line.srd id type # c_10[1] c_10[2] c_10[3] c_10[4]
run 10000
WARNING: Using fix srd with box deformation but no SRD thermostat (../fix_srd.cpp:385)
SRD info:
SRD/big particles = 19884 400
big particle diameter max/min = 1.99882 0.503306
SRD temperature & lamda = 1 0.2
SRD max distance & max velocity = 0.8 40
SRD grid counts: 230 230 1
SRD grid size: request, actual (xyz) = 0.25, 0.250407 0.250407 1
SRD per actual grid cell = 0.444963
SRD viscosity = 4.2356
big/SRD mass density ratio = 14.0918
WARNING: SRD bin size for fix srd differs from user request (../fix_srd.cpp:2853)
WARNING: Fix srd grid size > 1/4 of big particle diameter (../fix_srd.cpp:2875)
# of rescaled SRD velocities = 0
ave/max small velocity = 15.906 29.1054
ave/max big velocity = 0 0
WARNING: Using compute temp/deform with inconsistent fix deform remap option (../compute_temp_deform.cpp:76)
Memory usage per processor = 7.79007 Mbytes
Step Temp tsmall 2[9] 1 TotEng pebig ebig Press
0 0 1.4528554 0 0 0 0 0 0
1000 0 1.1122612 1.1071958 0.00058011072 0 0 0 0.32625408
2000 0 1.0254475 1.0231236 0.00072347646 -2.3144253e-06 -0.00011736451 -0.00011736451 0.44526308
3000 0 1.0089214 0.99966408 0.00061511441 -0.00023298189 -0.011814512 -0.011814512 0.87208025
4000 0 1.0066185 0.99391102 0.00079065587 -0.0021630644 -0.10968899 -0.10968899 1.3901494
5000 0 1.0109003 1.0009124 0.00071588733 -0.0040023493 -0.20295913 -0.20295913 1.2736445
6000 0 1.0119642 1.0105049 0.00080741361 -0.0067908165 -0.34436231 -0.34436231 2.5492857
7000 0 1.0048989 0.98912274 0.00098851463 -0.010933999 -0.55446309 -0.55446309 3.5707613
8000 0 1.0021597 0.99377939 0.0008405671 -0.015690841 -0.79568252 -0.79568252 6.685381
9000 0 1.0197546 1.00114 0.0012645557 -0.021124602 -1.0712286 -1.0712286 18.907993
10000 0 1.0401079 1.0184189 0.0036111452 0.0099395852 0.50403637 0.50403637 96.909257
Loop time of 3.93391 on 8 procs for 10000 steps with 20284 atoms
Pair time (%) = 0.110261 (2.80284)
Neigh time (%) = 0.32853 (8.35124)
Comm time (%) = 0.199613 (5.07416)
Outpt time (%) = 0.00108692 (0.0276295)
Other time (%) = 3.29442 (83.7441)
Nlocal: 2535.5 ave 2850 max 2226 min
Histogram: 1 0 1 1 1 1 1 0 1 1
Nghost: 109.25 ave 117 max 102 min
Histogram: 1 0 2 0 1 1 1 1 0 1
Neighs: 526 ave 665 max 407 min
Histogram: 1 2 0 1 0 1 1 1 0 1
Total # of neighbors = 4208
Ave neighs/atom = 0.207454
Neighbor list builds = 522
Dangerous builds = 0
#undump 1
#undump 2
unfix 3
change_box all triclinic
triclinic box = (-10.0789 -10.0789 -0.5) to (10.0789 10.0789 0.5) with tilt (0 0 0)
fix 2 small srd 20 big 1.0 0.25 49894 search 0.2 cubic warn 0.0001 shift yes 49829 overlap yes collision noslip tstat yes
#dump 1 all custom 500 dump2.atom.srd id type x y z ix iy iz
#dump 2 all custom 500 dump2.line.srd id type # c_10[1] c_10[2] c_10[3] c_10[4]
fix 3 all deform 1 xy erate 0.05 units box remap v
run 40000
SRD info:
SRD/big particles = 19884 400
big particle diameter max/min = 1.99882 0.503306
SRD temperature & lamda = 1 0.2
SRD max distance & max velocity = 0.8 40
SRD grid counts: 81 81 1
SRD grid size: request, actual (xyz) = 0.25, 0.248861 0.248861 1
SRD per actual grid cell = -11.3331
SRD viscosity = -1920.36
big/SRD mass density ratio = -0.546468
WARNING: SRD bin size for fix srd differs from user request (../fix_srd.cpp:2853)
WARNING: Fix srd grid size > 1/4 of big particle diameter (../fix_srd.cpp:2875)
WARNING: Fix srd viscosity < 0.0 due to low SRD density (../fix_srd.cpp:2877)
# of rescaled SRD velocities = 1
ave/max small velocity = 12.724 40
ave/max big velocity = 1.54523 5.36901
Memory usage per processor = 4.23847 Mbytes
Step Temp tsmall 2[9] 1 TotEng pebig ebig Press
10000 0 1.0277413 0 0.0036111452 0.010135973 0.51399517 0.51399517 60.794865
11000 0 1.0024742 1 0.00040482851 -0.031643325 -1.604633 -1.604633 55.531632
12000 0 1.0036177 1 0.00036416993 -0.030844063 -1.5641024 -1.5641024 56.694788
13000 0 1.0043067 1 0.00068862721 -0.030673787 -1.5554677 -1.5554677 56.852537
14000 0 1.0042533 1 0.00050997053 -0.035967153 -1.8238943 -1.8238943 51.254109
15000 0 1.003956 1 0.00048458218 -0.038060147 -1.9300301 -1.9300301 50.346943
16000 0 1.0059929 1 0.0004740426 -0.037433402 -1.8982478 -1.8982478 49.82532
17000 0 1.0042401 1 0.00039855238 -0.034314446 -1.7400855 -1.7400855 48.430648
18000 0 1.0025952 1 0.00046207703 -0.034166102 -1.732563 -1.732563 53.883613
19000 0 1.0025881 1 0.00034818943 -0.037341367 -1.8935807 -1.8935807 48.90662
20000 0 1.0009932 1 0.00031244041 -0.035274728 -1.7887814 -1.7887814 47.665935
21000 0 1.0025603 1 0.0005514826 -0.034350221 -1.7418997 -1.7418997 63.290704
22000 0 1.0038575 1 0.00034453716 -0.03576596 -1.8136918 -1.8136918 49.805726
23000 0 1.0030321 1 0.00049535709 -0.035873083 -1.819124 -1.819124 48.973244
24000 0 1.0048593 1 0.00034225992 -0.03322158 -1.6846663 -1.6846663 52.557383
25000 0 1.0024423 1 0.00059157362 -0.030152319 -1.5290241 -1.5290241 56.733821
26000 0 1.0022703 1 0.00047512976 -0.029563064 -1.499143 -1.499143 56.271943
27000 0 1.0024537 1 0.00054158319 -0.02957039 -1.4995145 -1.4995145 55.246787
28000 0 1.0023325 1 0.00051129428 -0.035115211 -1.7806924 -1.7806924 49.718172
29000 0 1.002865 1 0.00056728135 -0.035484703 -1.7994293 -1.7994293 48.387401
30000 0 1.0022693 1 0.00040284402 -0.033844303 -1.7162446 -1.7162446 50.486676
31000 0 1.0037106 1 0.00056291948 -0.036529699 -1.852421 -1.852421 52.011803
32000 0 1.0022542 1 0.00041877447 -0.036903458 -1.8713743 -1.8713743 52.712289
33000 0 1.0021364 1 0.00040871451 -0.033616728 -1.7047043 -1.7047043 55.199593
34000 0 1.003779 1 0.00040667148 -0.031745412 -1.6098098 -1.6098098 51.055261
35000 0 1.0015547 1 0.00042509365 -0.033603064 -1.7040114 -1.7040114 53.887389
36000 0 1.0024849 1 0.00040589851 -0.032151258 -1.6303903 -1.6303903 55.673615
37000 0 1.0038204 1 0.00040542177 -0.033643242 -1.7060488 -1.7060488 51.834694
38000 0 1.0031777 1 0.00040237126 -0.034711811 -1.7602359 -1.7602359 56.275778
39000 0 1.002777 1 0.00051021239 -0.034375104 -1.7431615 -1.7431615 48.461145
40000 0 1.0053762 1 0.00041566465 -0.036016384 -1.8263908 -1.8263908 48.937456
41000 0 1.0039078 1 0.00049726673 -0.036481888 -1.8499966 -1.8499966 49.290465
42000 0 1.0033408 1 0.00045236191 -0.034254524 -1.7370469 -1.7370469 52.146603
43000 0 1.0039893 1 0.00048362351 -0.032519474 -1.6490625 -1.6490625 53.320599
44000 0 1.0036667 1 0.00046834006 -0.031099875 -1.5770747 -1.5770747 55.907531
45000 0 1.0035765 1 0.0005195031 -0.029559708 -1.4989728 -1.4989728 56.191165
46000 0 1.004514 1 0.00050134348 -0.028852909 -1.463131 -1.463131 57.547696
47000 0 1.003864 1 0.00038963389 -0.031339229 -1.5892123 -1.5892123 55.775764
48000 0 1.003145 1 0.00035436452 -0.032390682 -1.6425315 -1.6425315 55.233354
49000 0 1.0042615 1 0.00053161075 -0.029960468 -1.5192953 -1.5192953 54.611685
50000 0 1.0037096 1 0.00031191389 -0.02942011 -1.4918938 -1.4918938 58.653762
Loop time of 27.1275 on 8 procs for 40000 steps with 20284 atoms
Pair time (%) = 1.54277 (5.68709)
Neigh time (%) = 1.26864 (4.67658)
Comm time (%) = 1.19871 (4.4188)
Outpt time (%) = 0.00421953 (0.0155544)
Other time (%) = 23.1132 (85.202)
Nlocal: 2535.5 ave 2670 max 2406 min
Histogram: 1 1 1 0 0 2 1 1 0 1
Nghost: 114.5 ave 124 max 103 min
Histogram: 1 0 1 0 2 1 0 1 0 2
Neighs: 521.5 ave 692 max 442 min
Histogram: 3 1 1 1 0 0 0 1 0 1
Total # of neighbors = 4172
Ave neighs/atom = 0.205679
Neighbor list builds = 2002
Dangerous builds = 0
Please see the log.cite file for references relevant to this simulation

View File

@ -0,0 +1,189 @@
LAMMPS (29 Aug 2024 - Development - patch_29Aug2024-296-g061c80104a-modified)
using 1 OpenMP thread(s) per MPI task
# Aspherical shear demo - 2d line box and triangle mixture, implicit solvent
units lj
atom_style line
dimension 2
read_data data.line
Reading data file ...
orthogonal box = (-22.553882 -22.553882 -0.5) to (22.553882 22.553882 0.5)
1 by 1 by 1 MPI processor grid
reading atoms ...
350 atoms
350 lines
read_data CPU = 0.003 seconds
velocity all create 1.44 320984 loop geom
neighbor 0.3 bin
neigh_modify delay 0 every 1 check yes
neigh_modify exclude molecule/intra all
pair_style line/lj 2.5
pair_coeff * * 0.25 0.25 1.0 0.25 2.5
fix 2 all rigid molecule langevin 2.0 2.0 1.0 492983
100 rigid bodies with 350 atoms
fix 3 all deform 5 x scale 0.8 y scale 0.8
fix 4 all enforce2d
compute 10 all property/atom end1x end1y end2x end2y
#dump 1 all custom 500 dump1.atom id type x y z ix iy iz
#dump 2 all custom 500 dump1.line id type # c_10[1] c_10[2] c_10[3] c_10[4]
timestep 0.001
compute 1 all erotate/asphere
compute 2 all ke
compute 3 all pe
variable toteng equal (c_1+c_2+c_3)/atoms
compute_modify thermo_temp extra/dof -350
thermo 1000
thermo_style custom step f_2 pe ke c_1 c_2 c_3 v_toteng
run 10000
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
Your simulation uses code contributions which should be cited:
- Type Label Framework: https://doi.org/10.1021/acs.jpcb.3c08419
@Article{Gissinger24,
author = {Jacob R. Gissinger, Ilia Nikiforov, Yaser Afshar, Brendon Waters, Moon-ki Choi, Daniel S. Karls, Alexander Stukowski, Wonpil Im, Hendrik Heinz, Axel Kohlmeyer, and Ellad B. Tadmor},
title = {Type Label Framework for Bonded Force Fields in LAMMPS},
journal = {J. Phys. Chem. B},
year = 2024,
volume = 128,
number = 13,
pages = {3282-3297}
}
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
Generated 0 of 0 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 2.8
ghost atom cutoff = 2.8
binsize = 1.4, bins = 33 33 1
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair line/lj, perpetual
attributes: half, newton on
pair build: half/bin/atomonly/newton
stencil: half/bin/2d
bin: standard
Per MPI rank memory allocation (min/avg/max) = 4.742 | 4.742 | 4.742 Mbytes
Step f_2 PotEng KinEng c_1 c_2 c_3 v_toteng
0 1.1872976 0 0.46543528 0.03617212 0.46543528 0 0.5016074
1000 1.9084412 -0.001043719 0.71003395 0.089891202 0.71003395 -0.001043719 0.79888143
2000 2.31668 -0.020711665 0.83611544 0.13062287 0.83611544 -0.020711665 0.94602664
3000 2.3094506 -0.062018072 0.80584123 0.15326943 0.80584123 -0.062018072 0.8970926
4000 2.4383442 -0.053659995 0.86864073 0.14696993 0.86864073 -0.053659995 0.96195067
5000 2.5885917 -0.15612821 0.90351683 0.17156633 0.90351683 -0.15612821 0.91895495
6000 2.1187379 -0.072041135 0.76933527 0.11557939 0.76933527 -0.072041135 0.81287353
7000 2.1407592 -0.057727294 0.75154343 0.13827066 0.75154343 -0.057727294 0.8320868
8000 2.0661844 -0.097529608 0.71093839 0.14547433 0.71093839 -0.097529608 0.75888311
9000 2.1574445 -0.052890857 0.78826145 0.11363136 0.78826145 -0.052890857 0.84900195
10000 2.473097 -0.092376489 0.85756337 0.16861278 0.85756337 -0.092376489 0.93379965
Loop time of 1.16704 on 1 procs for 10000 steps with 350 atoms
Performance: 740334.372 tau/day, 8568.685 timesteps/s, 2.999 Matom-step/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 | 0.80757 | 0.80757 | 0.80757 | 0.0 | 69.20
Neigh | 0.0090046 | 0.0090046 | 0.0090046 | 0.0 | 0.77
Comm | 0.011808 | 0.011808 | 0.011808 | 0.0 | 1.01
Output | 0.000194 | 0.000194 | 0.000194 | 0.0 | 0.02
Modify | 0.3317 | 0.3317 | 0.3317 | 0.0 | 28.42
Other | | 0.006768 | | | 0.58
Nlocal: 350 ave 350 max 350 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 101 ave 101 max 101 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 853 ave 853 max 853 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 853
Ave neighs/atom = 2.4371429
Neighbor list builds = 274
Dangerous builds = 0
#undump 1
#undump 2
unfix 3
change_box all triclinic
Changing box ...
triclinic box = (-18.043106 -18.043106 -0.5) to (18.043106 18.043106 0.5) with tilt (0 0 0)
#dump 1 all custom 500 dump2.atom id type x y z ix iy iz
#dump 2 all custom 500 dump2.line id type # c_10[1] c_10[2] c_10[3] c_10[4]
fix 3 all deform 1 xy erate 0.01 units box
run 10000
Generated 0 of 0 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 2.8
ghost atom cutoff = 2.8
binsize = 1.4, bins = 26 26 1
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair line/lj, perpetual
attributes: half, newton on
pair build: half/bin/atomonly/newton/tri
stencil: half/bin/2d/tri
bin: standard
Per MPI rank memory allocation (min/avg/max) = 4.756 | 4.756 | 4.756 Mbytes
Step f_2 PotEng KinEng c_1 c_2 c_3 v_toteng
10000 2.473097 -0.092380532 0.85753671 0.16863499 0.85753671 -0.092380532 0.93379117
11000 2.5185915 -0.1015737 0.84230876 0.197573 0.84230876 -0.1015737 0.93830806
12000 2.5971728 -0.13087195 0.90608898 0.17248755 0.90608898 -0.13087195 0.94770458
13000 2.5065714 -0.14666584 0.83804307 0.19683483 0.83804307 -0.14666584 0.88821206
14000 2.1672357 -0.10720878 0.79713452 0.10973398 0.79713452 -0.10720878 0.79965972
15000 2.3444438 -0.14780285 0.81642139 0.15695019 0.81642139 -0.14780285 0.82556873
16000 2.2672973 -0.12590007 0.76672668 0.17081014 0.76672668 -0.12590007 0.81163675
17000 2.3999651 -0.15464102 0.85708567 0.14289234 0.85708567 -0.15464102 0.84533699
18000 2.2024356 -0.14077779 0.76727873 0.14718521 0.76727873 -0.14077779 0.77368615
19000 2.5411572 -0.092014576 0.85750101 0.19297197 0.85750101 -0.092014576 0.95845841
20000 2.2113691 -0.11944862 0.77295445 0.14564597 0.77295445 -0.11944862 0.79915181
Loop time of 1.76388 on 1 procs for 10000 steps with 350 atoms
Performance: 489827.896 tau/day, 5669.304 timesteps/s, 1.984 Matom-step/s
99.6% CPU use with 1 MPI tasks x 1 OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 1.3668 | 1.3668 | 1.3668 | 0.0 | 77.49
Neigh | 0.018849 | 0.018849 | 0.018849 | 0.0 | 1.07
Comm | 0.013338 | 0.013338 | 0.013338 | 0.0 | 0.76
Output | 0.00020434 | 0.00020434 | 0.00020434 | 0.0 | 0.01
Modify | 0.35698 | 0.35698 | 0.35698 | 0.0 | 20.24
Other | | 0.007667 | | | 0.43
Nlocal: 350 ave 350 max 350 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 119 ave 119 max 119 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 997 ave 997 max 997 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 997
Ave neighs/atom = 2.8485714
Neighbor list builds = 283
Dangerous builds = 0
Total wall time: 0:00:02

View File

@ -0,0 +1,189 @@
LAMMPS (29 Aug 2024 - Development - patch_29Aug2024-296-g061c80104a-modified)
using 1 OpenMP thread(s) per MPI task
# Aspherical shear demo - 2d line box and triangle mixture, implicit solvent
units lj
atom_style line
dimension 2
read_data data.line
Reading data file ...
orthogonal box = (-22.553882 -22.553882 -0.5) to (22.553882 22.553882 0.5)
2 by 2 by 1 MPI processor grid
reading atoms ...
350 atoms
350 lines
read_data CPU = 0.003 seconds
velocity all create 1.44 320984 loop geom
neighbor 0.3 bin
neigh_modify delay 0 every 1 check yes
neigh_modify exclude molecule/intra all
pair_style line/lj 2.5
pair_coeff * * 0.25 0.25 1.0 0.25 2.5
fix 2 all rigid molecule langevin 2.0 2.0 1.0 492983
100 rigid bodies with 350 atoms
fix 3 all deform 5 x scale 0.8 y scale 0.8
fix 4 all enforce2d
compute 10 all property/atom end1x end1y end2x end2y
#dump 1 all custom 500 dump1.atom id type x y z ix iy iz
#dump 2 all custom 500 dump1.line id type # c_10[1] c_10[2] c_10[3] c_10[4]
timestep 0.001
compute 1 all erotate/asphere
compute 2 all ke
compute 3 all pe
variable toteng equal (c_1+c_2+c_3)/atoms
compute_modify thermo_temp extra/dof -350
thermo 1000
thermo_style custom step f_2 pe ke c_1 c_2 c_3 v_toteng
run 10000
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
Your simulation uses code contributions which should be cited:
- Type Label Framework: https://doi.org/10.1021/acs.jpcb.3c08419
@Article{Gissinger24,
author = {Jacob R. Gissinger, Ilia Nikiforov, Yaser Afshar, Brendon Waters, Moon-ki Choi, Daniel S. Karls, Alexander Stukowski, Wonpil Im, Hendrik Heinz, Axel Kohlmeyer, and Ellad B. Tadmor},
title = {Type Label Framework for Bonded Force Fields in LAMMPS},
journal = {J. Phys. Chem. B},
year = 2024,
volume = 128,
number = 13,
pages = {3282-3297}
}
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
Generated 0 of 0 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 2.8
ghost atom cutoff = 2.8
binsize = 1.4, bins = 33 33 1
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair line/lj, perpetual
attributes: half, newton on
pair build: half/bin/atomonly/newton
stencil: half/bin/2d
bin: standard
Per MPI rank memory allocation (min/avg/max) = 4.736 | 4.736 | 4.736 Mbytes
Step f_2 PotEng KinEng c_1 c_2 c_3 v_toteng
0 1.1872976 0 0.46543528 0.03617212 0.46543528 0 0.5016074
1000 1.9084412 -0.001043719 0.71003395 0.089891202 0.71003395 -0.001043719 0.79888143
2000 2.31668 -0.020711665 0.83611544 0.13062287 0.83611544 -0.020711665 0.94602664
3000 2.3094506 -0.062018072 0.80584123 0.15326943 0.80584123 -0.062018072 0.8970926
4000 2.4383442 -0.053659995 0.86864073 0.14696993 0.86864073 -0.053659995 0.96195067
5000 2.5885917 -0.15612821 0.90351683 0.17156633 0.90351683 -0.15612821 0.91895494
6000 2.118738 -0.072041141 0.76933528 0.1155794 0.76933528 -0.072041141 0.81287354
7000 2.1407609 -0.057727453 0.75154404 0.13827078 0.75154404 -0.057727453 0.83208737
8000 2.066348 -0.097639137 0.71096217 0.14551295 0.71096217 -0.097639137 0.75883597
9000 2.1969096 -0.050133795 0.8028133 0.11559948 0.8028133 -0.050133795 0.86827899
10000 2.3932442 -0.098008752 0.83753779 0.15678193 0.83753779 -0.098008752 0.89631097
Loop time of 0.596624 on 4 procs for 10000 steps with 350 atoms
Performance: 1448149.372 tau/day, 16760.988 timesteps/s, 5.866 Matom-step/s
98.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.17419 | 0.21073 | 0.27006 | 7.8 | 35.32
Neigh | 0.0015899 | 0.0018079 | 0.0020932 | 0.5 | 0.30
Comm | 0.041688 | 0.101 | 0.13805 | 11.3 | 16.93
Output | 0.00011945 | 0.0001262 | 0.000143 | 0.0 | 0.02
Modify | 0.26906 | 0.27183 | 0.27467 | 0.4 | 45.56
Other | | 0.01113 | | | 1.87
Nlocal: 87.5 ave 94 max 80 min
Histogram: 1 1 0 0 0 0 0 0 0 2
Nghost: 54.5 ave 67 max 42 min
Histogram: 1 0 1 0 0 0 0 1 0 1
Neighs: 212.75 ave 286 max 122 min
Histogram: 1 0 0 1 0 0 0 0 1 1
Total # of neighbors = 851
Ave neighs/atom = 2.4314286
Neighbor list builds = 273
Dangerous builds = 0
#undump 1
#undump 2
unfix 3
change_box all triclinic
Changing box ...
triclinic box = (-18.043106 -18.043106 -0.5) to (18.043106 18.043106 0.5) with tilt (0 0 0)
#dump 1 all custom 500 dump2.atom id type x y z ix iy iz
#dump 2 all custom 500 dump2.line id type # c_10[1] c_10[2] c_10[3] c_10[4]
fix 3 all deform 1 xy erate 0.01 units box
run 10000
Generated 0 of 0 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 2.8
ghost atom cutoff = 2.8
binsize = 1.4, bins = 26 26 1
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair line/lj, perpetual
attributes: half, newton on
pair build: half/bin/atomonly/newton/tri
stencil: half/bin/2d/tri
bin: standard
Per MPI rank memory allocation (min/avg/max) = 4.752 | 4.752 | 4.752 Mbytes
Step f_2 PotEng KinEng c_1 c_2 c_3 v_toteng
10000 2.3932442 -0.098029446 0.83751359 0.1568021 0.83751359 -0.098029446 0.89628624
11000 2.4541893 -0.15538223 0.82053681 0.19271549 0.82053681 -0.15538223 0.85787007
12000 2.4124449 -0.14024177 0.84559598 0.15692416 0.84559598 -0.14024177 0.86227837
13000 2.2095814 -0.10822636 0.73930104 0.173052 0.73930104 -0.10822636 0.80412668
14000 2.0946831 -0.087303541 0.77743494 0.10023865 0.77743494 -0.087303541 0.79037005
15000 2.0911016 -0.11524594 0.74044758 0.12978235 0.74044758 -0.11524594 0.75498398
16000 1.9736428 -0.17259563 0.67852978 0.13943094 0.67852978 -0.17259563 0.64536509
17000 2.3284367 -0.17673537 0.77018991 0.1897596 0.77018991 -0.17673537 0.78321414
18000 2.3178564 -0.16634746 0.81488323 0.1487365 0.81488323 -0.16634746 0.79727227
19000 2.7497251 -0.18254513 1.0041125 0.14528424 1.0041125 -0.18254513 0.96685165
20000 2.3897059 -0.12664177 0.8390411 0.15426546 0.8390411 -0.12664177 0.86666479
Loop time of 0.79519 on 4 procs for 10000 steps with 350 atoms
Performance: 1086533.223 tau/day, 12575.616 timesteps/s, 4.401 Matom-step/s
98.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.26601 | 0.35051 | 0.443 | 12.3 | 44.08
Neigh | 0.0029891 | 0.0036725 | 0.0040631 | 0.7 | 0.46
Comm | 0.049744 | 0.14268 | 0.22734 | 19.3 | 17.94
Output | 0.00013783 | 0.00014503 | 0.00016304 | 0.0 | 0.02
Modify | 0.27963 | 0.28446 | 0.29049 | 0.8 | 35.77
Other | | 0.01372 | | | 1.73
Nlocal: 87.5 ave 101 max 75 min
Histogram: 1 0 1 0 0 0 1 0 0 1
Nghost: 61.5 ave 67 max 50 min
Histogram: 1 0 0 0 0 0 0 0 2 1
Neighs: 244.75 ave 268 max 198 min
Histogram: 1 0 0 0 0 0 0 1 0 2
Total # of neighbors = 979
Ave neighs/atom = 2.7971429
Neighbor list builds = 289
Dangerous builds = 0
Total wall time: 0:00:01

View File

@ -0,0 +1,363 @@
LAMMPS (29 Aug 2024 - Development - patch_29Aug2024-296-g061c80104a-modified)
using 1 OpenMP thread(s) per MPI task
# Aspherical shear demo - 2d line boxes, solvated by SRD particles
units lj
atom_style line
atom_modify first big
dimension 2
read_data data.line.srd
Reading data file ...
orthogonal box = (-28.796757 -28.796757 -0.5) to (28.796757 28.796757 0.5)
1 by 1 by 1 MPI processor grid
reading atoms ...
400 atoms
400 lines
read_data CPU = 0.003 seconds
# add small particles as hi density lattice
lattice sq 0.4
Lattice spacing in x,y,z = 1.5811388 1.5811388 1.5811388
region plane block INF INF INF INF -0.001 0.001
lattice sq 10.0
Lattice spacing in x,y,z = 0.31622777 0.31622777 0.31622777
create_atoms 2 region plane
Created 33489 atoms
using lattice units in orthogonal box = (-28.796757 -28.796757 -0.5) to (28.796757 28.796757 0.5)
create_atoms CPU = 0.003 seconds
group big type 1
400 atoms in group big
group small type 2
33489 atoms in group small
set group small mass 0.01
Setting atom values ...
33489 settings made for mass
# delete overlaps
# must set 1-2 cutoff to non-zero value
pair_style lj/cut 1.5
pair_coeff 1 1 1.0 1.0
pair_coeff 2 2 0.0 1.0 0.0
pair_coeff 1 2 1.0 1.0
delete_atoms overlap 1.5 small big
System init for delete_atoms ...
Generated 0 of 1 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 1.8
ghost atom cutoff = 1.8
binsize = 0.9, bins = 64 64 2
2 neighbor lists, perpetual/occasional/extra = 1 1 0
(1) command delete_atoms, occasional
attributes: full, newton on
pair build: full/bin/atomonly
stencil: full/bin/2d
bin: standard
(2) pair lj/cut, perpetual
attributes: half, newton on
pair build: half/bin/atomonly/newton
stencil: half/bin/2d
bin: standard
WARNING: Delete_atoms cutoff > minimum neighbor cutoff (src/delete_atoms.cpp:313)
Deleted 13605 atoms, new total = 20284
# SRD run
reset_timestep 0
velocity small create 1.44 87287 loop geom
neighbor 0.8 multi
neigh_modify delay 0 every 1 check yes
neigh_modify exclude molecule/intra big include big
comm_modify mode multi group big vel yes
neigh_modify include big
# no pairwise interactions with small particles
pair_style line/lj 2.5
pair_coeff 1 1 1.0 1.0 1.0 1.0 2.5
pair_coeff 2 2 0.0 0.0 0.0 1.0 0.0
pair_coeff 1 2 1.0 0.2 1.0 0.2 2.5
# use fix SRD to push small particles out from inside big ones
# if comment out, big particles won't see SRD particles
timestep 0.0001
fix 1 big rigid molecule
100 rigid bodies with 400 atoms
fix 2 small srd 20 big 1.0 0.25 49894 search 0.2 cubic warn 0.0001 shift yes 49829 overlap yes collision noslip
fix 3 all deform 1 x scale 1.25 y scale 1.25
fix 4 all enforce2d
# diagnostics
compute tsmall small temp/deform
compute tbig big temp
variable pebig equal pe*atoms/count(big)
variable ebig equal etotal*atoms/count(big)
compute_modify tbig extra/dof -350
compute 1 big erotate/asphere
compute 2 all ke
compute 3 all pe
variable toteng equal (c_1+c_2+c_3)/atoms
thermo 1000
thermo_style custom step c_tsmall f_2[9] c_1 etotal v_pebig v_ebig press
thermo_modify temp tbig
WARNING: Temperature for thermo pressure is not for group all (src/thermo.cpp:533)
compute 10 big property/atom end1x end1y end2x end2y
#dump 1 all custom 500 dump1.atom.srd id type x y z ix iy iz
#dump 2 all custom 500 dump1.line.srd id type # c_10[1] c_10[2] c_10[3] c_10[4]
run 10000
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
Your simulation uses code contributions which should be cited:
- Type Label Framework: https://doi.org/10.1021/acs.jpcb.3c08419
@Article{Gissinger24,
author = {Jacob R. Gissinger, Ilia Nikiforov, Yaser Afshar, Brendon Waters, Moon-ki Choi, Daniel S. Karls, Alexander Stukowski, Wonpil Im, Hendrik Heinz, Axel Kohlmeyer, and Ellad B. Tadmor},
title = {Type Label Framework for Bonded Force Fields in LAMMPS},
journal = {J. Phys. Chem. B},
year = 2024,
volume = 128,
number = 13,
pages = {3282-3297}
}
- neighbor multi command: doi:10.1016/j.cpc.2008.03.005, doi:10.1007/s40571-020-00361-2
@Article{Intveld08,
author = {in 't Veld, P. J. and S. J.~Plimpton and G. S. Grest},
title = {Accurate and Efficient Methods for Modeling Colloidal
Mixtures in an Explicit Solvent using Molecular Dynamics},
journal = {Comput.\ Phys.\ Commut.},
year = 2008,
volume = 179,
pages = {320--329}
}
@article{Shire2020,
author = {Shire, Tom and Hanley, Kevin J. and Stratford, Kevin},
title = {{DEM} Simulations of Polydisperse Media: Efficient Contact
Detection Applied to Investigate the Quasi-Static Limit},
journal = {Computational Particle Mechanics},
year = {2020}
@article{Monti2022,
author = {Monti, Joseph M. and Clemmer, Joel T. and Srivastava,
Ishan and Silbert, Leonardo E. and Grest, Gary S.
and Lechman, Jeremy B.},
title = {Large-scale frictionless jamming with power-law particle
size distributions},
journal = {Phys. Rev. E},
volume = {106}
issue = {3}
year = {2022}
}
- fix srd command: doi:10.1063/1.3419070
@Article{Petersen10,
author = {M. K. Petersen and J. B. Lechman and S. J. Plimpton and
G. S. Grest and in 't Veld, P. J. and P. R. Schunk},
title = {Mesoscale Hydrodynamics via Stochastic Rotation
Dynamics: Comparison with {L}ennard-{J}ones Fluid},
journal = {J.~Chem.\ Phys.},
year = 2010,
volume = 132,
pages = 174106
}
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
Generated 0 of 1 mixed pair_coeff terms from geometric mixing rule
WARNING: Using compute temp/deform with inconsistent fix deform remap option (src/compute_temp_deform.cpp:71)
WARNING: Using fix srd with box deformation but no SRD thermostat (src/SRD/fix_srd.cpp:405)
SRD info:
SRD/big particles = 19884 400
big particle diameter max/min = 1.9988171 0.50330564
SRD temperature & lamda = 1 0.02
SRD max distance & max velocity = 0.08 40
SRD grid counts: 230 230 1
SRD grid size: request, actual (xyz) = 0.25, 0.25040659 0.25040659 1
SRD per actual grid cell = 0.45503978
SRD viscosity = 0.92062623
big/SRD mass density ratio = 12.298053
WARNING: SRD bin size for fix srd differs from user request (src/SRD/fix_srd.cpp:2809)
WARNING: Fix srd grid size > 1/4 of big particle diameter (src/SRD/fix_srd.cpp:2830)
# of rescaled SRD velocities = 0
ave/max small velocity = 15.906001 29.105426
ave/max big velocity = 0 0
Neighbor list info ...
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 3.3
ghost atom cutoff = 3.3
binsize = 1.65, bins = 35 35 1
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair line/lj, perpetual
attributes: half, newton on
pair build: half/multi/atomonly/newton
stencil: half/multi/2d
bin: multi
Per MPI rank memory allocation (min/avg/max) = 43.18 | 43.18 | 43.18 Mbytes
Step c_tsmall f_2[9] c_1 TotEng v_pebig v_ebig Press
0 1.6084386 0 0 0 0 0 0
1000 1.4566787 1.2042825 0.00015900089 0.0011955837 0 0.060628048 0.75322967
2000 1.3561018 1.2092936 0.00026739313 0.0020783306 0 0.10539215 0.53247025
3000 1.3327447 1.1696777 0.0003215116 0.0024935719 0 0.12644903 0.32024668
4000 1.3031273 1.1385596 0.00037337107 0.0031214473 0 0.15828859 0.64066244
5000 1.28204 1.0983763 0.00047966362 0.0033295434 0 0.16884114 0.32103666
6000 1.2654396 1.0969562 0.00049917373 0.0037382387 0 0.18956609 0.16211614
7000 1.2401503 1.1232046 0.00045137168 0.0037522201 0 0.19027508 0.014071672
8000 1.2349025 1.059008 0.00056648801 0.0039664742 0 0.20113991 0.24483817
9000 1.2272907 1.0371006 0.00056271544 0.0037847074 0 0.19192251 0.032968056
10000 1.2153817 1.0209113 0.00053291164 0.0037197691 0 0.18862949 0.3237698
Loop time of 6.0346 on 1 procs for 10000 steps with 20284 atoms
Performance: 14317.424 tau/day, 1657.109 timesteps/s, 33.613 Matom-step/s
96.2% CPU use with 1 MPI tasks x 1 OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 0.10636 | 0.10636 | 0.10636 | 0.0 | 1.76
Neigh | 0.01905 | 0.01905 | 0.01905 | 0.0 | 0.32
Comm | 0.041223 | 0.041223 | 0.041223 | 0.0 | 0.68
Output | 0.0017015 | 0.0017015 | 0.0017015 | 0.0 | 0.03
Modify | 5.8165 | 5.8165 | 5.8165 | 0.0 | 96.39
Other | | 0.04976 | | | 0.82
Nlocal: 20284 ave 20284 max 20284 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 84 ave 84 max 84 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 0 ave 0 max 0 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 0
Ave neighs/atom = 0
Neighbor list builds = 500
Dangerous builds = 0
#undump 1
#undump 2
unfix 3
change_box all triclinic
Changing box ...
triclinic box = (-35.995947 -35.995947 -0.5) to (35.995947 35.995947 0.5) with tilt (0 0 0)
fix 2 small srd 20 big 1.0 0.25 49894 search 0.2 cubic warn 0.0001 shift yes 49829 overlap yes collision noslip #tstat yes
#dump 1 all custom 500 dump2.atom.srd id type x y z ix iy iz
#dump 2 all custom 500 dump2.line.srd id type # c_10[1] c_10[2] c_10[3] c_10[4]
fix 3 all deform 1 xy erate 0.0002 units box remap v
run 30000
Generated 0 of 1 mixed pair_coeff terms from geometric mixing rule
WARNING: Using fix srd with box deformation but no SRD thermostat (src/SRD/fix_srd.cpp:405)
SRD info:
SRD/big particles = 19884 400
big particle diameter max/min = 1.9988171 0.50330564
SRD temperature & lamda = 1 0.02
SRD max distance & max velocity = 0.08 40
SRD grid counts: 288 288 1
SRD grid size: request, actual (xyz) = 0.25, 0.24997185 0.24997185 1
SRD per actual grid cell = 0.26976265
SRD viscosity = 1.0312189
big/SRD mass density ratio = 20.672578
WARNING: SRD bin size for fix srd differs from user request (src/SRD/fix_srd.cpp:2809)
WARNING: Fix srd grid size > 1/4 of big particle diameter (src/SRD/fix_srd.cpp:2830)
# of rescaled SRD velocities = 0
ave/max small velocity = 12.805429 40
ave/max big velocity = 0.50400801 2.1697856
Neighbor list info ...
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 3.3
ghost atom cutoff = 3.3
binsize = 1.65, bins = 44 44 1
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair line/lj, perpetual
attributes: half, newton on
pair build: half/multi/atomonly/newton/tri
stencil: half/multi/2d/tri
bin: multi
Per MPI rank memory allocation (min/avg/max) = 58.85 | 58.85 | 58.85 Mbytes
Step c_tsmall f_2[9] c_1 TotEng v_pebig v_ebig Press
10000 1.0423767 0 0.00053289774 0.0037197858 0 0.18863034 0.014558088
11000 1.0333923 1.0309908 0.00058283908 0.0042336078 0 0.21468625 0.13036048
12000 1.0268543 1.0290122 0.00055294944 0.0044278861 0 0.2245381 0.53275676
13000 1.0257856 1.0140434 0.00051520803 0.0042888387 0 0.21748701 0.2066835
14000 1.0239497 1.0321558 0.00054742053 0.004259664 0 0.21600756 0.24430097
15000 1.0194475 1.0119806 0.00053619565 0.0041113765 0 0.2084879 0.18420434
16000 1.016421 1.0309991 0.00049553642 0.0041338645 0 0.20962827 0.18298406
17000 1.0088527 0.99723694 0.00049824173 0.0044777581 0 0.22706711 0.65557023
18000 1.0073877 1.0136962 0.00058327835 0.0045355884 0 0.22999969 0.13700737
19000 1.0026916 1.0253129 0.00056760151 0.0045138437 0 0.22889701 0.16443344
20000 1.0024042 0.98988084 0.00057568118 0.0048644983 0 0.24667871 0.060864322
21000 0.99500641 0.99075324 0.00062187543 0.0050480594 0 0.25598709 0.18428384
22000 0.99286446 0.98642266 0.00061024492 0.0050497174 0 0.25607117 0.18499738
23000 0.99204086 0.98869005 0.00064013575 0.0052921112 0 0.26836296 0.046987646
24000 0.98768375 1.0110613 0.00065868636 0.0049285304 0 0.24992578 0.22623751
25000 0.98763308 0.98752678 0.00067070463 0.0049364253 0 0.25032613 0.022819382
26000 0.9844889 1.0059918 0.00075364589 0.0053381778 0 0.270699 0.089735771
27000 0.98574608 0.99094039 0.00080711088 0.0054137233 0 0.27452991 0.14477885
28000 0.98139419 0.97487219 0.00071242405 0.0053315389 0 0.27036234 -0.016357088
29000 0.98458705 0.98600894 0.00068355573 0.0050157315 0 0.25434775 0.015749835
30000 0.98440759 1.0010793 0.00067594666 0.0048121267 0 0.24402295 0.20422918
31000 0.98060632 0.9825933 0.00069529947 0.0050649881 -0.00010700206 0.25684555 0.0014601267
32000 0.97616624 0.94976641 0.00067682494 0.0052111319 -0.00013230279 0.2642565 0.013738873
33000 0.97926122 0.95756794 0.00071774059 0.0053716513 -0.00024804252 0.27239644 0.10643895
34000 0.97227771 0.94365547 0.00080885359 0.0055744144 -0.00063217879 0.28267856 0.12472959
35000 0.97295679 0.98103625 0.0008130852 0.0057598371 -0.00097218501 0.29208134 0.88422099
36000 0.97131919 0.97164636 0.0008345433 0.0062212675 -0.001543055 0.31548048 0.22389401
37000 0.96988732 0.98589058 0.00083271625 0.0062999411 -0.0026064482 0.31947001 0.11797226
38000 0.97135512 0.96486494 0.00076943974 0.0057397763 -0.0041174109 0.29106406 0.072790492
39000 0.97386738 0.95218062 0.00079594844 0.0056308358 -0.0069006312 0.28553968 0.12417837
40000 0.97914045 1.0033941 0.000830798 0.0055952714 -0.0086705514 0.28373621 0.1976663
Loop time of 15.944 on 1 procs for 30000 steps with 20284 atoms
Performance: 16256.931 tau/day, 1881.589 timesteps/s, 38.166 Matom-step/s
99.5% CPU use with 1 MPI tasks x 1 OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 0.31871 | 0.31871 | 0.31871 | 0.0 | 2.00
Neigh | 0.082974 | 0.082974 | 0.082974 | 0.0 | 0.52
Comm | 0.16092 | 0.16092 | 0.16092 | 0.0 | 1.01
Output | 0.0047257 | 0.0047257 | 0.0047257 | 0.0 | 0.03
Modify | 15.189 | 15.189 | 15.189 | 0.0 | 95.27
Other | | 0.1871 | | | 1.17
Nlocal: 20284 ave 20284 max 20284 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 76 ave 76 max 76 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 38 ave 38 max 38 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 38
Ave neighs/atom = 0.0018733978
Neighbor list builds = 1500
Dangerous builds = 0
Total wall time: 0:00:22

View File

@ -0,0 +1,363 @@
LAMMPS (29 Aug 2024 - Development - patch_29Aug2024-296-g061c80104a-modified)
using 1 OpenMP thread(s) per MPI task
# Aspherical shear demo - 2d line boxes, solvated by SRD particles
units lj
atom_style line
atom_modify first big
dimension 2
read_data data.line.srd
Reading data file ...
orthogonal box = (-28.796757 -28.796757 -0.5) to (28.796757 28.796757 0.5)
2 by 2 by 1 MPI processor grid
reading atoms ...
400 atoms
400 lines
read_data CPU = 0.003 seconds
# add small particles as hi density lattice
lattice sq 0.4
Lattice spacing in x,y,z = 1.5811388 1.5811388 1.5811388
region plane block INF INF INF INF -0.001 0.001
lattice sq 10.0
Lattice spacing in x,y,z = 0.31622777 0.31622777 0.31622777
create_atoms 2 region plane
Created 33489 atoms
using lattice units in orthogonal box = (-28.796757 -28.796757 -0.5) to (28.796757 28.796757 0.5)
create_atoms CPU = 0.001 seconds
group big type 1
400 atoms in group big
group small type 2
33489 atoms in group small
set group small mass 0.01
Setting atom values ...
33489 settings made for mass
# delete overlaps
# must set 1-2 cutoff to non-zero value
pair_style lj/cut 1.5
pair_coeff 1 1 1.0 1.0
pair_coeff 2 2 0.0 1.0 0.0
pair_coeff 1 2 1.0 1.0
delete_atoms overlap 1.5 small big
System init for delete_atoms ...
Generated 0 of 1 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 1.8
ghost atom cutoff = 1.8
binsize = 0.9, bins = 64 64 2
2 neighbor lists, perpetual/occasional/extra = 1 1 0
(1) command delete_atoms, occasional
attributes: full, newton on
pair build: full/bin/atomonly
stencil: full/bin/2d
bin: standard
(2) pair lj/cut, perpetual
attributes: half, newton on
pair build: half/bin/atomonly/newton
stencil: half/bin/2d
bin: standard
WARNING: Delete_atoms cutoff > minimum neighbor cutoff (src/delete_atoms.cpp:313)
Deleted 13605 atoms, new total = 20284
# SRD run
reset_timestep 0
velocity small create 1.44 87287 loop geom
neighbor 0.8 multi
neigh_modify delay 0 every 1 check yes
neigh_modify exclude molecule/intra big include big
comm_modify mode multi group big vel yes
neigh_modify include big
# no pairwise interactions with small particles
pair_style line/lj 2.5
pair_coeff 1 1 1.0 1.0 1.0 1.0 2.5
pair_coeff 2 2 0.0 0.0 0.0 1.0 0.0
pair_coeff 1 2 1.0 0.2 1.0 0.2 2.5
# use fix SRD to push small particles out from inside big ones
# if comment out, big particles won't see SRD particles
timestep 0.0001
fix 1 big rigid molecule
100 rigid bodies with 400 atoms
fix 2 small srd 20 big 1.0 0.25 49894 search 0.2 cubic warn 0.0001 shift yes 49829 overlap yes collision noslip
fix 3 all deform 1 x scale 1.25 y scale 1.25
fix 4 all enforce2d
# diagnostics
compute tsmall small temp/deform
compute tbig big temp
variable pebig equal pe*atoms/count(big)
variable ebig equal etotal*atoms/count(big)
compute_modify tbig extra/dof -350
compute 1 big erotate/asphere
compute 2 all ke
compute 3 all pe
variable toteng equal (c_1+c_2+c_3)/atoms
thermo 1000
thermo_style custom step c_tsmall f_2[9] c_1 etotal v_pebig v_ebig press
thermo_modify temp tbig
WARNING: Temperature for thermo pressure is not for group all (src/thermo.cpp:533)
compute 10 big property/atom end1x end1y end2x end2y
#dump 1 all custom 500 dump1.atom.srd id type x y z ix iy iz
#dump 2 all custom 500 dump1.line.srd id type # c_10[1] c_10[2] c_10[3] c_10[4]
run 10000
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
Your simulation uses code contributions which should be cited:
- Type Label Framework: https://doi.org/10.1021/acs.jpcb.3c08419
@Article{Gissinger24,
author = {Jacob R. Gissinger, Ilia Nikiforov, Yaser Afshar, Brendon Waters, Moon-ki Choi, Daniel S. Karls, Alexander Stukowski, Wonpil Im, Hendrik Heinz, Axel Kohlmeyer, and Ellad B. Tadmor},
title = {Type Label Framework for Bonded Force Fields in LAMMPS},
journal = {J. Phys. Chem. B},
year = 2024,
volume = 128,
number = 13,
pages = {3282-3297}
}
- neighbor multi command: doi:10.1016/j.cpc.2008.03.005, doi:10.1007/s40571-020-00361-2
@Article{Intveld08,
author = {in 't Veld, P. J. and S. J.~Plimpton and G. S. Grest},
title = {Accurate and Efficient Methods for Modeling Colloidal
Mixtures in an Explicit Solvent using Molecular Dynamics},
journal = {Comput.\ Phys.\ Commut.},
year = 2008,
volume = 179,
pages = {320--329}
}
@article{Shire2020,
author = {Shire, Tom and Hanley, Kevin J. and Stratford, Kevin},
title = {{DEM} Simulations of Polydisperse Media: Efficient Contact
Detection Applied to Investigate the Quasi-Static Limit},
journal = {Computational Particle Mechanics},
year = {2020}
@article{Monti2022,
author = {Monti, Joseph M. and Clemmer, Joel T. and Srivastava,
Ishan and Silbert, Leonardo E. and Grest, Gary S.
and Lechman, Jeremy B.},
title = {Large-scale frictionless jamming with power-law particle
size distributions},
journal = {Phys. Rev. E},
volume = {106}
issue = {3}
year = {2022}
}
- fix srd command: doi:10.1063/1.3419070
@Article{Petersen10,
author = {M. K. Petersen and J. B. Lechman and S. J. Plimpton and
G. S. Grest and in 't Veld, P. J. and P. R. Schunk},
title = {Mesoscale Hydrodynamics via Stochastic Rotation
Dynamics: Comparison with {L}ennard-{J}ones Fluid},
journal = {J.~Chem.\ Phys.},
year = 2010,
volume = 132,
pages = 174106
}
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
Generated 0 of 1 mixed pair_coeff terms from geometric mixing rule
WARNING: Using compute temp/deform with inconsistent fix deform remap option (src/compute_temp_deform.cpp:71)
WARNING: Using fix srd with box deformation but no SRD thermostat (src/SRD/fix_srd.cpp:405)
SRD info:
SRD/big particles = 19884 400
big particle diameter max/min = 1.9988171 0.50330564
SRD temperature & lamda = 1 0.02
SRD max distance & max velocity = 0.08 40
SRD grid counts: 230 230 1
SRD grid size: request, actual (xyz) = 0.25, 0.25040659 0.25040659 1
SRD per actual grid cell = 0.45503978
SRD viscosity = 0.92062623
big/SRD mass density ratio = 12.298053
WARNING: SRD bin size for fix srd differs from user request (src/SRD/fix_srd.cpp:2809)
WARNING: Fix srd grid size > 1/4 of big particle diameter (src/SRD/fix_srd.cpp:2830)
# of rescaled SRD velocities = 0
ave/max small velocity = 15.906001 29.105426
ave/max big velocity = 0 0
Neighbor list info ...
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 3.3
ghost atom cutoff = 3.3
binsize = 1.65, bins = 35 35 1
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair line/lj, perpetual
attributes: half, newton on
pair build: half/multi/atomonly/newton
stencil: half/multi/2d
bin: multi
Per MPI rank memory allocation (min/avg/max) = 13.44 | 13.45 | 13.47 Mbytes
Step c_tsmall f_2[9] c_1 TotEng v_pebig v_ebig Press
0 1.6084386 0 0 0 0 0 0
1000 1.4539924 1.2578325 0.0001679809 0.0010497614 0 0.053233399 0.69841607
2000 1.3516746 1.1693535 0.00031932331 0.0021450754 0 0.10877677 0.058141137
3000 1.3294093 1.1539986 0.00032558495 0.0022345521 0 0.11331414 0.085892255
4000 1.3049311 1.1174444 0.00039637116 0.0026520968 0 0.13448783 0.10574422
5000 1.2790124 1.1209176 0.0004519172 0.0032635257 0 0.16549339 0.59225702
6000 1.2631214 1.0868777 0.00052274216 0.003527049 0 0.17885666 0.26093936
7000 1.2520054 1.0780954 0.00051683183 0.0038111141 0 0.1932616 -0.0014733978
8000 1.2412037 1.0587149 0.00056620143 0.0038329297 0 0.19436786 0.31576462
9000 1.2242125 1.0699712 0.00065335672 0.0039948578 0 0.20257924 0.19755012
10000 1.2155758 1.0279682 0.00059730828 0.004142635 0 0.21007302 0.30022953
Loop time of 1.92412 on 4 procs for 10000 steps with 20284 atoms
Performance: 44903.607 tau/day, 5197.177 timesteps/s, 105.420 Matom-step/s
97.6% 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.026855 | 0.027529 | 0.028377 | 0.4 | 1.43
Neigh | 0.0073723 | 0.007433 | 0.0075693 | 0.1 | 0.39
Comm | 0.062837 | 0.065574 | 0.066747 | 0.6 | 3.41
Output | 0.00072894 | 0.00076558 | 0.00083361 | 0.0 | 0.04
Modify | 1.7861 | 1.7926 | 1.8 | 0.4 | 93.16
Other | | 0.03026 | | | 1.57
Nlocal: 5071 ave 5096 max 5051 min
Histogram: 1 0 1 0 0 1 0 0 0 1
Nghost: 44 ave 51 max 40 min
Histogram: 2 0 0 1 0 0 0 0 0 1
Neighs: 0 ave 0 max 0 min
Histogram: 4 0 0 0 0 0 0 0 0 0
Total # of neighbors = 0
Ave neighs/atom = 0
Neighbor list builds = 500
Dangerous builds = 0
#undump 1
#undump 2
unfix 3
change_box all triclinic
Changing box ...
triclinic box = (-35.995947 -35.995947 -0.5) to (35.995947 35.995947 0.5) with tilt (0 0 0)
fix 2 small srd 20 big 1.0 0.25 49894 search 0.2 cubic warn 0.0001 shift yes 49829 overlap yes collision noslip #tstat yes
#dump 1 all custom 500 dump2.atom.srd id type x y z ix iy iz
#dump 2 all custom 500 dump2.line.srd id type # c_10[1] c_10[2] c_10[3] c_10[4]
fix 3 all deform 1 xy erate 0.0002 units box remap v
run 30000
Generated 0 of 1 mixed pair_coeff terms from geometric mixing rule
WARNING: Using fix srd with box deformation but no SRD thermostat (src/SRD/fix_srd.cpp:405)
SRD info:
SRD/big particles = 19884 400
big particle diameter max/min = 1.9988171 0.50330564
SRD temperature & lamda = 1 0.02
SRD max distance & max velocity = 0.08 40
SRD grid counts: 288 288 1
SRD grid size: request, actual (xyz) = 0.25, 0.24997185 0.24997185 1
SRD per actual grid cell = 0.26976265
SRD viscosity = 1.0312189
big/SRD mass density ratio = 20.672578
WARNING: SRD bin size for fix srd differs from user request (src/SRD/fix_srd.cpp:2809)
WARNING: Fix srd grid size > 1/4 of big particle diameter (src/SRD/fix_srd.cpp:2830)
# of rescaled SRD velocities = 0
ave/max small velocity = 12.826666 40
ave/max big velocity = 0.53469722 1.7415554
Neighbor list info ...
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 3.3
ghost atom cutoff = 3.3
binsize = 1.65, bins = 44 44 1
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair line/lj, perpetual
attributes: half, newton on
pair build: half/multi/atomonly/newton/tri
stencil: half/multi/2d/tri
bin: multi
Per MPI rank memory allocation (min/avg/max) = 17.6 | 17.6 | 17.61 Mbytes
Step c_tsmall f_2[9] c_1 TotEng v_pebig v_ebig Press
10000 1.0416233 0 0.0005972922 0.0041426543 0 0.210074 0.016213064
11000 1.0366852 1.0236717 0.00066926382 0.004404743 0 0.22336452 0.097686059
12000 1.028695 1.0023004 0.00065323121 0.0043971164 0 0.22297777 0.30007875
13000 1.0223214 1.0296267 0.00060201395 0.0041815724 0 0.21204754 0.17307062
14000 1.0210601 1.0092227 0.00057020066 0.0041936718 0 0.2126611 0.13379405
15000 1.0169223 1.003359 0.00060818329 0.0046120335 0 0.23387622 0.39144341
16000 1.012222 0.99937463 0.00060471571 0.004533278 0 0.22988253 0.16026051
17000 1.0087993 0.98937449 0.00061843646 0.0048888197 0 0.24791205 0.095507016
18000 1.0030288 0.94092316 0.00054252694 0.0046740839 0 0.2370228 -0.070838649
19000 1.0010739 0.99759814 0.00054041829 0.0045481798 0 0.2306382 0.1944996
20000 1.004189 1.0157285 0.00053330893 0.0044999261 0 0.22819125 0.14452619
21000 0.99601133 1.003771 0.00053282188 0.0048954851 0 0.24825005 0.20196263
22000 0.99445408 1.0163465 0.00059954941 0.0051668276 0 0.26200983 0.21332194
23000 0.99663947 0.94920707 0.00057729723 0.0051052499 0 0.25888722 0.19282224
24000 0.99500015 1.0021742 0.00064312956 0.0053430656 0 0.27094686 0.18044164
25000 0.99388189 0.98446723 0.00060150964 0.0054017824 0 0.27392438 0.18844037
26000 0.99632932 0.94670024 0.00052479857 0.004905147 0 0.24874 0.17961314
27000 0.99112962 1.0247118 0.00053159824 0.004752248 0 0.2409865 0.12037737
28000 0.98887153 0.97734068 0.00052255365 0.0050199491 0 0.25456162 0.29110866
29000 0.98938025 0.99467239 0.00053095044 0.0050303107 0 0.25508706 0.59776339
30000 0.99081592 0.98822122 0.00056693985 0.0052452228 0 0.26598525 0.0150843
31000 0.99050903 1.0184912 0.00056742049 0.0056515686 0 0.28659104 0.07877756
32000 0.98929926 0.99257634 0.00058111732 0.005740055 0 0.29107819 0.19146041
33000 0.98698723 0.94872564 0.00056547335 0.0057628447 0 0.29223385 0.076755599
34000 0.98967998 0.98777081 0.00056045905 0.0055645603 0 0.28217885 0.095025284
35000 0.98777734 0.95746323 0.00050104756 0.0055630681 -4.7847642e-05 0.28210318 0.25667997
36000 0.98661597 0.98801246 0.00047074618 0.0054500805 -5.8956193e-05 0.27637358 0.18221607
37000 0.98390111 0.9837894 0.00044581144 0.0054703357 -7.4197741e-05 0.27740072 0.11959303
38000 0.98092646 1.0142057 0.0004945556 0.0056372628 -8.6736668e-05 0.2858656 0.017325263
39000 0.98125957 0.94219822 0.00059691168 0.0060914156 -9.9726556e-05 0.30889569 0.0081217281
40000 0.98362942 0.9649582 0.00062286697 0.0063736358 -0.00010700337 0.32320707 0.293121
Loop time of 5.08621 on 4 procs for 30000 steps with 20284 atoms
Performance: 50961.296 tau/day, 5898.298 timesteps/s, 119.641 Matom-step/s
98.8% 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.084321 | 0.084948 | 0.086233 | 0.3 | 1.67
Neigh | 0.027521 | 0.029247 | 0.030632 | 0.7 | 0.58
Comm | 0.19101 | 0.20262 | 0.2068 | 1.5 | 3.98
Output | 0.0019581 | 0.0020369 | 0.0022544 | 0.3 | 0.04
Modify | 4.681 | 4.6884 | 4.7051 | 0.4 | 92.18
Other | | 0.07891 | | | 1.55
Nlocal: 5071 ave 5197 max 4951 min
Histogram: 1 0 0 1 0 0 1 0 0 1
Nghost: 44 ave 50 max 41 min
Histogram: 2 0 0 1 0 0 0 0 0 1
Neighs: 5.75 ave 12 max 0 min
Histogram: 1 0 0 1 0 1 0 0 0 1
Total # of neighbors = 23
Ave neighs/atom = 0.0011338986
Neighbor list builds = 1500
Dangerous builds = 0
Total wall time: 0:00:07

View File

@ -0,0 +1,323 @@
LAMMPS (29 Aug 2024 - Development - patch_29Aug2024-296-g061c80104a-modified)
using 1 OpenMP thread(s) per MPI task
# Aspherical shear demo - 2d line boxes, solvated by SRD particles
units lj
atom_style line
atom_modify first big
dimension 2
read_data data.line.srd
Reading data file ...
orthogonal box = (-28.796757 -28.796757 -0.5) to (28.796757 28.796757 0.5)
4 by 2 by 1 MPI processor grid
reading atoms ...
400 atoms
400 lines
read_data CPU = 0.002 seconds
# add small particles as hi density lattice
lattice sq 0.4
Lattice spacing in x,y,z = 1.5811388 1.5811388 1.5811388
region plane block INF INF INF INF -0.001 0.001
lattice sq 10.0
Lattice spacing in x,y,z = 0.31622777 0.31622777 0.31622777
create_atoms 2 region plane
Created 33489 atoms
using lattice units in orthogonal box = (-28.796757 -28.796757 -0.5) to (28.796757 28.796757 0.5)
create_atoms CPU = 0.001 seconds
group big type 1
400 atoms in group big
group small type 2
33489 atoms in group small
set group small mass 0.01
Setting atom values ...
33489 settings made for mass
# delete overlaps
# must set 1-2 cutoff to non-zero value
pair_style lj/cut 1.5
pair_coeff 1 1 1.0 1.0
pair_coeff 2 2 0.0 1.0 0.0
pair_coeff 1 2 1.0 1.0
delete_atoms overlap 1.5 small big
System init for delete_atoms ...
Generated 0 of 1 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 1.8
ghost atom cutoff = 1.8
binsize = 0.9, bins = 64 64 2
2 neighbor lists, perpetual/occasional/extra = 1 1 0
(1) command delete_atoms, occasional
attributes: full, newton on
pair build: full/bin/atomonly
stencil: full/bin/2d
bin: standard
(2) pair lj/cut, perpetual
attributes: half, newton on
pair build: half/bin/atomonly/newton
stencil: half/bin/2d
bin: standard
WARNING: Delete_atoms cutoff > minimum neighbor cutoff (src/delete_atoms.cpp:313)
Deleted 13605 atoms, new total = 20284
# SRD run
reset_timestep 0
velocity small create 1.44 87287 loop geom
neighbor 0.8 multi
neigh_modify delay 0 every 1 check yes
neigh_modify exclude molecule/intra big include big
comm_modify mode multi group big vel yes
neigh_modify include big
# no pairwise interactions with small particles
pair_style line/lj 2.5
pair_coeff 1 1 1.0 1.0 1.0 1.0 2.5
pair_coeff 2 2 0.0 0.0 0.0 1.0 0.0
pair_coeff 1 2 1.0 0.2 1.0 0.2 2.5
# use fix SRD to push small particles out from inside big ones
# if comment out, big particles won't see SRD particles
timestep 0.0002
fix 1 big rigid molecule
100 rigid bodies with 400 atoms
fix 2 small srd 20 big 1.0 0.25 49894 search 0.2 cubic warn 0.0001 shift yes 49829 overlap yes collision noslip
fix 3 all deform 1 x scale 1.25 y scale 1.25
fix 4 all enforce2d
# diagnostics
compute tsmall small temp/deform
compute tbig big temp
variable pebig equal pe*atoms/count(big)
variable ebig equal etotal*atoms/count(big)
compute_modify tbig extra/dof -350
compute 1 big erotate/asphere
compute 2 all ke
compute 3 all pe
variable toteng equal (c_1+c_2+c_3)/atoms
thermo 1000
thermo_style custom step c_tsmall f_2[9] c_1 etotal v_pebig v_ebig press
thermo_modify temp tbig
WARNING: Temperature for thermo pressure is not for group all (src/thermo.cpp:533)
compute 10 big property/atom end1x end1y end2x end2y
#dump 1 all custom 500 dump1.atom.srd id type x y z ix iy iz
#dump 2 all custom 500 dump1.line.srd id type # c_10[1] c_10[2] c_10[3] c_10[4]
run 10000
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
Your simulation uses code contributions which should be cited:
- Type Label Framework: https://doi.org/10.1021/acs.jpcb.3c08419
@Article{Gissinger24,
author = {Jacob R. Gissinger, Ilia Nikiforov, Yaser Afshar, Brendon Waters, Moon-ki Choi, Daniel S. Karls, Alexander Stukowski, Wonpil Im, Hendrik Heinz, Axel Kohlmeyer, and Ellad B. Tadmor},
title = {Type Label Framework for Bonded Force Fields in LAMMPS},
journal = {J. Phys. Chem. B},
year = 2024,
volume = 128,
number = 13,
pages = {3282-3297}
}
- neighbor multi command: doi:10.1016/j.cpc.2008.03.005, doi:10.1007/s40571-020-00361-2
@Article{Intveld08,
author = {in 't Veld, P. J. and S. J.~Plimpton and G. S. Grest},
title = {Accurate and Efficient Methods for Modeling Colloidal
Mixtures in an Explicit Solvent using Molecular Dynamics},
journal = {Comput.\ Phys.\ Commut.},
year = 2008,
volume = 179,
pages = {320--329}
}
@article{Shire2020,
author = {Shire, Tom and Hanley, Kevin J. and Stratford, Kevin},
title = {{DEM} Simulations of Polydisperse Media: Efficient Contact
Detection Applied to Investigate the Quasi-Static Limit},
journal = {Computational Particle Mechanics},
year = {2020}
@article{Monti2022,
author = {Monti, Joseph M. and Clemmer, Joel T. and Srivastava,
Ishan and Silbert, Leonardo E. and Grest, Gary S.
and Lechman, Jeremy B.},
title = {Large-scale frictionless jamming with power-law particle
size distributions},
journal = {Phys. Rev. E},
volume = {106}
issue = {3}
year = {2022}
}
- fix srd command: doi:10.1063/1.3419070
@Article{Petersen10,
author = {M. K. Petersen and J. B. Lechman and S. J. Plimpton and
G. S. Grest and in 't Veld, P. J. and P. R. Schunk},
title = {Mesoscale Hydrodynamics via Stochastic Rotation
Dynamics: Comparison with {L}ennard-{J}ones Fluid},
journal = {J.~Chem.\ Phys.},
year = 2010,
volume = 132,
pages = 174106
}
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
Generated 0 of 1 mixed pair_coeff terms from geometric mixing rule
WARNING: Using compute temp/deform with inconsistent fix deform remap option (src/compute_temp_deform.cpp:71)
WARNING: Using fix srd with box deformation but no SRD thermostat (src/SRD/fix_srd.cpp:405)
SRD info:
SRD/big particles = 19884 400
big particle diameter max/min = 1.9988171 0.50330564
SRD temperature & lamda = 1 0.04
SRD max distance & max velocity = 0.16 40
SRD grid counts: 230 230 1
SRD grid size: request, actual (xyz) = 0.25, 0.25040659 0.25040659 1
SRD per actual grid cell = 0.45503978
SRD viscosity = 1.0732692
big/SRD mass density ratio = 12.298053
WARNING: SRD bin size for fix srd differs from user request (src/SRD/fix_srd.cpp:2809)
WARNING: Fix srd grid size > 1/4 of big particle diameter (src/SRD/fix_srd.cpp:2830)
# of rescaled SRD velocities = 0
ave/max small velocity = 15.906001 29.105426
ave/max big velocity = 0 0
Neighbor list info ...
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 3.3
ghost atom cutoff = 3.3
binsize = 1.65, bins = 35 35 1
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair line/lj, perpetual
attributes: half, newton on
pair build: half/multi/atomonly/newton
stencil: half/multi/2d
bin: multi
Per MPI rank memory allocation (min/avg/max) = 9.752 | 9.762 | 9.781 Mbytes
Step c_tsmall f_2[9] c_1 TotEng v_pebig v_ebig Press
0 1.4809886 0 0 0 0 0 0
1000 1.2265081 1.1522909 0.00027866069 0.0022427232 0 0.1137285 0.58262976
2000 1.1757141 1.1251323 0.00040597152 0.003287261 0 0.16669701 0.27109853
3000 1.126304 1.0646585 0.00050542958 0.0040748897 0 0.20663766 0.36959653
4000 1.1140297 1.0761435 0.00060430927 0.0052863645 0 0.26807154 0.35099205
5000 1.0823307 1.0256814 0.00066557681 0.0051213284 0 0.25970256 0.28491631
6000 1.0656188 1.0387091 0.00066454105 0.005213537 0 0.26437846 0.2150581
7000 1.0600108 1.0099931 0.0007238719 0.005470459 0 0.27740698 0.21846568
8000 1.0464374 1.0049819 0.00061068366 0.0053702582 0 0.27232579 0.1326171
9000 1.0381097 1.0126049 0.00057318728 0.0055976321 0 0.28385592 0.16797796
10000 1.0312982 1.0018962 0.00050597007 0.0051153126 0 0.2593975 0.15281043
Loop time of 1.2997 on 8 procs for 10000 steps with 20284 atoms
Performance: 132953.355 tau/day, 7694.060 timesteps/s, 156.066 Matom-step/s
96.7% CPU use with 8 MPI tasks x 1 OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 0.01406 | 0.014495 | 0.01532 | 0.3 | 1.12
Neigh | 0.0051916 | 0.0053424 | 0.0054386 | 0.1 | 0.41
Comm | 0.062053 | 0.065305 | 0.069014 | 0.9 | 5.02
Output | 0.00062289 | 0.00065254 | 0.00077243 | 0.0 | 0.05
Modify | 1.169 | 1.178 | 1.1905 | 0.6 | 90.64
Other | | 0.03589 | | | 2.76
Nlocal: 2535.5 ave 2637 max 2476 min
Histogram: 1 3 1 1 0 0 0 0 1 1
Nghost: 31.125 ave 42 max 25 min
Histogram: 3 0 1 2 0 0 0 0 1 1
Neighs: 0 ave 0 max 0 min
Histogram: 8 0 0 0 0 0 0 0 0 0
Total # of neighbors = 0
Ave neighs/atom = 0
Neighbor list builds = 500
Dangerous builds = 0
#undump 1
#undump 2
unfix 3
change_box all triclinic
Changing box ...
triclinic box = (-35.995947 -35.995947 -0.5) to (35.995947 35.995947 0.5) with tilt (0 0 0)
fix 2 small srd 20 big 1.0 0.25 49894 search 0.2 cubic warn 0.0001 shift yes 49829 overlap yes collision noslip #tstat yes
#dump 1 all custom 500 dump2.atom.srd id type x y z ix iy iz
#dump 2 all custom 500 dump2.line.srd id type # c_10[1] c_10[2] c_10[3] c_10[4]
fix 3 all deform 1 xy erate 0.0002 units box remap v
run 40000
Generated 0 of 1 mixed pair_coeff terms from geometric mixing rule
WARNING: Using fix srd with box deformation but no SRD thermostat (src/SRD/fix_srd.cpp:405)
SRD info:
SRD/big particles = 19884 400
big particle diameter max/min = 1.9988171 0.50330564
SRD temperature & lamda = 1 0.04
SRD max distance & max velocity = 0.16 40
SRD grid counts: 288 288 1
SRD grid size: request, actual (xyz) = 0.25, 0.24997185 0.24997185 1
SRD per actual grid cell = 0.26976265
SRD viscosity = 1.5799049
big/SRD mass density ratio = 20.672578
WARNING: SRD bin size for fix srd differs from user request (src/SRD/fix_srd.cpp:2809)
WARNING: Fix srd grid size > 1/4 of big particle diameter (src/SRD/fix_srd.cpp:2830)
# of rescaled SRD velocities = 1
ave/max small velocity = 12.481632 40
ave/max big velocity = 0.58815233 1.5489134
Neighbor list info ...
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 3.3
ghost atom cutoff = 3.3
binsize = 1.65, bins = 44 44 1
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair line/lj, perpetual
attributes: half, newton on
pair build: half/multi/atomonly/newton/tri
stencil: half/multi/2d/tri
bin: multi
Per MPI rank memory allocation (min/avg/max) = 11.95 | 11.95 | 11.95 Mbytes
Step c_tsmall f_2[9] c_1 TotEng v_pebig v_ebig Press
10000 0.98889306 0 0.00050595647 0.0051153289 0 0.25939833 0.020019811
11000 0.98995417 0.99721412 0.0005166709 0.0054320552 0 0.27545952 0.03376188
12000 0.99401168 0.95502319 0.00053659416 0.0054974426 0 0.27877531 0.056856034
13000 0.98790692 0.96488357 0.00061076364 0.0053196554 0 0.26975972 0.2677228
14000 0.98939233 0.98809694 0.00052317779 0.0050536922 0 0.25627273 0.20381427
15000 0.99046365 0.97048828 0.00056914402 0.0053274908 0 0.27015706 0.082163088
16000 0.99743447 1.0111983 0.00053706165 0.0048068384 0 0.24375478 0.06429569
17000 0.99622359 1.0124982 0.0005905197 0.0055966416 -7.4541903e-05 0.2838057 0.25418037
18000 0.99283929 0.99581721 0.00061730878 0.0059098964 -0.00014754106 0.29969084 0.12701702
19000 0.99175517 1.0115581 0.0005128714 0.0059214809 -0.00046203987 0.30027829 0.2640506
20000 0.98895811 0.97731528 0.00052294314 0.0055670021 -0.0016029702 0.28230268 0.26239209
21000 0.98904093 0.98120258 0.00054169978 0.0052762731 -0.0026834879 0.26755981 0.15432481
22000 0.98773149 0.99217218 0.00056091602 0.0052754729 -0.0044093345 0.26751923 0.2208051
23000 0.98802862 0.96564549 0.00062226338 0.0053263454 -0.008790914 0.27009898 0.18058977
24000 0.98754002 1.024015 0.00057178953 0.0054083382 -0.0094859317 0.27425683 0.01598147
25000 0.98656341 0.94647246 0.00066215791 0.0053555849 -0.014877058 0.27158171 0.28794628
26000 0.98750471 1.0077626 0.00058955769 0.0057081639 -0.013151869 0.28946099 0.20814911
27

View File

@ -81,6 +81,7 @@ liblammpsplugin_t *liblammpsplugin_load(const char *lib)
ADDSYM(python_finalize);
ADDSYM(error);
ADDSYM(expand);
ADDSYM(file);
ADDSYM(command);

View File

@ -126,6 +126,7 @@ struct _liblammpsplugin {
void (*python_finalize)();
void (*error)(void *, int, const char *);
char *(*expand)(void *, const char *);
void (*file)(void *, const char *);
char *(*command)(void *, const char *);

View File

@ -1,4 +1,4 @@
LAMMPS (7 Feb 2024 - Development - patch_7Feb2024_update1-182-g93942f2013-modified)
LAMMPS (29 Aug 2024 - Development - patch_29Aug2024-372-g51d104975a)
OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98)
using 1 OpenMP thread(s) per MPI task
# Test of MEAM potential for HGa
@ -67,7 +67,7 @@ Created 1 atoms
variable teng equal "c_eatoms"
compute pot_energy all pe/atom
compute stress all stress/atom NULL
# dump 1 all custom 1 dump.msmeam id x y z fx fy fz c_pot_energy c_stress[1] c_stress[2] c_stress[3] c_stress[4] c_stress[5] c_stress[6]
dump 1 all custom 1 dump.msmeam id x y z fx fy fz c_pot_energy c_stress[1] c_stress[2] c_stress[3] c_stress[4] c_stress[5] c_stress[6]
run 1
WARNING: No fixes with time integration, atoms won't move (src/verlet.cpp:60)
Neighbor list info ...
@ -89,22 +89,22 @@ Neighbor list info ...
bin: none
Per MPI rank memory allocation (min/avg/max) = 8.587 | 8.587 | 8.587 Mbytes
Step Temp TotEng Press Pxx Pyy Pzz Pxy Pxz Pyz Lx Ly Lz Volume c_eatoms
0 0 15.433079 491354.7 838670.96 635393.15 0 80195.797 0 0 8 8 8 512 15.433079
1 0 15.433079 491354.7 838670.96 635393.15 0 80195.797 0 0 8 8 8 512 15.433079
Loop time of 4.4446e-05 on 1 procs for 1 steps with 3 atoms
0 0 15.438614 491542.52 839006.02 635621.55 0 80225.587 0 0 8 8 8 512 15.438614
1 0 15.438614 491542.52 839006.02 635621.55 0 80225.587 0 0 8 8 8 512 15.438614
Loop time of 0.000144827 on 1 procs for 1 steps with 3 atoms
Performance: 1943.932 ns/day, 0.012 hours/ns, 22499.213 timesteps/s, 67.498 katom-step/s
31.5% CPU use with 1 MPI tasks x 1 OpenMP threads
Performance: 596.574 ns/day, 0.040 hours/ns, 6904.790 timesteps/s, 20.714 katom-step/s
21.4% CPU use with 1 MPI tasks x 1 OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 2.9908e-05 | 2.9908e-05 | 2.9908e-05 | 0.0 | 67.29
Pair | 9.2136e-05 | 9.2136e-05 | 9.2136e-05 | 0.0 | 63.62
Neigh | 0 | 0 | 0 | 0.0 | 0.00
Comm | 1.033e-06 | 1.033e-06 | 1.033e-06 | 0.0 | 2.32
Output | 9.347e-06 | 9.347e-06 | 9.347e-06 | 0.0 | 21.03
Modify | 2.02e-07 | 2.02e-07 | 2.02e-07 | 0.0 | 0.45
Other | | 3.956e-06 | | | 8.90
Comm | 4.389e-06 | 4.389e-06 | 4.389e-06 | 0.0 | 3.03
Output | 3.9556e-05 | 3.9556e-05 | 3.9556e-05 | 0.0 | 27.31
Modify | 9.92e-07 | 9.92e-07 | 9.92e-07 | 0.0 | 0.68
Other | | 7.754e-06 | | | 5.35
Nlocal: 3 ave 3 max 3 min
Histogram: 1 0 0 0 0 0 0 0 0 0

View File

@ -1,4 +1,4 @@
LAMMPS (7 Feb 2024 - Development - patch_7Feb2024_update1-182-g93942f2013-modified)
LAMMPS (29 Aug 2024 - Development - patch_29Aug2024-372-g51d104975a)
OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98)
using 1 OpenMP thread(s) per MPI task
# Test of MEAM potential for HGa
@ -67,7 +67,7 @@ Created 1 atoms
variable teng equal "c_eatoms"
compute pot_energy all pe/atom
compute stress all stress/atom NULL
# dump 1 all custom 1 dump.msmeam id x y z fx fy fz c_pot_energy c_stress[1] c_stress[2] c_stress[3] c_stress[4] c_stress[5] c_stress[6]
dump 1 all custom 1 dump.msmeam id x y z fx fy fz c_pot_energy c_stress[1] c_stress[2] c_stress[3] c_stress[4] c_stress[5] c_stress[6]
run 1
WARNING: No fixes with time integration, atoms won't move (src/verlet.cpp:60)
Neighbor list info ...
@ -89,22 +89,22 @@ Neighbor list info ...
bin: none
Per MPI rank memory allocation (min/avg/max) = 7.965 | 8.123 | 8.594 Mbytes
Step Temp TotEng Press Pxx Pyy Pzz Pxy Pxz Pyz Lx Ly Lz Volume c_eatoms
0 0 15.433079 491354.7 838670.96 635393.15 0 80195.797 0 0 8 8 8 512 15.433079
1 0 15.433079 491354.7 838670.96 635393.15 0 80195.797 0 0 8 8 8 512 15.433079
Loop time of 8.70645e-05 on 4 procs for 1 steps with 3 atoms
0 0 15.438614 491542.52 839006.02 635621.55 0 80225.587 0 0 8 8 8 512 15.438614
1 0 15.438614 491542.52 839006.02 635621.55 0 80225.587 0 0 8 8 8 512 15.438614
Loop time of 0.000328503 on 4 procs for 1 steps with 3 atoms
Performance: 992.368 ns/day, 0.024 hours/ns, 11485.738 timesteps/s, 34.457 katom-step/s
29.0% CPU use with 4 MPI tasks x 1 OpenMP threads
Performance: 263.011 ns/day, 0.091 hours/ns, 3044.110 timesteps/s, 9.132 katom-step/s
75.3% 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.3957e-05 | 4.67e-05 | 5.1056e-05 | 0.0 | 53.64
Pair | 0.0001419 | 0.0001471 | 0.00015891 | 0.0 | 44.78
Neigh | 0 | 0 | 0 | 0.0 | 0.00
Comm | 1.105e-05 | 1.3822e-05 | 1.7033e-05 | 0.0 | 15.88
Output | 1.5765e-05 | 1.9045e-05 | 2.5216e-05 | 0.0 | 21.87
Modify | 2.58e-07 | 3.465e-07 | 3.81e-07 | 0.0 | 0.40
Other | | 7.151e-06 | | | 8.21
Comm | 2.2092e-05 | 2.8424e-05 | 3.667e-05 | 0.0 | 8.65
Output | 8.6275e-05 | 0.00010558 | 0.0001422 | 0.0 | 32.14
Modify | 1.093e-06 | 2.4148e-06 | 5.651e-06 | 0.0 | 0.74
Other | | 4.498e-05 | | | 13.69
Nlocal: 0.75 ave 3 max 0 min
Histogram: 3 0 0 0 0 0 0 0 0 1

View File

@ -1,37 +1,37 @@
# 2d NEMD simulation
units lj
atom_style atomic
dimension 2
units lj
atom_style atomic
dimension 2
lattice sq2 0.8442
region box prism 0 10 0 8 -0.5 0.5 0 0 0
create_box 2 box
create_atoms 1 box
mass * 1.0
lattice sq2 0.8442
region box prism 0 10 0 8 -0.5 0.5 0 0 0
create_box 2 box
create_atoms 1 box
mass * 1.0
velocity all create 1.44 87287 loop geom
velocity all create 1.44 87287 loop geom
region slice block 4 6 INF INF INF INF
set region slice type 2
region slice block 4 6 INF INF INF INF
set region slice type 2
pair_style lj/cut 2.5
pair_coeff * * 1.0 1.0 1.0
pair_style lj/cut 4.0
pair_coeff * * 1.0 1.0
neighbor 0.3 bin
neigh_modify delay 0 every 1
neighbor 0.3 bin
neigh_modify delay 0 every 1
fix 1 all nvt/sllod temp 1.0 1.0 1.0 tchain 1
fix 2 all deform 1 xy erate 0.01 remap v
fix 1 all nvt/sllod temp 1.0 1.0 1.0 tchain 1
fix 2 all deform 1 xy erate 0.01 remap v
#dump 1 all custom 5000 dump.nemd id type x y z
#dump 1 all custom 500 dump.nemd id type x y z
#dump 2 all image 1000 image.*.jpg type type adiam 1.2
#dump_modify 2 pad 5
#dump 2 all image 100 image.*.jpg type type adiam 1.2
#dump_modify 2 pad 5
#dump 3 all movie 1000 movie.mpg type type adiam 1.2
#dump_modify 3 pad 5
#dump 3 all movie 100 movie.mpg type type adiam 1.2
#dump_modify 3 pad 5
thermo 1000
thermo 50
run 50000
run 1000

View File

@ -1,137 +0,0 @@
LAMMPS (27 Nov 2018)
using 1 OpenMP thread(s) per MPI task
# 2d NEMD simulation
units lj
atom_style atomic
dimension 2
lattice sq2 0.8442
Lattice spacing in x,y,z = 1.53919 1.53919 1.53919
region box prism 0 10 0 8 -0.5 0.5 0 0 0
create_box 2 box
Created triclinic box = (0 0 -0.769595) to (15.3919 12.3135 0.769595) with tilt (0 0 0)
1 by 1 by 1 MPI processor grid
create_atoms 1 box
Created 160 atoms
Time spent = 0.000332355 secs
mass * 1.0
velocity all create 1.44 87287 loop geom
region slice block 4 6 INF INF INF INF
set region slice type 2
40 settings made for type
pair_style lj/cut 2.5
pair_coeff * * 1.0 1.0 1.0
neighbor 0.3 bin
neigh_modify delay 0 every 1
fix 1 all nvt/sllod temp 1.0 1.0 1.0 tchain 1
fix 2 all deform 1 xy erate 0.01 remap v
#dump 1 all custom 5000 dump.nemd id type x y z
#dump 2 all image 1000 image.*.jpg type type adiam 1.2
#dump_modify 2 pad 5
#dump 3 all movie 1000 movie.mpg type type adiam 1.2
#dump_modify 3 pad 5
thermo 1000
run 50000
Neighbor list info ...
update every 1 steps, delay 0 steps, check yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 1.3
ghost atom cutoff = 1.3
binsize = 0.65, bins = 24 19 3
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair lj/cut, perpetual
attributes: half, newton on
pair build: half/bin/newton/tri
stencil: half/bin/2d/newton/tri
bin: standard
Per MPI rank memory allocation (min/avg/max) = 3.065 | 3.065 | 3.065 Mbytes
Step Temp E_pair E_mol TotEng Press Volume
0 1.44 0 0 1.431 1.2080502 189.52855
1000 1.1326992 0.25863754 0 1.3842573 6.0588079 189.52855
2000 0.99104643 0.37634349 0 1.3611959 7.8993387 189.52855
3000 1.0749743 0.21908728 0 1.2873429 6.2659517 189.52855
4000 1.0986742 0.27147022 0 1.3632777 5.8778262 189.52855
5000 1.071838 0.23413372 0 1.2992728 5.9120887 189.52855
6000 1.0013194 0.26923671 0 1.2642979 6.2802759 189.52855
7000 0.94110685 0.3224557 0 1.2576806 6.1864166 189.52855
8000 0.97391513 0.28793383 0 1.255762 6.5071893 189.52855
9000 0.95346063 0.31050593 0 1.2580074 6.3321512 189.52855
10000 0.96236447 0.26298203 0 1.2193317 6.4083918 189.52855
11000 0.9511149 0.27571527 0 1.2208857 6.0949768 189.52855
12000 1.0186935 0.18134918 0 1.1936758 5.1269128 189.52855
13000 0.96350682 0.23171507 0 1.1892 5.7367267 189.52855
14000 0.94740402 0.27357945 0 1.2150622 6.0156532 189.52855
15000 0.87951545 0.27745111 0 1.1514696 6.297405 189.52855
16000 0.93216196 0.27020559 0 1.1965415 6.6188833 189.52855
17000 0.94109936 0.24756193 0 1.1827794 5.8993088 189.52855
18000 0.97325239 0.27996398 0 1.2471335 6.1486561 189.52855
19000 1.0494686 0.27132686 0 1.3142363 6.6757065 189.52855
20000 1.0391862 0.25195457 0 1.2846459 6.143235 189.52855
21000 0.96407137 0.27359166 0 1.2316376 5.9577116 189.52855
22000 0.97954534 0.31920255 0 1.2926257 6.5320163 189.52855
23000 0.97585473 0.24154424 0 1.2112999 6.0839179 189.52855
24000 1.0522109 0.1646952 0 1.2103298 5.0388687 189.52855
25000 0.93707172 0.25655806 0 1.1877731 5.819887 189.52855
26000 0.89798775 0.26629627 0 1.1586716 6.0393558 189.52855
27000 0.93259926 0.24542428 0 1.1721948 5.3560986 189.52855
28000 0.8428223 0.20784302 0 1.0453977 4.956911 189.52855
29000 0.81653505 0.21924932 0 1.030681 5.271501 189.52855
30000 0.90157811 0.15070734 0 1.0466506 4.476142 189.52855
31000 0.86580039 0.21115151 0 1.0715407 5.0056915 189.52855
32000 0.89768096 0.28377249 0 1.1758429 5.8449711 189.52855
33000 1.0504011 0.29009694 0 1.333933 6.1319155 189.52855
34000 1.2009765 0.19137934 0 1.3848498 4.9643885 189.52855
35000 1.208705 0.27071222 0 1.4718628 6.2162389 189.52855
36000 1.2211309 0.28389521 0 1.497394 6.5090715 189.52855
37000 1.1384381 0.42795547 0 1.5592783 8.5129272 189.52855
38000 1.2198334 0.34335732 0 1.5555668 7.2940883 189.52855
39000 1.1562045 0.35783089 0 1.5068091 7.340999 189.52855
40000 1.2145924 0.28410558 0 1.4911068 6.234986 189.52855
41000 1.1240878 0.34663237 0 1.4636946 7.1720193 189.52855
42000 1.2491422 0.26815889 0 1.509494 6.1390803 189.52855
43000 1.1387564 0.33755832 0 1.4691975 7.0577597 189.52855
44000 1.0031598 0.4081807 0 1.4050708 8.2732113 189.52855
45000 1.0166213 0.29131017 0 1.3015776 6.1907807 189.52855
46000 0.96251302 0.31483519 0 1.2713325 6.6987235 189.52855
47000 0.89809294 0.30909884 0 1.2015787 6.3997583 189.52855
48000 0.86736217 0.31917648 0 1.1811176 7.1584774 189.52855
49000 0.91979053 0.21099403 0 1.1250359 5.4968259 189.52855
50000 0.87079959 0.24059333 0 1.1059504 5.6039305 189.52855
Loop time of 1.54353 on 1 procs for 50000 steps with 160 atoms
Performance: 13993916.675 tau/day, 32393.326 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 | 0.20172 | 0.20172 | 0.20172 | 0.0 | 13.07
Neigh | 0.16634 | 0.16634 | 0.16634 | 0.0 | 10.78
Comm | 0.068928 | 0.068928 | 0.068928 | 0.0 | 4.47
Output | 0.00059891 | 0.00059891 | 0.00059891 | 0.0 | 0.04
Modify | 1.0123 | 1.0123 | 1.0123 | 0.0 | 65.59
Other | | 0.09361 | | | 6.06
Nlocal: 160 ave 160 max 160 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 73 ave 73 max 73 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 353 ave 353 max 353 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 353
Ave neighs/atom = 2.20625
Neighbor list builds = 5273
Dangerous builds = 0
Total wall time: 0:00:01

View File

@ -1,137 +0,0 @@
LAMMPS (27 Nov 2018)
using 1 OpenMP thread(s) per MPI task
# 2d NEMD simulation
units lj
atom_style atomic
dimension 2
lattice sq2 0.8442
Lattice spacing in x,y,z = 1.53919 1.53919 1.53919
region box prism 0 10 0 8 -0.5 0.5 0 0 0
create_box 2 box
Created triclinic box = (0 0 -0.769595) to (15.3919 12.3135 0.769595) with tilt (0 0 0)
2 by 2 by 1 MPI processor grid
create_atoms 1 box
Created 160 atoms
Time spent = 0.000308275 secs
mass * 1.0
velocity all create 1.44 87287 loop geom
region slice block 4 6 INF INF INF INF
set region slice type 2
40 settings made for type
pair_style lj/cut 2.5
pair_coeff * * 1.0 1.0 1.0
neighbor 0.3 bin
neigh_modify delay 0 every 1
fix 1 all nvt/sllod temp 1.0 1.0 1.0 tchain 1
fix 2 all deform 1 xy erate 0.01 remap v
#dump 1 all custom 5000 dump.nemd id type x y z
#dump 2 all image 1000 image.*.jpg type type adiam 1.2
#dump_modify 2 pad 5
#dump 3 all movie 1000 movie.mpg type type adiam 1.2
#dump_modify 3 pad 5
thermo 1000
run 50000
Neighbor list info ...
update every 1 steps, delay 0 steps, check yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 1.3
ghost atom cutoff = 1.3
binsize = 0.65, bins = 24 19 3
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair lj/cut, perpetual
attributes: half, newton on
pair build: half/bin/newton/tri
stencil: half/bin/2d/newton/tri
bin: standard
Per MPI rank memory allocation (min/avg/max) = 3.062 | 3.062 | 3.062 Mbytes
Step Temp E_pair E_mol TotEng Press Volume
0 1.44 0 0 1.431 1.2080502 189.52855
1000 1.1682693 0.24486562 0 1.4058332 5.8092954 189.52855
2000 1.0928734 0.27609364 0 1.3621366 6.2237017 189.52855
3000 1.09088 0.24816112 0 1.3322231 5.7001547 189.52855
4000 1.0110684 0.29868377 0 1.303433 7.3312319 189.52855
5000 0.91033678 0.28330698 0 1.1879542 6.1840352 189.52855
6000 0.93416074 0.22661127 0 1.1549335 5.3619735 189.52855
7000 0.93305734 0.19203739 0 1.1192631 5.2497547 189.52855
8000 0.88944438 0.19421381 0 1.0780992 4.9733446 189.52855
9000 0.86949257 0.21207681 0 1.0761351 5.4687076 189.52855
10000 0.80088203 0.24071142 0 1.0365879 5.334545 189.52855
11000 0.88899727 0.19972767 0 1.0831687 4.8832207 189.52855
12000 0.93045817 0.17883252 0 1.1034753 4.9081709 189.52855
13000 0.9724196 0.19089684 0 1.1572388 5.3460903 189.52855
14000 0.93902186 0.25513773 0 1.1882907 6.3338337 189.52855
15000 0.91879903 0.31605547 0 1.229112 6.2085671 189.52855
16000 0.9860058 0.26863362 0 1.2484769 6.514688 189.52855
17000 1.0354756 0.23445357 0 1.2634574 6.1519296 189.52855
18000 1.0244774 0.27511827 0 1.2931927 6.2230002 189.52855
19000 1.1581216 0.21558936 0 1.3664727 5.5458237 189.52855
20000 1.0552168 0.29344488 0 1.3420666 6.4880315 189.52855
21000 0.97925435 0.31583414 0 1.2889681 6.7584093 189.52855
22000 1.0112494 0.26246834 0 1.2673974 5.4112008 189.52855
23000 1.0463332 0.26049752 0 1.3002911 6.1359606 189.52855
24000 1.1130319 0.19848564 0 1.3045611 5.7088487 189.52855
25000 1.0355662 0.28048951 0 1.3095834 6.4596476 189.52855
26000 1.0823932 0.21784218 0 1.2934704 5.106334 189.52855
27000 0.99719525 0.32679678 0 1.3177596 6.7399277 189.52855
28000 1.0665868 0.25002709 0 1.3099477 6.2732557 189.52855
29000 1.0312798 0.30650087 0 1.3313351 7.0581024 189.52855
30000 1.0388277 0.29812912 0 1.3304641 6.2533028 189.52855
31000 1.0461658 0.21344416 0 1.2530714 5.3631154 189.52855
32000 1.0233681 0.27545017 0 1.2924222 5.9612896 189.52855
33000 1.1353086 0.20278244 0 1.3309953 5.7619128 189.52855
34000 1.0374791 0.29661216 0 1.327607 6.5124409 189.52855
35000 1.0752783 0.21684443 0 1.2854022 5.4759171 189.52855
36000 1.0383445 0.27068641 0 1.3025412 6.8367218 189.52855
37000 0.97341144 0.24034988 0 1.2076775 6.1335996 189.52855
38000 0.9285918 0.2737544 0 1.1965425 5.8750327 189.52855
39000 0.84869423 0.30079207 0 1.144182 6.8909326 189.52855
40000 0.88237131 0.26049171 0 1.1373482 6.3932981 189.52855
41000 0.90368591 0.21064132 0 1.1086792 5.5627232 189.52855
42000 0.93436749 0.20367569 0 1.1322034 5.1420052 189.52855
43000 0.91378588 0.26155533 0 1.16963 6.366756 189.52855
44000 0.91673608 0.25967314 0 1.1706796 6.0846334 189.52855
45000 1.0233334 0.25463562 0 1.2715732 6.0924255 189.52855
46000 0.96184729 0.35422095 0 1.3100567 7.0249175 189.52855
47000 1.134079 0.26196034 0 1.3889514 6.3476756 189.52855
48000 1.0552136 0.303812 0 1.3524305 6.6968927 189.52855
49000 1.1282184 0.2100955 0 1.3312626 5.8658659 189.52855
50000 1.0493816 0.31540438 0 1.3582274 6.6348173 189.52855
Loop time of 1.09903 on 4 procs for 50000 steps with 160 atoms
Performance: 19653623.953 tau/day, 45494.500 timesteps/s
94.4% 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.057854 | 0.05974 | 0.062726 | 0.7 | 5.44
Neigh | 0.047791 | 0.049863 | 0.054819 | 1.3 | 4.54
Comm | 0.3581 | 0.38553 | 0.39784 | 2.6 | 35.08
Output | 0.001116 | 0.0014414 | 0.0023859 | 1.4 | 0.13
Modify | 0.41102 | 0.42642 | 0.4493 | 2.3 | 38.80
Other | | 0.176 | | | 16.02
Nlocal: 40 ave 42 max 39 min
Histogram: 2 0 0 1 0 0 0 0 0 1
Nghost: 36.5 ave 37 max 36 min
Histogram: 2 0 0 0 0 0 0 0 0 2
Neighs: 87.5 ave 94 max 81 min
Histogram: 1 1 0 0 0 0 0 0 1 1
Total # of neighbors = 350
Ave neighs/atom = 2.1875
Neighbor list builds = 5276
Dangerous builds = 0
Total wall time: 0:00:01

View File

@ -0,0 +1,111 @@
LAMMPS (29 Aug 2024 - Development - patch_29Aug2024-394-g75f86a68a7-modified)
OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98)
using 1 OpenMP thread(s) per MPI task
# 2d NEMD simulation
units lj
atom_style atomic
dimension 2
lattice sq2 0.8442
Lattice spacing in x,y,z = 1.5391903 1.5391903 1.5391903
region box prism 0 10 0 8 -0.5 0.5 0 0 0
create_box 2 box
Created triclinic box = (0 0 -0.76959516) to (15.391903 12.313523 0.76959516) with tilt (0 0 0)
1 by 1 by 1 MPI processor grid
create_atoms 1 box
Created 160 atoms
using lattice units in triclinic box = (0 0 -0.76959516) to (15.391903 12.313523 0.76959516) with tilt (0 0 0)
create_atoms CPU = 0.000 seconds
mass * 1.0
velocity all create 1.44 87287 loop geom
region slice block 4 6 INF INF INF INF
set region slice type 2
Setting atom values ...
40 settings made for type
pair_style lj/cut 4.0
pair_coeff * * 1.0 1.0
neighbor 0.3 bin
neigh_modify delay 0 every 1
fix 1 all nvt/sllod temp 1.0 1.0 1.0 tchain 1
fix 2 all deform 1 xy erate 0.01 remap v
#dump 1 all custom 500 dump.nemd id type x y z
#dump 2 all image 100 image.*.jpg type type adiam 1.2
#dump_modify 2 pad 5
#dump 3 all movie 100 movie.mpg type type adiam 1.2
#dump_modify 3 pad 5
thermo 50
run 1000
Generated 0 of 1 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 4.3
ghost atom cutoff = 4.3
binsize = 2.15, bins = 8 6 1
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair lj/cut, perpetual
attributes: half, newton on
pair build: half/bin/atomonly/newton/tri
stencil: half/bin/2d/tri
bin: standard
Per MPI rank memory allocation (min/avg/max) = 3.065 | 3.065 | 3.065 Mbytes
Step Temp E_pair E_mol TotEng Press Volume
0 1.44 -2.6548731 0 -1.2238731 1.9354912 189.52855
50 0.97904822 -2.1934929 0 -1.2205637 5.0001562 189.52855
100 0.96423603 -2.1711413 0 -1.2129318 5.3040025 189.52855
150 0.96430794 -2.153062 0 -1.194781 5.3988945 189.52855
200 1.056585 -2.2379316 0 -1.1879503 5.0007883 189.52855
250 1.0183256 -2.1921531 0 -1.1801921 5.5370076 189.52855
300 0.96855552 -2.140465 0 -1.177963 5.7188412 189.52855
350 1.0115567 -2.1883272 0 -1.1830927 5.4437104 189.52855
400 0.93743103 -2.1230826 0 -1.1915105 5.7059909 189.52855
450 1.1120368 -2.3041274 0 -1.1990408 4.646396 189.52855
500 0.99611106 -2.2039016 0 -1.2140162 5.1526658 189.52855
550 1.1075519 -2.3349751 0 -1.2343453 4.0671355 189.52855
600 1.0550783 -2.3126484 0 -1.2641644 4.5423735 189.52855
650 0.98516169 -2.2664919 0 -1.2874875 4.8365475 189.52855
700 0.97899201 -2.2815136 0 -1.3086403 4.5415389 189.52855
750 1.0107776 -2.3375258 0 -1.3330656 4.3655082 189.52855
800 0.97711804 -2.3221241 0 -1.3511131 4.2153988 189.52855
850 0.8984454 -2.258341 0 -1.3655108 4.6759265 189.52855
900 0.85409237 -2.2157566 0 -1.3670024 5.0180073 189.52855
950 0.90195434 -2.2500988 0 -1.3537817 4.8189466 189.52855
1000 1.0047283 -2.3359434 0 -1.3374947 4.0788763 189.52855
Loop time of 0.0331477 on 1 procs for 1000 steps with 160 atoms
Performance: 13032596.122 tau/day, 30168.047 timesteps/s, 4.827 Matom-step/s
99.6% CPU use with 1 MPI tasks x 1 OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 0.017584 | 0.017584 | 0.017584 | 0.0 | 53.05
Neigh | 0.0080996 | 0.0080996 | 0.0080996 | 0.0 | 24.43
Comm | 0.0010864 | 0.0010864 | 0.0010864 | 0.0 | 3.28
Output | 9.9819e-05 | 9.9819e-05 | 9.9819e-05 | 0.0 | 0.30
Modify | 0.0057062 | 0.0057062 | 0.0057062 | 0.0 | 17.21
Other | | 0.0005715 | | | 1.72
Nlocal: 160 ave 160 max 160 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 271 ave 271 max 271 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 3881 ave 3881 max 3881 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 3881
Ave neighs/atom = 24.25625
Neighbor list builds = 106
Dangerous builds = 0
Total wall time: 0:00:00

View File

@ -0,0 +1,111 @@
LAMMPS (29 Aug 2024 - Development - patch_29Aug2024-394-g75f86a68a7-modified)
OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98)
using 1 OpenMP thread(s) per MPI task
# 2d NEMD simulation
units lj
atom_style atomic
dimension 2
lattice sq2 0.8442
Lattice spacing in x,y,z = 1.5391903 1.5391903 1.5391903
region box prism 0 10 0 8 -0.5 0.5 0 0 0
create_box 2 box
Created triclinic box = (0 0 -0.76959516) to (15.391903 12.313523 0.76959516) with tilt (0 0 0)
2 by 2 by 1 MPI processor grid
create_atoms 1 box
Created 160 atoms
using lattice units in triclinic box = (0 0 -0.76959516) to (15.391903 12.313523 0.76959516) with tilt (0 0 0)
create_atoms CPU = 0.001 seconds
mass * 1.0
velocity all create 1.44 87287 loop geom
region slice block 4 6 INF INF INF INF
set region slice type 2
Setting atom values ...
40 settings made for type
pair_style lj/cut 4.0
pair_coeff * * 1.0 1.0
neighbor 0.3 bin
neigh_modify delay 0 every 1
fix 1 all nvt/sllod temp 1.0 1.0 1.0 tchain 1
fix 2 all deform 1 xy erate 0.01 remap v
#dump 1 all custom 500 dump.nemd id type x y z
#dump 2 all image 100 image.*.jpg type type adiam 1.2
#dump_modify 2 pad 5
#dump 3 all movie 100 movie.mpg type type adiam 1.2
#dump_modify 3 pad 5
thermo 50
run 1000
Generated 0 of 1 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 4.3
ghost atom cutoff = 4.3
binsize = 2.15, bins = 8 6 1
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair lj/cut, perpetual
attributes: half, newton on
pair build: half/bin/atomonly/newton/tri
stencil: half/bin/2d/tri
bin: standard
Per MPI rank memory allocation (min/avg/max) = 3.064 | 3.064 | 3.064 Mbytes
Step Temp E_pair E_mol TotEng Press Volume
0 1.44 -2.6548731 0 -1.2238731 1.9354912 189.52855
50 0.97904822 -2.1934929 0 -1.2205637 5.0001562 189.52855
100 0.96423603 -2.1711413 0 -1.2129318 5.3040025 189.52855
150 0.96430794 -2.153062 0 -1.194781 5.3988945 189.52855
200 1.056585 -2.2379316 0 -1.1879503 5.0007883 189.52855
250 1.0183256 -2.1921531 0 -1.1801921 5.5370076 189.52855
300 0.96855552 -2.140465 0 -1.177963 5.7188412 189.52855
350 1.0115567 -2.1883272 0 -1.1830927 5.4437104 189.52855
400 0.93743103 -2.1230826 0 -1.1915105 5.7059909 189.52855
450 1.1120368 -2.3041274 0 -1.1990408 4.646396 189.52855
500 0.99611106 -2.2039016 0 -1.2140162 5.1526658 189.52855
550 1.1075519 -2.3349751 0 -1.2343453 4.0671355 189.52855
600 1.0550783 -2.3126484 0 -1.2641644 4.5423735 189.52855
650 0.98516169 -2.2664919 0 -1.2874875 4.8365475 189.52855
700 0.97899201 -2.2815136 0 -1.3086403 4.5415389 189.52855
750 1.0107776 -2.3375258 0 -1.3330656 4.3655082 189.52855
800 0.97711804 -2.3221241 0 -1.3511131 4.2153988 189.52855
850 0.8984454 -2.258341 0 -1.3655108 4.6759265 189.52855
900 0.85409237 -2.2157566 0 -1.3670024 5.0180073 189.52855
950 0.90195434 -2.2500988 0 -1.3537817 4.8189466 189.52855
1000 1.0047283 -2.3359434 0 -1.3374947 4.0788763 189.52855
Loop time of 0.0158907 on 4 procs for 1000 steps with 160 atoms
Performance: 27185684.597 tau/day, 62929.825 timesteps/s, 10.069 Matom-step/s
98.0% 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.0044606 | 0.004562 | 0.0047619 | 0.2 | 28.71
Neigh | 0.0023154 | 0.0023979 | 0.002494 | 0.1 | 15.09
Comm | 0.0051743 | 0.0054807 | 0.0056638 | 0.3 | 34.49
Output | 7.5535e-05 | 8.9889e-05 | 0.00012988 | 0.0 | 0.57
Modify | 0.002223 | 0.0023624 | 0.0026372 | 0.3 | 14.87
Other | | 0.0009979 | | | 6.28
Nlocal: 40 ave 42 max 38 min
Histogram: 1 0 1 0 0 0 0 1 0 1
Nghost: 163.5 ave 166 max 162 min
Histogram: 2 0 0 0 0 1 0 0 0 1
Neighs: 970.25 ave 1016 max 942 min
Histogram: 1 1 0 0 1 0 0 0 0 1
Total # of neighbors = 3881
Ave neighs/atom = 24.25625
Neighbor list builds = 106
Dangerous builds = 0
Total wall time: 0:00:00

View File

@ -100,6 +100,7 @@ MODULE LIBLAMMPS
CONTAINS
PROCEDURE :: close => lmp_close
PROCEDURE :: error => lmp_error
PROCEDURE :: expand => lmp_expand
PROCEDURE :: file => lmp_file
PROCEDURE :: command => lmp_command
PROCEDURE :: commands_list => lmp_commands_list
@ -410,6 +411,14 @@ MODULE LIBLAMMPS
TYPE(c_ptr), VALUE :: error_text
END SUBROUTINE lammps_error
FUNCTION lammps_expand(handle, line) BIND(C)
IMPORT :: c_ptr
IMPLICIT NONE
TYPE(c_ptr), INTENT(IN), VALUE :: handle
TYPE(c_ptr), INTENT(IN), VALUE :: line
TYPE(c_ptr) :: lammps_expand
END FUNCTION lammps_expand
SUBROUTINE lammps_file(handle, filename) BIND(C)
IMPORT :: c_ptr
IMPLICIT NONE
@ -1107,10 +1116,24 @@ CONTAINS
CALL lammps_free(str)
END SUBROUTINE lmp_error
! equivalent function to lammps_expand()
FUNCTION lmp_expand(self, line)
CLASS(lammps), INTENT(IN) :: self
CHARACTER(len=*), INTENT(IN) :: line
TYPE(c_ptr) :: str, res
CHARACTER(len=:), ALLOCATABLE :: lmp_expand
str = f2c_string(line)
res = lammps_expand(self%handle, str)
CALL lammps_free(str)
lmp_expand = c2f_string(res)
CALL lammps_free(res)
END FUNCTION lmp_expand
! equivalent function to lammps_file()
SUBROUTINE lmp_file(self, filename)
CLASS(lammps), INTENT(IN) :: self
CHARACTER(len=*) :: filename
CHARACTER(len=*), INTENT(IN) :: filename
TYPE(c_ptr) :: str
str = f2c_string(filename)
@ -1121,7 +1144,7 @@ CONTAINS
! equivalent function to lammps_command()
SUBROUTINE lmp_command(self, cmd)
CLASS(lammps), INTENT(IN) :: self
CHARACTER(len=*) :: cmd
CHARACTER(len=*), INTENT(IN) :: cmd
TYPE(c_ptr) :: str
str = f2c_string(cmd)
@ -1155,7 +1178,7 @@ CONTAINS
! equivalent function to lammps_commands_string()
SUBROUTINE lmp_commands_string(self, str)
CLASS(lammps), INTENT(IN) :: self
CHARACTER(len=*) :: str
CHARACTER(len=*), INTENT(IN) :: str
TYPE(c_ptr) :: tmp
tmp = f2c_string(str)
@ -1173,7 +1196,7 @@ CONTAINS
! equivalent function to lammps_get_thermo
REAL(c_double) FUNCTION lmp_get_thermo(self,name)
CLASS(lammps), INTENT(IN) :: self
CHARACTER(LEN=*) :: name
CHARACTER(LEN=*), INTENT(IN) :: name
TYPE(c_ptr) :: Cname
Cname = f2c_string(name)
@ -1185,7 +1208,7 @@ CONTAINS
FUNCTION lmp_last_thermo(self,what,index) RESULT(thermo_data)
CLASS(lammps), INTENT(IN), TARGET :: self
CHARACTER(LEN=*), INTENT(IN) :: what
INTEGER :: index
INTEGER, INTENT(IN) :: index
INTEGER(c_int) :: idx
TYPE(lammps_data) :: thermo_data, type_data
INTEGER(c_int) :: datatype

View File

@ -23,7 +23,7 @@ KOKKOS_DEVICES ?= "OpenMP"
# NVIDIA: Kepler,Kepler30,Kepler32,Kepler35,Kepler37,Maxwell,Maxwell50,Maxwell52,Maxwell53,Pascal60,Pascal61,Volta70,Volta72,Turing75,Ampere80,Ampere86,Ada89,Hopper90
# ARM: ARMv80,ARMv81,ARMv8-ThunderX,ARMv8-TX2,A64FX,ARMv9-Grace
# IBM: Power8,Power9
# AMD-GPUS: AMD_GFX906,AMD_GFX908,AMD_GFX90A,AMD_GFX940,AMD_GFX942,AMD_GFX1030,AMD_GFX1100
# AMD-GPUS: AMD_GFX906,AMD_GFX908,AMD_GFX90A,AMD_GFX940,AMD_GFX942,AMD_GFX1030,AMD_GFX1100,AMD_GFX1103
# AMD-CPUS: AMDAVX,Zen,Zen2,Zen3
# Intel-GPUs: Intel_Gen,Intel_Gen9,Intel_Gen11,Intel_Gen12LP,Intel_DG1,Intel_XeHP,Intel_PVC
KOKKOS_ARCH ?= ""
@ -465,6 +465,7 @@ KOKKOS_INTERNAL_USE_ARCH_AMD_GFX1100 := $(call kokkos_has_string,$(KOKKOS_ARCH),
ifeq ($(KOKKOS_INTERNAL_USE_ARCH_AMD_GFX1100), 0)
KOKKOS_INTERNAL_USE_ARCH_AMD_GFX1100 := $(call kokkos_has_string,$(KOKKOS_ARCH),NAVI1100)
endif
KOKKOS_INTERNAL_USE_ARCH_AMD_GFX1103 := $(call kokkos_has_string,$(KOKKOS_ARCH),AMD_GFX1103)
# Any AVX?
KOKKOS_INTERNAL_USE_ARCH_AVX := $(shell expr $(KOKKOS_INTERNAL_USE_ARCH_SNB) + $(KOKKOS_INTERNAL_USE_ARCH_AMDAVX))
@ -1158,6 +1159,11 @@ ifeq ($(KOKKOS_INTERNAL_USE_ARCH_AMD_GFX1100), 1)
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_AMD_GPU")
KOKKOS_INTERNAL_HIP_ARCH_FLAG := --offload-arch=gfx1100
endif
ifeq ($(KOKKOS_INTERNAL_USE_ARCH_AMD_GFX1103), 1)
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_AMD_GFX1103")
tmp := $(call kokkos_append_header,"$H""define KOKKOS_ARCH_AMD_GPU")
KOKKOS_INTERNAL_HIP_ARCH_FLAG := --offload-arch=gfx1103
endif
ifeq ($(KOKKOS_INTERNAL_USE_HIP), 1)

View File

@ -120,6 +120,7 @@
#cmakedefine KOKKOS_ARCH_AMD_GFX942
#cmakedefine KOKKOS_ARCH_AMD_GFX1030
#cmakedefine KOKKOS_ARCH_AMD_GFX1100
#cmakedefine KOKKOS_ARCH_AMD_GFX1103
#cmakedefine KOKKOS_ARCH_AMD_GPU
#cmakedefine KOKKOS_ARCH_VEGA // deprecated
#cmakedefine KOKKOS_ARCH_VEGA906 // deprecated

View File

@ -103,9 +103,9 @@ LIST(APPEND CORRESPONDING_AMD_FLAGS gfx90a gfx90a gfx908 gfx908)
LIST(APPEND SUPPORTED_AMD_GPUS MI50/60 MI50/60)
LIST(APPEND SUPPORTED_AMD_ARCHS VEGA906 AMD_GFX906)
LIST(APPEND CORRESPONDING_AMD_FLAGS gfx906 gfx906)
LIST(APPEND SUPPORTED_AMD_GPUS RX7900XTX RX7900XTX V620/W6800 V620/W6800)
LIST(APPEND SUPPORTED_AMD_ARCHS NAVI1100 AMD_GFX1100 NAVI1030 AMD_GFX1030)
LIST(APPEND CORRESPONDING_AMD_FLAGS gfx1100 gfx1100 gfx1030 gfx1030)
LIST(APPEND SUPPORTED_AMD_GPUS PHOENIX RX7900XTX V620/W6800 V620/W6800)
LIST(APPEND SUPPORTED_AMD_ARCHS AMD_GFX1103 AMD_GFX1100 NAVI1030 AMD_GFX1030)
LIST(APPEND CORRESPONDING_AMD_FLAGS gfx1103 gfx1100 gfx1030 gfx1030)
#FIXME CAN BE REPLACED WITH LIST_ZIP IN CMAKE 3.17
FOREACH(ARCH IN LISTS SUPPORTED_AMD_ARCHS)

View File

@ -35,7 +35,8 @@ struct HIPTraits {
static constexpr int WarpSize = 64;
static constexpr int WarpIndexMask = 0x003f; /* hexadecimal for 63 */
static constexpr int WarpIndexShift = 6; /* WarpSize == 1 << WarpShift*/
#elif defined(KOKKOS_ARCH_AMD_GFX1030) || defined(KOKKOS_ARCH_AMD_GFX1100)
#elif defined(KOKKOS_ARCH_AMD_GFX1030) || defined(KOKKOS_ARCH_AMD_GFX1100) || \
defined(KOKKOS_ARCH_AMD_GFX1103)
static constexpr int WarpSize = 32;
static constexpr int WarpIndexMask = 0x001f; /* hexadecimal for 31 */
static constexpr int WarpIndexShift = 5; /* WarpSize == 1 << WarpShift*/

View File

@ -143,7 +143,7 @@ class ParallelScan<FunctorType, Kokkos::RangePolicy<Traits...>,
local_offset_value = element_values(team_id, i - 1);
// FIXME_OPENMPTARGET We seem to access memory illegaly on AMD GPUs
#if defined(KOKKOS_ARCH_AMD_GPU) && !defined(KOKKOS_ARCH_AMD_GFX1030) && \
!defined(KOKKOS_ARCH_AMD_GFX1100)
!defined(KOKKOS_ARCH_AMD_GFX1100) && !defined(KOKKOS_ARCH_AMD_GFX1103)
if constexpr (Analysis::Reducer::has_join_member_function()) {
if constexpr (std::is_void_v<WorkTag>)
a_functor_reducer.get_functor().join(local_offset_value,

View File

@ -752,6 +752,9 @@ void pre_initialize_internal(const Kokkos::InitializationSettings& settings) {
#elif defined(KOKKOS_ARCH_AMD_GFX1100)
declare_configuration_metadata("architecture", "GPU architecture",
"AMD_GFX1100");
#elif defined(KOKKOS_ARCH_AMD_GFX1103)
declare_configuration_metadata("architecture", "GPU architecture",
"AMD_GFX1103");
#else
declare_configuration_metadata("architecture", "GPU architecture", "none");

View File

@ -164,6 +164,7 @@ display_help_text() {
echo " AMD_GFX942 = AMD GPU MI300 GFX942"
echo " AMD_GFX1030 = AMD GPU V620/W6800 GFX1030"
echo " AMD_GFX1100 = AMD GPU RX 7900 XT(X) GFX1100"
echo " AMD_GFX1103 = AMD APU Radeon 740M/760M/780M/880M/890M GFX1103"
echo " [ARM]"
echo " ARMV80 = ARMv8.0 Compatible CPU"
echo " ARMV81 = ARMv8.1 Compatible CPU"

View File

@ -19,8 +19,8 @@ from __future__ import print_function
import os
import sys
from ctypes import CDLL, POINTER, RTLD_GLOBAL, CFUNCTYPE, py_object, byref, cast, sizeof, \
create_string_buffer, c_int, c_int32, c_int64, c_double, c_void_p, c_char_p, pythonapi, \
pointer
create_string_buffer, c_int, c_int32, c_int64, c_double, c_void_p, c_char_p, c_char, \
pythonapi, pointer
from os.path import dirname, abspath, join
from inspect import getsourcefile
@ -178,6 +178,9 @@ class lammps(object):
self.lib.lammps_error.argtypes = [c_void_p, c_int, c_char_p]
self.lib.lammps_expand.argtypes = [c_void_p, c_char_p]
self.lib.lammps_expand.restype = POINTER(c_char)
self.lib.lammps_file.argtypes = [c_void_p, c_char_p]
self.lib.lammps_file.restype = None
@ -613,6 +616,37 @@ class lammps(object):
# -------------------------------------------------------------------------
def expand(self,line):
"""Expand a single LAMMPS string like an input line
This is a wrapper around the :cpp:func:`lammps_expand`
function of the C-library interface.
:param cmd: a single lammps line
:type cmd: string
:return: expanded string
:rtype: string
"""
if line: newline = line.encode()
else: return None
with ExceptionCheck(self):
strptr = self.lib.lammps_expand(self.lmp, newline)
rval = strptr[0]
if rval == b'\0':
rval = None
else:
i = 1
while strptr[i] != b'\0':
rval += strptr[i]
i = i + 1
self.lib.lammps_free(strptr)
if rval:
return rval.decode('utf-8')
return None
# -------------------------------------------------------------------------
def file(self, path):
"""Read LAMMPS commands from a file.

View File

@ -918,15 +918,15 @@ int PairOxdnaExcv::pack_forward_comm(int n, int *list, double *buf,
m = 0;
for (i = 0; i < n; i++) {
j = list[i];
buf[m++] = nx[j][0];
buf[m++] = nx[j][1];
buf[m++] = nx[j][2];
buf[m++] = ny[j][0];
buf[m++] = ny[j][1];
buf[m++] = ny[j][2];
buf[m++] = nz[j][0];
buf[m++] = nz[j][1];
buf[m++] = nz[j][2];
buf[m++] = nx[j][0];
buf[m++] = nx[j][1];
buf[m++] = nx[j][2];
buf[m++] = ny[j][0];
buf[m++] = ny[j][1];
buf[m++] = ny[j][2];
buf[m++] = nz[j][0];
buf[m++] = nz[j][1];
buf[m++] = nz[j][2];
}
return m;
}
@ -936,19 +936,18 @@ int PairOxdnaExcv::pack_forward_comm(int n, int *list, double *buf,
void PairOxdnaExcv::unpack_forward_comm(int n, int first, double *buf)
{
int i,m,last;
m = 0;
last = first + n;
for (i = first; i < last; i++) {
nx[i][0] = buf[m++];
nx[i][1] = buf[m++];
nx[i][2] = buf[m++];
ny[i][0] = buf[m++];
ny[i][1] = buf[m++];
ny[i][2] = buf[m++];
nz[i][0] = buf[m++];
nz[i][1] = buf[m++];
nz[i][2] = buf[m++];
nx[i][0] = buf[m++];
nx[i][1] = buf[m++];
nx[i][2] = buf[m++];
ny[i][0] = buf[m++];
ny[i][1] = buf[m++];
ny[i][2] = buf[m++];
nz[i][0] = buf[m++];
nz[i][1] = buf[m++];
nz[i][2] = buf[m++];
}
}

View File

@ -13,7 +13,7 @@
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing authors: Martin Svoboda (ICPF, UJEP), Martin Lísal (ICPF, UJEP)
Contributing authors: Martin Svoboda (ICPF, UJEP), Martin Lisal (ICPF, UJEP)
based on pair style dpd by: Kurt Smith (U Pittsburgh)
------------------------------------------------------------------------- */

View File

@ -13,7 +13,7 @@
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing authors: Martin Svoboda (ICPF, UJEP), Martin Lísal (ICPF, UJEP)
Contributing authors: Martin Svoboda (ICPF, UJEP), Martin Lisal (ICPF, UJEP)
------------------------------------------------------------------------- */
#include "pair_dpd_ext_tstat.h"

View File

@ -12,7 +12,7 @@
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing authors: Ludwig Ahrens-Iwers (TUHH), Shern Tee (UQ), Robert Meißner (TUHH)
Contributing authors: Ludwig Ahrens-Iwers (TUHH), Shern Tee (UQ), Robert Meissner (TUHH)
------------------------------------------------------------------------- */
#include "boundary_correction.h"

View File

@ -12,7 +12,7 @@
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing authors: Ludwig Ahrens-Iwers (TUHH), Shern Tee (UQ), Robert Meißner (TUHH)
Contributing authors: Ludwig Ahrens-Iwers (TUHH), Shern Tee (UQ), Robert Meissner (TUHH)
------------------------------------------------------------------------- */
#ifndef LMP_BOUNDARY_CORRECTION_H

View File

@ -12,7 +12,7 @@
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing authors: Ludwig Ahrens-Iwers (TUHH), Shern Tee (UQ), Robert Meißner (TUHH)
Contributing authors: Ludwig Ahrens-Iwers (TUHH), Shern Tee (UQ), Robert Meissner (TUHH)
------------------------------------------------------------------------- */
#ifndef LMP_ELECTRODE_KSPACE_H

View File

@ -12,7 +12,7 @@
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing authors: Ludwig Ahrens-Iwers (TUHH), Shern Tee (UQ), Robert Meißner (TUHH)
Contributing authors: Ludwig Ahrens-Iwers (TUHH), Shern Tee (UQ), Robert Meissner (TUHH)
------------------------------------------------------------------------- */
#ifndef LMP_ELECTRODE_MATH_H

View File

@ -12,7 +12,7 @@
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing authors: Ludwig Ahrens-Iwers (TUHH), Shern Tee (UQ), Robert Meißner (TUHH)
Contributing authors: Ludwig Ahrens-Iwers (TUHH), Shern Tee (UQ), Robert Meissner (TUHH)
------------------------------------------------------------------------- */
#include "electrode_matrix.h"

View File

@ -12,7 +12,7 @@
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing authors: Ludwig Ahrens-Iwers (TUHH), Shern Tee (UQ), Robert Meißner (TUHH)
Contributing authors: Ludwig Ahrens-Iwers (TUHH), Shern Tee (UQ), Robert Meissner (TUHH)
------------------------------------------------------------------------- */
#ifndef LMP_ELECTRODE_MATRIX_H

View File

@ -12,7 +12,7 @@
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing authors: Ludwig Ahrens-Iwers (TUHH), Shern Tee (UQ), Robert Meißner (TUHH)
Contributing authors: Ludwig Ahrens-Iwers (TUHH), Shern Tee (UQ), Robert Meissner (TUHH)
------------------------------------------------------------------------- */
#include "electrode_vector.h"

View File

@ -12,7 +12,7 @@
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing authors: Ludwig Ahrens-Iwers (TUHH), Shern Tee (UQ), Robert Meißner (TUHH)
Contributing authors: Ludwig Ahrens-Iwers (TUHH), Shern Tee (UQ), Robert Meissner (TUHH)
------------------------------------------------------------------------- */
#ifndef LMP_ELECTRODE_VECTOR_H

View File

@ -12,7 +12,7 @@
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing authors: Ludwig Ahrens-Iwers (TUHH), Shern Tee (UQ), Robert Meißner (TUHH)
Contributing authors: Ludwig Ahrens-Iwers (TUHH), Shern Tee (UQ), Robert Meissner (TUHH)
------------------------------------------------------------------------- */
#include "ewald_electrode.h"

View File

@ -12,7 +12,7 @@
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing authors: Ludwig Ahrens-Iwers (TUHH), Shern Tee (UQ), Robert Meißner (TUHH)
Contributing authors: Ludwig Ahrens-Iwers (TUHH), Shern Tee (UQ), Robert Meissner (TUHH)
------------------------------------------------------------------------- */
#ifdef KSPACE_CLASS

View File

@ -12,7 +12,7 @@
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing authors: Ludwig Ahrens-Iwers (TUHH), Shern Tee (UQ), Robert Meißner (TUHH)
Contributing authors: Ludwig Ahrens-Iwers (TUHH), Shern Tee (UQ), Robert Meissner (TUHH)
------------------------------------------------------------------------- */
#include "fix_electrode_conp.h"

View File

@ -12,7 +12,7 @@
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing authors: Ludwig Ahrens-Iwers (TUHH), Shern Tee (UQ), Robert Meißner (TUHH)
Contributing authors: Ludwig Ahrens-Iwers (TUHH), Shern Tee (UQ), Robert Meissner (TUHH)
------------------------------------------------------------------------- */
#ifdef FIX_CLASS

View File

@ -12,7 +12,7 @@
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing authors: Ludwig Ahrens-Iwers (TUHH), Shern Tee (UQ), Robert Meißner (TUHH)
Contributing authors: Ludwig Ahrens-Iwers (TUHH), Shern Tee (UQ), Robert Meissner (TUHH)
------------------------------------------------------------------------- */
#include "fix_electrode_conq.h"

View File

@ -12,7 +12,7 @@
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing authors: Ludwig Ahrens-Iwers (TUHH), Shern Tee (UQ), Robert Meißner (TUHH)
Contributing authors: Ludwig Ahrens-Iwers (TUHH), Shern Tee (UQ), Robert Meissner (TUHH)
------------------------------------------------------------------------- */
#ifdef FIX_CLASS

View File

@ -12,7 +12,7 @@
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing authors: Ludwig Ahrens-Iwers (TUHH), Shern Tee (UQ), Robert Meißner (TUHH)
Contributing authors: Ludwig Ahrens-Iwers (TUHH), Shern Tee (UQ), Robert Meissner (TUHH)
------------------------------------------------------------------------- */
#include "fix_electrode_thermo.h"

View File

@ -12,7 +12,7 @@
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing authors: Ludwig Ahrens-Iwers (TUHH), Shern Tee (UQ), Robert Meißner (TUHH)
Contributing authors: Ludwig Ahrens-Iwers (TUHH), Shern Tee (UQ), Robert Meissner (TUHH)
------------------------------------------------------------------------- */
#ifdef FIX_CLASS

View File

@ -12,7 +12,7 @@
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing authors: Ludwig Ahrens-Iwers (TUHH), Shern Tee (UQ), Robert Meißner (TUHH)
Contributing authors: Ludwig Ahrens-Iwers (TUHH), Shern Tee (UQ), Robert Meissner (TUHH)
------------------------------------------------------------------------- */
#include "pppm_electrode.h"

View File

@ -12,7 +12,7 @@
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing authors: Ludwig Ahrens-Iwers (TUHH), Shern Tee (UQ), Robert Meißner (TUHH)
Contributing authors: Ludwig Ahrens-Iwers (TUHH), Shern Tee (UQ), Robert Meissner (TUHH)
------------------------------------------------------------------------- */
#ifdef KSPACE_CLASS

View File

@ -12,7 +12,7 @@
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing authors: Ludwig Ahrens-Iwers (TUHH), Shern Tee (UQ), Robert Meißner (TUHH)
Contributing authors: Ludwig Ahrens-Iwers (TUHH), Shern Tee (UQ), Robert Meissner (TUHH)
------------------------------------------------------------------------- */
#include "slab_2d.h"

View File

@ -12,7 +12,7 @@
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing authors: Ludwig Ahrens-Iwers (TUHH), Shern Tee (UQ), Robert Meißner (TUHH)
Contributing authors: Ludwig Ahrens-Iwers (TUHH), Shern Tee (UQ), Robert Meissner (TUHH)
------------------------------------------------------------------------- */
#ifndef LMP_SLAB_2D_H

View File

@ -12,7 +12,7 @@
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing authors: Ludwig Ahrens-Iwers (TUHH), Shern Tee (UQ), Robert Meißner (TUHH)
Contributing authors: Ludwig Ahrens-Iwers (TUHH), Shern Tee (UQ), Robert Meissner (TUHH)
------------------------------------------------------------------------- */
#include "slab_dipole.h"

View File

@ -12,7 +12,7 @@
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing authors: Ludwig Ahrens-Iwers (TUHH), Shern Tee (UQ), Robert Meißner (TUHH)
Contributing authors: Ludwig Ahrens-Iwers (TUHH), Shern Tee (UQ), Robert Meissner (TUHH)
------------------------------------------------------------------------- */
#ifndef LMP_SLAB_DIPOLE_H

View File

@ -12,7 +12,7 @@
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing authors: Ludwig Ahrens-Iwers (TUHH), Shern Tee (UQ), Robert Meißner (TUHH)
Contributing authors: Ludwig Ahrens-Iwers (TUHH), Shern Tee (UQ), Robert Meissner (TUHH)
------------------------------------------------------------------------- */
#include "wire_dipole.h"

View File

@ -12,7 +12,7 @@
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing authors: Ludwig Ahrens-Iwers (TUHH), Shern Tee (UQ), Robert Meißner (TUHH)
Contributing authors: Ludwig Ahrens-Iwers (TUHH), Shern Tee (UQ), Robert Meissner (TUHH)
------------------------------------------------------------------------- */
#ifndef LMP_WIRE_DIPOLE_H

View File

@ -163,13 +163,13 @@ FixTTM::FixTTM(LAMMPS *lmp, int narg, char **arg) :
FixTTM::~FixTTM()
{
delete [] infile;
delete [] outfile;
delete[] infile;
delete[] outfile;
delete random;
delete [] gfactor1;
delete [] gfactor2;
delete[] gfactor1;
delete[] gfactor2;
memory->destroy(flangevin);

View File

@ -36,7 +36,7 @@ class BondHarmonicShift : public Bond {
void write_data(FILE *) override;
double single(int, double, int, int, double &) override;
void born_matrix(int, double, int, int, double &, double &) override;
void *extract(const char *, int &);
void *extract(const char *, int &) override;
protected:
double *k, *r0, *r1;

View File

@ -238,3 +238,16 @@ void BondHarmonicShiftCut::born_matrix(int type, double rsq, int /*i*/, int /*j*
du2 = 2 * k[type];
if (r > 0.0) du = du2 * dr;
}
/* ----------------------------------------------------------------------
return ptr to internal members upon request
------------------------------------------------------------------------ */
void *BondHarmonicShiftCut::extract(const char *str, int &dim)
{
dim = 1;
if (strcmp(str, "k") == 0) return (void *) k;
if (strcmp(str, "r0") == 0) return (void *) r0;
if (strcmp(str, "r1") == 0) return (void *) r1;
return nullptr;
}

View File

@ -36,6 +36,7 @@ class BondHarmonicShiftCut : public Bond {
void write_data(FILE *) override;
double single(int, double, int, int, double &) override;
void born_matrix(int, double, int, int, double &, double &) override;
void *extract(const char *, int &) override;
protected:
double *k, *r0, *r1;

View File

@ -563,7 +563,6 @@ void DomainKokkos::operator()(TagDomain_image_flip, const int &i) const {
void DomainKokkos::lamda2x(int n)
{
atomKK->sync(Device,X_MASK);
x = atomKK->k_x.view<LMPDeviceType>();
copymode = 1;
@ -573,6 +572,21 @@ void DomainKokkos::lamda2x(int n)
atomKK->modified(Device,X_MASK);
}
void DomainKokkos::lamda2x(int n, int groupbit_in)
{
atomKK->sync(Device,X_MASK);
x = atomKK->k_x.view<LMPDeviceType>();
mask = atomKK->k_mask.view<LMPDeviceType>();
mask = atomKK->k_mask.view<LMPDeviceType>();
groupbit = groupbit_in;
copymode = 1;
Kokkos::parallel_for(Kokkos::RangePolicy<LMPDeviceType, TagDomain_lamda2x_group>(0,n),*this);
copymode = 0;
atomKK->modified(Device,X_MASK);
}
KOKKOS_INLINE_FUNCTION
void DomainKokkos::operator()(TagDomain_lamda2x, const int &i) const {
const double xi1 = x(i,1);
@ -582,6 +596,17 @@ void DomainKokkos::operator()(TagDomain_lamda2x, const int &i) const {
x(i,2) = h[2]*xi2 + boxlo[2];
}
KOKKOS_INLINE_FUNCTION
void DomainKokkos::operator()(TagDomain_lamda2x_group, const int &i) const {
if (mask[i] & groupbit) {
const double xi1 = x(i,1);
const double xi2 = x(i,2);
x(i,0) = h[0]*x(i,0) + h[5]*xi1 + h[4]*xi2 + boxlo[0];
x(i,1) = h[1]*xi1 + h[3]*xi2 + boxlo[1];
x(i,2) = h[2]*xi2 + boxlo[2];
}
}
/* ----------------------------------------------------------------------
convert box coords to triclinic 0-1 lamda coords for all N atoms
lamda = H^-1 (x - x0)
@ -590,7 +615,6 @@ void DomainKokkos::operator()(TagDomain_lamda2x, const int &i) const {
void DomainKokkos::x2lamda(int n)
{
atomKK->sync(Device,X_MASK);
x = atomKK->k_x.view<LMPDeviceType>();
copymode = 1;
@ -600,6 +624,20 @@ void DomainKokkos::x2lamda(int n)
atomKK->modified(Device,X_MASK);
}
void DomainKokkos::x2lamda(int n, int groupbit_in)
{
atomKK->sync(Device,X_MASK);
x = atomKK->k_x.view<LMPDeviceType>();
mask = atomKK->k_mask.view<LMPDeviceType>();
groupbit = groupbit_in;
copymode = 1;
Kokkos::parallel_for(Kokkos::RangePolicy<LMPDeviceType, TagDomain_x2lamda_group>(0,n),*this);
copymode = 0;
atomKK->modified(Device,X_MASK);
}
KOKKOS_INLINE_FUNCTION
void DomainKokkos::operator()(TagDomain_x2lamda, const int &i) const {
F_FLOAT delta[3];
@ -612,3 +650,17 @@ void DomainKokkos::operator()(TagDomain_x2lamda, const int &i) const {
x(i,2) = h_inv[2]*delta[2];
}
KOKKOS_INLINE_FUNCTION
void DomainKokkos::operator()(TagDomain_x2lamda_group, const int &i) const {
if (mask[i] & groupbit) {
F_FLOAT delta[3];
delta[0] = x(i,0) - boxlo[0];
delta[1] = x(i,1) - boxlo[1];
delta[2] = x(i,2) - boxlo[2];
x(i,0) = h_inv[0]*delta[0] + h_inv[5]*delta[1] + h_inv[4]*delta[2];
x(i,1) = h_inv[1]*delta[1] + h_inv[3]*delta[2];
x(i,2) = h_inv[2]*delta[2];
}
}

View File

@ -24,7 +24,9 @@ namespace LAMMPS_NS {
struct TagDomain_remap_all{};
struct TagDomain_image_flip{};
struct TagDomain_lamda2x{};
struct TagDomain_lamda2x_group{};
struct TagDomain_x2lamda{};
struct TagDomain_x2lamda_group{};
class DomainKokkos : public Domain {
public:
@ -35,7 +37,9 @@ class DomainKokkos : public Domain {
void remap_all();
void image_flip(int, int, int);
void x2lamda(int) override;
void x2lamda(int,int) override;
void lamda2x(int) override;
void lamda2x(int,int) override;
// forward remaining x2lamda() and lambda2x() variants to parent class
void x2lamda(double *a, double *b) override { Domain::x2lamda(a,b); }
void lamda2x(double *a, double *b) override { Domain::lamda2x(a,b); }
@ -54,18 +58,26 @@ class DomainKokkos : public Domain {
KOKKOS_INLINE_FUNCTION
void operator()(TagDomain_lamda2x, const int&) const;
KOKKOS_INLINE_FUNCTION
void operator()(TagDomain_lamda2x_group, const int&) const;
KOKKOS_INLINE_FUNCTION
void operator()(TagDomain_x2lamda, const int&) const;
KOKKOS_INLINE_FUNCTION
void operator()(TagDomain_x2lamda_group, const int&) const;
static KOKKOS_INLINE_FUNCTION
Few<double,3> unmap(Few<double,3> prd, Few<double,6> h, int triclinic,
Few<double,3> x, imageint image);
private:
int groupbit;
double lo[3],hi[3],period[3];
int n_flip, m_flip, p_flip;
ArrayTypes<LMPDeviceType>::t_x_array x;
ArrayTypes<LMPDeviceType>::t_imageint_1d image;
ArrayTypes<LMPDeviceType>::t_int_1d mask;
};
KOKKOS_INLINE_FUNCTION

View File

@ -13,7 +13,8 @@
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing author: Pieter in 't Veld (SNL)
Contributing author: Pieter in 't Veld (SNL)
Refactoring (2024/08): Mitch Murphy (alphataubio@gmail.com)
------------------------------------------------------------------------- */
#include "fix_deform_kokkos.h"
@ -21,31 +22,14 @@
#include "atom_kokkos.h"
#include "atom_masks.h"
#include "domain_kokkos.h"
#include "force.h"
#include "input.h"
#include "irregular.h"
#include "kspace.h"
#include "math_const.h"
#include "modify.h"
#include "update.h"
#include "variable.h"
#include <cmath>
using namespace LAMMPS_NS;
using namespace FixConst;
using namespace MathConst;
enum{NONE=0,FINAL,DELTA,SCALE,VEL,ERATE,TRATE,VOLUME,WIGGLE,VARIABLE};
enum{ONE_FROM_ONE,ONE_FROM_TWO,TWO_FROM_ONE};
/* ---------------------------------------------------------------------- */
FixDeformKokkos::FixDeformKokkos(LAMMPS *lmp, int narg, char **arg) : FixDeform(lmp, narg, arg)
{
kokkosable = 1;
domainKK = (DomainKokkos *) domain;
datamask_read = EMPTY_MASK;
datamask_modify = EMPTY_MASK;
}
@ -62,308 +46,16 @@ FixDeformKokkos::FixDeformKokkos(LAMMPS *lmp, int narg, char **arg) : FixDeform(
void FixDeformKokkos::pre_exchange()
{
if (flip == 0) return;
domain->yz = set[3].tilt_target = set[3].tilt_flip;
domain->xz = set[4].tilt_target = set[4].tilt_flip;
domain->xy = set[5].tilt_target = set[5].tilt_flip;
domain->set_global_box();
domain->set_local_box();
domainKK->image_flip(flipxy,flipxz,flipyz);
domainKK->remap_all();
domainKK->x2lamda(atom->nlocal);
atomKK->sync(Host,ALL_MASK);
irregular->migrate_atoms();
FixDeform::pre_exchange();
atomKK->modified(Host,ALL_MASK);
domainKK->lamda2x(atom->nlocal);
flip = 0;
}
/* ---------------------------------------------------------------------- */
void FixDeformKokkos::end_of_step()
{
int i;
double delta = update->ntimestep - update->beginstep;
if (delta != 0.0) delta /= update->endstep - update->beginstep;
// wrap variable evaluations with clear/add
if (varflag) modify->clearstep_compute();
// set new box size
// for NONE, target is current box size
// for TRATE, set target directly based on current time, also set h_rate
// for WIGGLE, set target directly based on current time, also set h_rate
// for VARIABLE, set target directly via variable eval, also set h_rate
// for others except VOLUME, target is linear value between start and stop
for (i = 0; i < 3; i++) {
if (set[i].style == NONE) {
set[i].lo_target = domain->boxlo[i];
set[i].hi_target = domain->boxhi[i];
} else if (set[i].style == TRATE) {
double delt = (update->ntimestep - update->beginstep) * update->dt;
set[i].lo_target = 0.5*(set[i].lo_start+set[i].hi_start) -
0.5*((set[i].hi_start-set[i].lo_start) * exp(set[i].rate*delt));
set[i].hi_target = 0.5*(set[i].lo_start+set[i].hi_start) +
0.5*((set[i].hi_start-set[i].lo_start) * exp(set[i].rate*delt));
h_rate[i] = set[i].rate * domain->h[i];
h_ratelo[i] = -0.5*h_rate[i];
} else if (set[i].style == WIGGLE) {
double delt = (update->ntimestep - update->beginstep) * update->dt;
set[i].lo_target = set[i].lo_start -
0.5*set[i].amplitude * sin(MY_2PI*delt/set[i].tperiod);
set[i].hi_target = set[i].hi_start +
0.5*set[i].amplitude * sin(MY_2PI*delt/set[i].tperiod);
h_rate[i] = MY_2PI/set[i].tperiod * set[i].amplitude *
cos(MY_2PI*delt/set[i].tperiod);
h_ratelo[i] = -0.5*h_rate[i];
} else if (set[i].style == VARIABLE) {
double del = input->variable->compute_equal(set[i].hvar);
set[i].lo_target = set[i].lo_start - 0.5*del;
set[i].hi_target = set[i].hi_start + 0.5*del;
h_rate[i] = input->variable->compute_equal(set[i].hratevar);
h_ratelo[i] = -0.5*h_rate[i];
} else if (set[i].style != VOLUME) {
set[i].lo_target = set[i].lo_start +
delta*(set[i].lo_stop - set[i].lo_start);
set[i].hi_target = set[i].hi_start +
delta*(set[i].hi_stop - set[i].hi_start);
}
}
// set new box size for VOLUME dims that are linked to other dims
// NOTE: still need to set h_rate for these dims
for (i = 0; i < 3; i++) {
if (set[i].style != VOLUME) continue;
if (set[i].substyle == ONE_FROM_ONE) {
set[i].lo_target = 0.5*(set[i].lo_start+set[i].hi_start) -
0.5*(set[i].vol_start /
(set[set[i].dynamic1].hi_target -
set[set[i].dynamic1].lo_target) /
(set[set[i].fixed].hi_start-set[set[i].fixed].lo_start));
set[i].hi_target = 0.5*(set[i].lo_start+set[i].hi_start) +
0.5*(set[i].vol_start /
(set[set[i].dynamic1].hi_target -
set[set[i].dynamic1].lo_target) /
(set[set[i].fixed].hi_start-set[set[i].fixed].lo_start));
} else if (set[i].substyle == ONE_FROM_TWO) {
set[i].lo_target = 0.5*(set[i].lo_start+set[i].hi_start) -
0.5*(set[i].vol_start /
(set[set[i].dynamic1].hi_target -
set[set[i].dynamic1].lo_target) /
(set[set[i].dynamic2].hi_target -
set[set[i].dynamic2].lo_target));
set[i].hi_target = 0.5*(set[i].lo_start+set[i].hi_start) +
0.5*(set[i].vol_start /
(set[set[i].dynamic1].hi_target -
set[set[i].dynamic1].lo_target) /
(set[set[i].dynamic2].hi_target -
set[set[i].dynamic2].lo_target));
} else if (set[i].substyle == TWO_FROM_ONE) {
set[i].lo_target = 0.5*(set[i].lo_start+set[i].hi_start) -
0.5*sqrt(set[i].vol_start /
(set[set[i].dynamic1].hi_target -
set[set[i].dynamic1].lo_target) /
(set[set[i].fixed].hi_start -
set[set[i].fixed].lo_start) *
(set[i].hi_start - set[i].lo_start));
set[i].hi_target = 0.5*(set[i].lo_start+set[i].hi_start) +
0.5*sqrt(set[i].vol_start /
(set[set[i].dynamic1].hi_target -
set[set[i].dynamic1].lo_target) /
(set[set[i].fixed].hi_start -
set[set[i].fixed].lo_start) *
(set[i].hi_start - set[i].lo_start));
}
}
// for triclinic, set new box shape
// for NONE, target is current tilt
// for TRATE, set target directly based on current time. also set h_rate
// for WIGGLE, set target directly based on current time. also set h_rate
// for VARIABLE, set target directly via variable eval. also set h_rate
// for other styles, target is linear value between start and stop values
if (triclinic) {
double *h = domain->h;
for (i = 3; i < 6; i++) {
if (set[i].style == NONE) {
if (i == 5) set[i].tilt_target = domain->xy;
else if (i == 4) set[i].tilt_target = domain->xz;
else if (i == 3) set[i].tilt_target = domain->yz;
} else if (set[i].style == TRATE) {
double delt = (update->ntimestep - update->beginstep) * update->dt;
set[i].tilt_target = set[i].tilt_start * exp(set[i].rate*delt);
h_rate[i] = set[i].rate * domain->h[i];
} else if (set[i].style == WIGGLE) {
double delt = (update->ntimestep - update->beginstep) * update->dt;
set[i].tilt_target = set[i].tilt_start +
set[i].amplitude * sin(MY_2PI*delt/set[i].tperiod);
h_rate[i] = MY_2PI/set[i].tperiod * set[i].amplitude *
cos(MY_2PI*delt/set[i].tperiod);
} else if (set[i].style == VARIABLE) {
double delta_tilt = input->variable->compute_equal(set[i].hvar);
set[i].tilt_target = set[i].tilt_start + delta_tilt;
h_rate[i] = input->variable->compute_equal(set[i].hratevar);
} else {
set[i].tilt_target = set[i].tilt_start +
delta*(set[i].tilt_stop - set[i].tilt_start);
}
// tilt_target can be large positive or large negative value
// add/subtract box lengths until tilt_target is closest to current value
int idenom = 0;
if (i == 5) idenom = 0;
else if (i == 4) idenom = 0;
else if (i == 3) idenom = 1;
double denom = set[idenom].hi_target - set[idenom].lo_target;
double current = h[i]/h[idenom];
while (set[i].tilt_target/denom - current > 0.0)
set[i].tilt_target -= denom;
while (set[i].tilt_target/denom - current < 0.0)
set[i].tilt_target += denom;
if (fabs(set[i].tilt_target/denom - 1.0 - current) <
fabs(set[i].tilt_target/denom - current))
set[i].tilt_target -= denom;
}
}
if (varflag) modify->addstep_compute(update->ntimestep + nevery);
// if any tilt ratios exceed 0.5, set flip = 1 and compute new tilt values
// do not flip in x or y if non-periodic (can tilt but not flip)
// this is b/c the box length would be changed (dramatically) by flip
// if yz tilt exceeded, adjust C vector by one B vector
// if xz tilt exceeded, adjust C vector by one A vector
// if xy tilt exceeded, adjust B vector by one A vector
// check yz first since it may change xz, then xz check comes after
// flip is performed on next timestep, before reneighboring in pre-exchange()
if (triclinic && flipflag) {
double xprd = set[0].hi_target - set[0].lo_target;
double yprd = set[1].hi_target - set[1].lo_target;
double xprdinv = 1.0 / xprd;
double yprdinv = 1.0 / yprd;
if (set[3].tilt_target*yprdinv < -0.5 ||
set[3].tilt_target*yprdinv > 0.5 ||
set[4].tilt_target*xprdinv < -0.5 ||
set[4].tilt_target*xprdinv > 0.5 ||
set[5].tilt_target*xprdinv < -0.5 ||
set[5].tilt_target*xprdinv > 0.5) {
set[3].tilt_flip = set[3].tilt_target;
set[4].tilt_flip = set[4].tilt_target;
set[5].tilt_flip = set[5].tilt_target;
flipxy = flipxz = flipyz = 0;
if (domain->yperiodic) {
if (set[3].tilt_flip*yprdinv < -0.5) {
set[3].tilt_flip += yprd;
set[4].tilt_flip += set[5].tilt_flip;
flipyz = 1;
} else if (set[3].tilt_flip*yprdinv > 0.5) {
set[3].tilt_flip -= yprd;
set[4].tilt_flip -= set[5].tilt_flip;
flipyz = -1;
}
}
if (domain->xperiodic) {
if (set[4].tilt_flip*xprdinv < -0.5) {
set[4].tilt_flip += xprd;
flipxz = 1;
}
if (set[4].tilt_flip*xprdinv > 0.5) {
set[4].tilt_flip -= xprd;
flipxz = -1;
}
if (set[5].tilt_flip*xprdinv < -0.5) {
set[5].tilt_flip += xprd;
flipxy = 1;
}
if (set[5].tilt_flip*xprdinv > 0.5) {
set[5].tilt_flip -= xprd;
flipxy = -1;
}
}
flip = 0;
if (flipxy || flipxz || flipyz) flip = 1;
if (flip) next_reneighbor = update->ntimestep + 1;
}
}
// convert atoms and rigid bodies to lamda coords
if (remapflag == Domain::X_REMAP) {
int nlocal = atom->nlocal;
domainKK->x2lamda(nlocal);
if (rfix.size() > 0) {
atomKK->sync(Host,ALL_MASK);
for (auto &ifix : rfix)
ifix->deform(0);
atomKK->modified(Host,ALL_MASK);
}
}
// reset global and local box to new size/shape
// only if deform fix is controlling the dimension
if (set[0].style) {
domain->boxlo[0] = set[0].lo_target;
domain->boxhi[0] = set[0].hi_target;
}
if (set[1].style) {
domain->boxlo[1] = set[1].lo_target;
domain->boxhi[1] = set[1].hi_target;
}
if (set[2].style) {
domain->boxlo[2] = set[2].lo_target;
domain->boxhi[2] = set[2].hi_target;
}
if (triclinic) {
if (set[3].style) domain->yz = set[3].tilt_target;
if (set[4].style) domain->xz = set[4].tilt_target;
if (set[5].style) domain->xy = set[5].tilt_target;
}
domain->set_global_box();
domain->set_local_box();
// convert atoms and rigid bodies back to box coords
if (remapflag == Domain::X_REMAP) {
int nlocal = atom->nlocal;
domainKK->lamda2x(nlocal);
if (rfix.size() > 0) {
atomKK->sync(Host,ALL_MASK);
for (auto &ifix : rfix)
ifix->deform(1);
atomKK->modified(Host,ALL_MASK);
}
}
// redo KSpace coeffs since box has changed
if (kspace_flag) force->kspace->setup();
atomKK->sync(Host,ALL_MASK);
FixDeform::end_of_step();
atomKK->modified(Host,ALL_MASK);
}

View File

@ -34,13 +34,9 @@ class FixDeformKokkos : public FixDeform {
void pre_exchange() override;
void end_of_step() override;
private:
class DomainKokkos *domainKK;
};
}
#endif
#endif

View File

@ -13,22 +13,23 @@
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing author: Trung Nguyen (U Chicago)
Contributing authors: Trung Nguyen (U Chicago)
Mitch Murphy (alphataubio at gmail)
------------------------------------------------------------------------- */
#include "fix_efield_kokkos.h"
#include "atom_kokkos.h"
#include "update.h"
#include "modify.h"
#include "domain_kokkos.h"
#include "region.h"
#include "input.h"
#include "variable.h"
#include "memory_kokkos.h"
#include "error.h"
#include "atom_masks.h"
#include "domain_kokkos.h"
#include "error.h"
#include "input.h"
#include "kokkos_base.h"
#include "memory_kokkos.h"
#include "modify_kokkos.h"
#include "region.h"
#include "update.h"
#include "variable.h"
using namespace LAMMPS_NS;
using namespace FixConst;
@ -44,12 +45,12 @@ FixEfieldKokkos<DeviceType>::FixEfieldKokkos(LAMMPS *lmp, int narg, char **arg)
kokkosable = 1;
atomKK = (AtomKokkos *) atom;
execution_space = ExecutionSpaceFromDevice<DeviceType>::space;
datamask_read = EMPTY_MASK;
datamask_modify = EMPTY_MASK;
datamask_read = X_MASK | F_MASK | TORQUE_MASK | Q_MASK | MU_MASK | IMAGE_MASK | MASK_MASK;
datamask_modify = F_MASK | TORQUE_MASK;
memory->destroy(efield);
memoryKK->create_kokkos(k_efield,efield,maxatom,4,"efield:efield");
d_efield = k_efield.view<DeviceType>();
d_efield = k_efield.template view<DeviceType>();
}
/* ---------------------------------------------------------------------- */
@ -60,7 +61,7 @@ FixEfieldKokkos<DeviceType>::~FixEfieldKokkos()
if (copymode) return;
memoryKK->destroy_kokkos(k_efield,efield);
efield = nullptr;
memoryKK->destroy_kokkos(k_vatom,vatom);
}
/* ---------------------------------------------------------------------- */
@ -77,17 +78,30 @@ void FixEfieldKokkos<DeviceType>::init()
/* ---------------------------------------------------------------------- */
template<class DeviceType>
void FixEfieldKokkos<DeviceType>::post_force(int /*vflag*/)
void FixEfieldKokkos<DeviceType>::post_force(int vflag)
{
atomKK->sync(execution_space, X_MASK | F_MASK | Q_MASK | IMAGE_MASK | MASK_MASK);
atomKK->sync(execution_space, datamask_read);
x = atomKK->k_x.view<DeviceType>();
f = atomKK->k_f.view<DeviceType>();
q = atomKK->k_q.view<DeviceType>();
image = atomKK->k_image.view<DeviceType>();
mask = atomKK->k_mask.view<DeviceType>();
d_x = atomKK->k_x.template view<DeviceType>();
d_f = atomKK->k_f.template view<DeviceType>();
d_q = atomKK->k_q.template view<DeviceType>();
d_mu = atomKK->k_mu.template view<DeviceType>();
d_torque = atomKK->k_torque.template view<DeviceType>();
d_image = atomKK->k_image.template view<DeviceType>();
d_mask = atomKK->k_mask.template view<DeviceType>();
int nlocal = atomKK->nlocal;
int nlocal = atom->nlocal;
// virial setup
v_init(vflag);
// reallocate per-atom arrays if necessary
if (vflag_atom) {
memoryKK->destroy_kokkos(k_vatom,vatom);
memoryKK->create_kokkos(k_vatom,vatom,maxvatom,"efield:vatom");
d_vatom = k_vatom.template view<DeviceType>();
}
// update region if necessary
@ -111,53 +125,24 @@ void FixEfieldKokkos<DeviceType>::post_force(int /*vflag*/)
d_efield = k_efield.view<DeviceType>();
}
fsum[0] = fsum[1] = fsum[2] = fsum[3] = 0.0;
double_4 fsum_kk;
force_flag = 0;
double result[10] = {0.0};
if (varflag == CONSTANT) {
prd = domain->prd;
h = domain->h;
triclinic = domain->triclinic;
copymode = 1;
// It would be more concise to use the operators below, but there is still an issue with unwrap (TODO below)
//Kokkos::parallel_reduce(Kokkos::RangePolicy<DeviceType, TagFixEfieldConstant>(0,nlocal),*this,fsum_kk);
{
// local variables for lambda capture
auto prd = Few<double,3>(domain->prd);
auto h = Few<double,6>(domain->h);
auto triclinic = domain->triclinic;
auto l_ex = ex;
auto l_ey = ey;
auto l_ez = ez;
auto l_x = x;
auto l_q = q;
auto l_f = f;
auto l_mask = mask;
auto l_image = image;
auto l_groupbit = groupbit;
Kokkos::parallel_reduce(nlocal, LAMMPS_LAMBDA(const int& i, double_4& fsum_kk) {
if (l_mask[i] & l_groupbit) {
Few<double,3> x_i;
x_i[0] = l_x(i,0);
x_i[1] = l_x(i,1);
x_i[2] = l_x(i,2);
auto unwrap = DomainKokkos::unmap(prd,h,triclinic,x_i,l_image(i));
auto qtmp = l_q(i);
auto fx = qtmp * l_ex;
auto fy = qtmp * l_ey;
auto fz = qtmp * l_ez;
l_f(i,0) += fx;
l_f(i,1) += fy;
l_f(i,2) += fz;
fsum_kk.d0 -= fx * unwrap[0] + fy * unwrap[1] + fz * unwrap[2];
fsum_kk.d1 += fx;
fsum_kk.d2 += fy;
fsum_kk.d3 += fz;
}
},fsum_kk);
}
if(qflag && muflag)
Kokkos::parallel_reduce(Kokkos::RangePolicy<DeviceType, TagFixEfieldConstant<1,1> >(0,nlocal),*this,result);
else if(qflag && !muflag)
Kokkos::parallel_reduce(Kokkos::RangePolicy<DeviceType, TagFixEfieldConstant<1,0> >(0,nlocal),*this,result);
else if(!qflag && muflag)
Kokkos::parallel_reduce(Kokkos::RangePolicy<DeviceType, TagFixEfieldConstant<0,1> >(0,nlocal),*this,result);
else
Kokkos::parallel_reduce(Kokkos::RangePolicy<DeviceType, TagFixEfieldConstant<0,0> >(0,nlocal),*this,result);
copymode = 0;
@ -167,19 +152,7 @@ void FixEfieldKokkos<DeviceType>::post_force(int /*vflag*/)
atomKK->sync(Host,ALL_MASK); // this can be removed when variable class is ported to Kokkos
modify->clearstep_compute();
if (xstyle == EQUAL) ex = input->variable->compute_equal(xvar);
else if (xstyle == ATOM)
input->variable->compute_atom(xvar,igroup,&efield[0][0],4,0);
if (ystyle == EQUAL) ey = input->variable->compute_equal(yvar);
else if (ystyle == ATOM)
input->variable->compute_atom(yvar,igroup,&efield[0][1],4,0);
if (zstyle == EQUAL) ez = input->variable->compute_equal(zvar);
else if (zstyle == ATOM)
input->variable->compute_atom(zvar,igroup,&efield[0][2],4,0);
modify->addstep_compute(update->ntimestep + 1);
FixEfield::update_efield_variables();
if (varflag == ATOM) { // this can be removed when variable class is ported to Kokkos
k_efield.modify<LMPHostType>();
@ -187,121 +160,154 @@ void FixEfieldKokkos<DeviceType>::post_force(int /*vflag*/)
}
copymode = 1;
// It would be more concise to use the operators below, but there is still an issue with unwrap (TODO below)
//Kokkos::parallel_reduce(Kokkos::RangePolicy<DeviceType, TagFixEfieldNonConstant>(0,nlocal),*this,fsum_kk);
{
// local variables for lambda capture
auto prd = Few<double,3>(domain->prd);
auto h = Few<double,6>(domain->h);
auto triclinic = domain->triclinic;
auto l_ex = ex;
auto l_ey = ey;
auto l_ez = ez;
auto l_d_efield = d_efield;
auto l_x = x;
auto l_q = q;
auto l_f = f;
auto l_mask = mask;
auto l_image = image;
auto l_groupbit = groupbit;
auto l_xstyle = xstyle;
auto l_ystyle = ystyle;
auto l_zstyle = zstyle;
Kokkos::parallel_reduce(nlocal, LAMMPS_LAMBDA(const int& i, double_4& fsum_kk) {
if (l_mask[i] & l_groupbit) {
Few<double,3> x_i;
x_i[0] = l_x(i,0);
x_i[1] = l_x(i,1);
x_i[2] = l_x(i,2);
auto unwrap = DomainKokkos::unmap(prd,h,triclinic,x_i,l_image(i));
auto qtmp = l_q(i);
auto fx = qtmp * l_ex;
auto fy = qtmp * l_ey;
auto fz = qtmp * l_ez;
if (l_xstyle == ATOM) l_f(i,0) += qtmp * l_d_efield(i,0);
else if (l_xstyle) l_f(i,0) += fx;
if (l_ystyle == ATOM) l_f(i,1) += qtmp * l_d_efield(i,1);
else if (l_ystyle) l_f(i,1) += fy;
if (l_zstyle == ATOM) l_f(i,2) += qtmp * l_d_efield(i,2);
else if (l_zstyle) l_f(i,2) += fz;
fsum_kk.d0 -= fx * unwrap[0] + fy * unwrap[1] + fz * unwrap[2];
fsum_kk.d1 += fx;
fsum_kk.d2 += fy;
fsum_kk.d3 += fz;
}
},fsum_kk);
}
if(qflag && muflag)
Kokkos::parallel_reduce(Kokkos::RangePolicy<DeviceType, TagFixEfieldNonConstant<1,1> >(0,nlocal),*this,result);
else if(qflag && !muflag)
Kokkos::parallel_reduce(Kokkos::RangePolicy<DeviceType, TagFixEfieldNonConstant<1,0> >(0,nlocal),*this,result);
else if(!qflag && muflag)
Kokkos::parallel_reduce(Kokkos::RangePolicy<DeviceType, TagFixEfieldNonConstant<0,1> >(0,nlocal),*this,result);
else
Kokkos::parallel_reduce(Kokkos::RangePolicy<DeviceType, TagFixEfieldNonConstant<0,0> >(0,nlocal),*this,result);
copymode = 0;
}
atomKK->modified(execution_space, F_MASK);
atomKK->modified(execution_space, datamask_modify);
fsum[0] = fsum_kk.d0;
fsum[1] = fsum_kk.d1;
fsum[2] = fsum_kk.d2;
fsum[3] = fsum_kk.d3;
}
fsum[0]=result[0];
fsum[1]=result[1];
fsum[2]=result[2];
fsum[3]=result[3];
template<class DeviceType>
KOKKOS_INLINE_FUNCTION
void FixEfieldKokkos<DeviceType>::operator()(TagFixEfieldConstant, const int &i, double_4& fsum_kk) const {
if (mask[i] & groupbit) {
if (region && !d_match[i]) return;
if (vflag_global) {
virial[0] += result[4];
virial[1] += result[5];
virial[2] += result[6];
virial[3] += result[7];
virial[4] += result[8];
virial[5] += result[9];
}
auto prd = Few<double,3>(domain->prd);
auto h = Few<double,6>(domain->h);
auto triclinic = domain->triclinic;
Few<double,3> x_i;
x_i[0] = x(i,0);
x_i[1] = x(i,1);
x_i[2] = x(i,2);
auto unwrap = DomainKokkos::unmap(prd,h,triclinic,x_i,image(i));
const F_FLOAT qtmp = q(i);
const F_FLOAT fx = qtmp * ex;
const F_FLOAT fy = qtmp * ey;
const F_FLOAT fz = qtmp * ez;
f(i,0) += fx;
f(i,1) += fy;
f(i,2) += fz;
// TODO: access to unwrap below crashes
fsum_kk.d0 -= fx * unwrap[0] + fy * unwrap[1] + fz * unwrap[2];
fsum_kk.d1 += fx;
fsum_kk.d2 += fy;
fsum_kk.d3 += fz;
if (vflag_atom) {
k_vatom.template modify<DeviceType>();
k_vatom.template sync<LMPHostType>();
}
}
template<class DeviceType>
template<int QFLAG, int MUFLAG>
KOKKOS_INLINE_FUNCTION
void FixEfieldKokkos<DeviceType>::operator()(TagFixEfieldNonConstant, const int &i, double_4& fsum_kk) const {
auto prd = Few<double,3>(domain->prd);
auto h = Few<double,6>(domain->h);
auto triclinic = domain->triclinic;
if (mask[i] & groupbit) {
void FixEfieldKokkos<DeviceType>::operator()(TagFixEfieldConstant<QFLAG,MUFLAG>, const int &i, value_type result) const {
if ( QFLAG && (d_mask(i) & groupbit)) {
if (region && !d_match[i]) return;
Few<double,3> x_i;
x_i[0] = x(i,0);
x_i[1] = x(i,1);
x_i[2] = x(i,2);
auto unwrap = DomainKokkos::unmap(prd,h,triclinic,x_i,image(i));
const F_FLOAT qtmp = q[i];
const F_FLOAT fx = qtmp * ex;
const F_FLOAT fy = qtmp * ey;
const F_FLOAT fz = qtmp * ez;
if (xstyle == ATOM) f(i,0) += d_efield(i,0);
else if (xstyle) f(i,0) += fx;
if (ystyle == ATOM) f(i,1) += d_efield(i,1);
else if (ystyle) f(i,1) += fy;
if (zstyle == ATOM) f(i,2) += d_efield(i,2);
else if (zstyle) f(i,2) += fz;
// TODO: access to unwrap below crashes
fsum_kk.d0 -= fx * unwrap[0] + fy * unwrap[1] + fz * unwrap[2];
fsum_kk.d1 += fx;
fsum_kk.d2 += fy;
fsum_kk.d3 += fz;
x_i[0] = d_x(i,0);
x_i[1] = d_x(i,1);
x_i[2] = d_x(i,2);
auto unwrapKK = DomainKokkos::unmap(prd,h,triclinic,x_i,d_image(i));
const F_FLOAT fx = d_q(i) * ex;
const F_FLOAT fy = d_q(i) * ey;
const F_FLOAT fz = d_q(i) * ez;
d_f(i,0) += fx;
d_f(i,1) += fy;
d_f(i,2) += fz;
result[0] -= fx * unwrapKK[0] + fy * unwrapKK[1] + fz * unwrapKK[2];
result[1] += fx;
result[2] += fy;
result[3] += fz;
if (evflag) {
double v[6];
v[0] = fx * unwrapKK[0];
v[1] = fy * unwrapKK[1];
v[2] = fz * unwrapKK[2];
v[3] = fx * unwrapKK[1];
v[4] = fx * unwrapKK[2];
v[5] = fy * unwrapKK[2];
v_tally(result, i, v);
}
}
if (MUFLAG && (d_mask(i) & groupbit)) {
if (region && !d_match[i]) return;
d_torque(i,0) += ez * d_mu(i,1) - ey * d_mu(i,2);
d_torque(i,1) += ex * d_mu(i,2) - ez * d_mu(i,0);
d_torque(i,2) += ey * d_mu(i,0) - ex * d_mu(i,1);
result[0] -= d_mu(i,0) * ex + d_mu(i,1) * ey + d_mu(i,2) * ez;
}
}
template<class DeviceType>
template<int QFLAG, int MUFLAG>
KOKKOS_INLINE_FUNCTION
void FixEfieldKokkos<DeviceType>::operator()(TagFixEfieldNonConstant<QFLAG,MUFLAG>, const int &i, value_type result) const {
if ( QFLAG && (d_mask(i) & groupbit)) {
if (region && !d_match[i]) return;
F_FLOAT fx, fy, fz;
if (xstyle == ATOM) fx = qe2f * d_q(i) * d_efield(i,0);
else fx = d_q(i) * ex;
if (ystyle == ATOM) fy = qe2f * d_q(i) * d_efield(i,1);
else fy = d_q(i) * ey;
if (zstyle == ATOM) fz = qe2f * d_q(i) * d_efield(i,2);
else fz = d_q(i) * ez;
d_f(i,0) += fx;
d_f(i,1) += fy;
d_f(i,2) += fz;
result[1] += fx;
result[2] += fy;
result[3] += fz;
if (pstyle == ATOM) result[0] += qe2f * d_q(i) * d_efield(i,3);
else if (estyle == ATOM) result[0] += d_efield(i,3);
}
if (MUFLAG && (d_mask(i) & groupbit)) {
if (region && !d_match[i]) return;
d_torque(i,0) += ez * d_mu(i,1) - ey * d_mu(i,2);
d_torque(i,1) += ex * d_mu(i,2) - ez * d_mu(i,0);
d_torque(i,2) += ey * d_mu(i,0) - ex * d_mu(i,1);
}
}
/* ----------------------------------------------------------------------
tally virial into global and per-atom accumulators
i = local index of atom
v = total virial for the interaction
increment global virial by v
increment per-atom virial by v
this method can be used when fix computes forces in post_force()
and the force depends on a distance to some external object
e.g. fix wall/lj93: compute virial only on owned atoms
------------------------------------------------------------------------- */
template <class DeviceType>
KOKKOS_INLINE_FUNCTION
void FixEfieldKokkos<DeviceType>::v_tally(value_type result, int i, double *v) const
{
if (vflag_global) {
result[4] += v[0];
result[5] += v[1];
result[6] += v[2];
result[7] += v[3];
result[8] += v[4];
result[9] += v[5];
}
if (vflag_atom) {
Kokkos::atomic_add(&(d_vatom(i,0)),v[0]);
Kokkos::atomic_add(&(d_vatom(i,1)),v[1]);
Kokkos::atomic_add(&(d_vatom(i,2)),v[2]);
Kokkos::atomic_add(&(d_vatom(i,3)),v[3]);
Kokkos::atomic_add(&(d_vatom(i,4)),v[4]);
Kokkos::atomic_add(&(d_vatom(i,5)),v[5]);
}
}
@ -311,4 +317,3 @@ template class FixEfieldKokkos<LMPDeviceType>;
template class FixEfieldKokkos<LMPHostType>;
#endif
}

View File

@ -25,35 +25,20 @@ FixStyle(efield/kk/host,FixEfieldKokkos<LMPHostType>);
#include "fix_efield.h"
#include "kokkos_type.h"
#include "kokkos_few.h"
namespace LAMMPS_NS {
struct e_double_4 {
double d0, d1, d2, d3;
KOKKOS_INLINE_FUNCTION
e_double_4() {
d0 = d1 = d2 = d3 = 0.0;
}
KOKKOS_INLINE_FUNCTION
e_double_4& operator+=(const e_double_4 &rhs) {
d0 += rhs.d0;
d1 += rhs.d1;
d2 += rhs.d2;
d3 += rhs.d3;
return *this;
}
};
typedef e_double_4 double_4;
template<int QFLAG, int MUFLAG>
struct TagFixEfieldConstant{};
template<int QFLAG, int MUFLAG>
struct TagFixEfieldNonConstant{};
template<class DeviceType>
class FixEfieldKokkos : public FixEfield {
public:
typedef DeviceType device_type;
typedef double_4 value_type;
typedef ArrayTypes<DeviceType> AT;
FixEfieldKokkos(class LAMMPS *, int, char **);
@ -61,22 +46,40 @@ class FixEfieldKokkos : public FixEfield {
void init() override;
void post_force(int) override;
KOKKOS_INLINE_FUNCTION
void operator()(TagFixEfieldConstant, const int&, double_4&) const;
typedef double value_type[];
const int value_count = 10;
template<int QFLAG, int MUFLAG>
KOKKOS_INLINE_FUNCTION
void operator()(TagFixEfieldNonConstant, const int&, double_4&) const;
void operator()(TagFixEfieldConstant<QFLAG,MUFLAG>, const int&, value_type) const;
template<int QFLAG, int MUFLAG>
KOKKOS_INLINE_FUNCTION
void operator()(TagFixEfieldNonConstant<QFLAG,MUFLAG>, const int&, value_type) const;
private:
DAT::tdual_ffloat_2d k_efield;
typename AT::t_ffloat_2d_randomread d_efield;
typename AT::t_int_1d d_match;
typename AT::t_x_array_randomread x;
typename AT::t_float_1d_randomread q;
typename AT::t_f_array f;
typename AT::t_imageint_1d_randomread image;
typename AT::t_int_1d_randomread mask;
typename AT::t_x_array_randomread d_x;
typename AT::t_float_1d_randomread d_q;
typename AT::t_mu_array_randomread d_mu;
typename AT::t_f_array d_f;
typename AT::t_f_array d_torque;
typename AT::t_imageint_1d_randomread d_image;
typename AT::t_int_1d_randomread d_mask;
Few<double,3> prd;
Few<double,6> h;
int triclinic;
DAT::tdual_virial_array k_vatom;
typename AT::t_virial_array d_vatom;
KOKKOS_INLINE_FUNCTION
void v_tally(value_type, int, double*) const;
};
}

View File

@ -13,7 +13,8 @@
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing author: Stan Moore (SNL)
Contributing authors: Stan Moore (SNL)
Mitch Murphy (alphataubio@gmail.com)
------------------------------------------------------------------------- */
#include "fix_nh_kokkos.h"
@ -37,6 +38,7 @@ using namespace FixConst;
static constexpr double DELTAFLIP = 0.1;
static constexpr double TILTMAX = 1.5;
static constexpr double EPSILON = 1.0e-6;
enum{NOBIAS,BIAS};
enum{NONE,XYZ,XY,YZ,XZ};
@ -50,6 +52,7 @@ template<class DeviceType>
FixNHKokkos<DeviceType>::FixNHKokkos(LAMMPS *lmp, int narg, char **arg) : FixNH(lmp, narg, arg)
{
kokkosable = 1;
atomKK = (AtomKokkos *)atom;
domainKK = (DomainKokkos *) domain;
execution_space = ExecutionSpaceFromDevice<DeviceType>::space;
@ -89,18 +92,21 @@ void FixNHKokkos<DeviceType>::setup(int /*vflag*/)
} else if (pstat_flag) {
// t0 = reference temperature for masses
// set equal to either ptemp or the current temperature
// cannot be done in init() b/c temperature cannot be called there
// is b/c Modify::init() inits computes after fixes due to dof dependence
// guesstimate a unit-dependent t0 if actual T = 0.0
// error if T less than 1e-6
// if it was read in from a restart file, leave it be
if (t0 == 0.0) {
atomKK->sync(temperature->execution_space,temperature->datamask_read);
t0 = temperature->compute_scalar();
atomKK->modified(temperature->execution_space,temperature->datamask_modify);
if (t0 == 0.0) {
if (strcmp(update->unit_style,"lj") == 0) t0 = 1.0;
else t0 = 300.0;
if (p_temp_flag) {
t0 = p_temp;
} else {
atomKK->sync(temperature->execution_space,temperature->datamask_read);
t0 = temperature->compute_scalar();
atomKK->modified(temperature->execution_space,temperature->datamask_modify);
if (t0 < EPSILON)
error->all(FLERR,"Current temperature too close to zero, consider using ptemp keyword");
}
}
t_target = t0;
@ -298,13 +304,14 @@ void FixNHKokkos<DeviceType>::remap()
// convert pertinent atoms and rigid bodies to lamda coords
domainKK->x2lamda(nlocal);
//if (allremap) domainKK->x2lamda(nlocal);
//else {
// for (i = 0; i < nlocal; i++)
// if (mask[i] & dilate_group_bit)
// domain->x2lamda(x[i],x[i]);
//}
x = atomKK->k_x.template view<DeviceType>();
if (allremap) domainKK->x2lamda(nlocal);
else {
for ( int i = 0; i < nlocal; i++)
if (mask[i] & dilate_group_bit)
domainKK->x2lamda(&x(i,0), &x(i,0));
}
if (rfix.size() > 0)
error->all(FLERR,"Cannot (yet) use rigid bodies with fix nh and Kokkos");
@ -446,13 +453,12 @@ void FixNHKokkos<DeviceType>::remap()
// convert pertinent atoms and rigid bodies back to box coords
domainKK->lamda2x(nlocal);
//if (allremap) domainKK->lamda2x(nlocal);
//else {
// for (i = 0; i < nlocal; i++)
// if (mask[i] & dilate_group_bit)
// domain->lamda2x(x[i],x[i]);
//}
if (allremap) domainKK->lamda2x(nlocal);
else {
for ( int i = 0; i < nlocal; i++)
if (mask[i] & dilate_group_bit)
domainKK->lamda2x(&x(i,0), &x(i,0));
}
// for (auto &ifix : rfix) ifix->deform(1);
}

View File

@ -12,11 +12,19 @@
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing author: Mitch Murphy (alphataubio@gmail.com)
------------------------------------------------------------------------- */
#include "fix_wall_lj93_kokkos.h"
#include "atom_masks.h"
#include "atom_kokkos.h"
#include "error.h"
#include "atom_masks.h"
#include "input.h"
#include "memory_kokkos.h"
#include <iostream>
using namespace LAMMPS_NS;
@ -29,9 +37,91 @@ FixWallLJ93Kokkos<DeviceType>::FixWallLJ93Kokkos(LAMMPS *lmp, int narg, char **a
kokkosable = 1;
atomKK = (AtomKokkos *) atom;
execution_space = ExecutionSpaceFromDevice<DeviceType>::space;
datamask_read = EMPTY_MASK;
datamask_modify = EMPTY_MASK;
virial_global_flag = virial_peratom_flag = 0;
datamask_read = X_MASK | V_MASK | MASK_MASK;
datamask_modify = F_MASK;
memoryKK->create_kokkos(k_cutoff,6,"wall_lj93:cutoff");
memoryKK->create_kokkos(k_coeff1,6,"wall_lj93:coeff1");
memoryKK->create_kokkos(k_coeff2,6,"wall_lj93:coeff2");
memoryKK->create_kokkos(k_coeff3,6,"wall_lj93:coeff3");
memoryKK->create_kokkos(k_coeff4,6,"wall_lj93:coeff4");
memoryKK->create_kokkos(k_offset,6,"wall_lj93:offset");
d_cutoff = k_cutoff.template view<DeviceType>();
d_coeff1 = k_coeff1.template view<DeviceType>();
d_coeff2 = k_coeff2.template view<DeviceType>();
d_coeff3 = k_coeff3.template view<DeviceType>();
d_coeff4 = k_coeff4.template view<DeviceType>();
d_offset = k_offset.template view<DeviceType>();
}
template<class DeviceType>
FixWallLJ93Kokkos<DeviceType>::~FixWallLJ93Kokkos()
{
if (copymode) return;
memoryKK->destroy_kokkos(k_cutoff);
memoryKK->destroy_kokkos(k_coeff1);
memoryKK->destroy_kokkos(k_coeff2);
memoryKK->destroy_kokkos(k_coeff3);
memoryKK->destroy_kokkos(k_coeff4);
memoryKK->destroy_kokkos(k_offset);
memoryKK->destroy_kokkos(k_vatom,vatom);
}
/* ---------------------------------------------------------------------- */
template <class DeviceType>
void FixWallLJ93Kokkos<DeviceType>::precompute(int m)
{
FixWallLJ93::precompute(m);
for( int i=0 ; i<6 ; i++ ) {
k_cutoff.h_view(i) = cutoff[i];
k_coeff1.h_view(i) = coeff1[i];
k_coeff2.h_view(i) = coeff2[i];
k_coeff3.h_view(i) = coeff3[i];
k_coeff4.h_view(i) = coeff4[i];
k_offset.h_view(i) = offset[i];
}
k_cutoff.template modify<LMPHostType>();
k_coeff1.template modify<LMPHostType>();
k_coeff2.template modify<LMPHostType>();
k_coeff3.template modify<LMPHostType>();
k_coeff4.template modify<LMPHostType>();
k_offset.template modify<LMPHostType>();
k_cutoff.template sync<DeviceType>();
k_coeff1.template sync<DeviceType>();
k_coeff2.template sync<DeviceType>();
k_coeff3.template sync<DeviceType>();
k_coeff4.template sync<DeviceType>();
k_offset.template sync<DeviceType>();
}
/* ---------------------------------------------------------------------- */
template <class DeviceType>
void FixWallLJ93Kokkos<DeviceType>::post_force(int vflag)
{
// reallocate per-atom arrays if necessary
if (vflag_atom) {
memoryKK->destroy_kokkos(k_vatom,vatom);
memoryKK->create_kokkos(k_vatom,vatom,maxvatom,"wall_lj93:vatom");
d_vatom = k_vatom.template view<DeviceType>();
}
FixWallLJ93::post_force(vflag);
if (vflag_atom) {
k_vatom.template modify<DeviceType>();
k_vatom.template sync<LMPHostType>();
}
}
/* ----------------------------------------------------------------------
@ -47,47 +137,89 @@ void FixWallLJ93Kokkos<DeviceType>::wall_particle(int m_in, int which, double co
m = m_in;
coord = coord_in;
atomKK->sync(execution_space, X_MASK|F_MASK|MASK_MASK);
x = atomKK->k_x.view<DeviceType>();
f = atomKK->k_f.view<DeviceType>();
mask = atomKK->k_mask.view<DeviceType>();
int nlocal = atom->nlocal;
atomKK->sync(execution_space,datamask_read);
d_x = atomKK->k_x.template view<DeviceType>();
d_f = atomKK->k_f.template view<DeviceType>();
d_mask = atomKK->k_mask.template view<DeviceType>();
int nlocal = atomKK->nlocal;
dim = which / 2;
side = which % 2;
if (side == 0) side = -1;
double result[13] = {0.0};
copymode = 1;
FixWallLJ93KokkosFunctor<DeviceType> wp_functor(this);
Kokkos::parallel_reduce(nlocal,wp_functor,ewall);
Kokkos::parallel_reduce(nlocal,*this,result);
copymode = 0;
atomKK->modified(execution_space, F_MASK);
ewall[0] += result[0];
ewall[m+1] += result[m+1];
atomKK->modified(execution_space,datamask_modify);
if (vflag_global) {
virial[0] += result[7];
virial[1] += result[8];
virial[2] += result[9];
virial[3] += result[10];
virial[4] += result[11];
virial[5] += result[12];
}
}
template <class DeviceType>
KOKKOS_INLINE_FUNCTION
void FixWallLJ93Kokkos<DeviceType>::wall_particle_item(int i, value_type ewall) const {
if (mask(i) & groupbit) {
void FixWallLJ93Kokkos<DeviceType>::operator()(const int &i, value_type result) const {
if (d_mask(i) & groupbit) {
double delta;
if (side < 0) delta = x(i,dim) - coord;
else delta = coord - x(i,dim);
if (delta >= cutoff[m]) return;
if (side < 0) delta = d_x(i,dim) - coord;
else delta = coord - d_x(i,dim);
if (delta >= d_cutoff(m)) return;
if (delta <= 0.0)
Kokkos::abort("Particle on or inside fix wall surface");
double rinv = 1.0/delta;
double r2inv = rinv*rinv;
double r4inv = r2inv*r2inv;
double r10inv = r4inv*r4inv*r2inv;
double fwall = side * (coeff1[m]*r10inv - coeff2[m]*r4inv);
f(i,dim) -= fwall;
ewall[0] += coeff3[m]*r4inv*r4inv*rinv -
coeff4[m]*r2inv*rinv - offset[m];
ewall[m+1] += fwall;
double fwall = side * (d_coeff1(m)*r10inv - d_coeff2(m)*r4inv);
d_f(i,dim) -= fwall;
result[0] += d_coeff3(m)*r4inv*r4inv*rinv - d_coeff4(m)*r2inv*rinv - d_offset(m);
result[m+1] += fwall;
if (evflag) {
double vn;
if (side < 0)
vn = -fwall * delta;
else
vn = fwall * delta;
v_tally(result, dim, i, vn);
}
}
}
/* ----------------------------------------------------------------------
tally virial component into global and per-atom accumulators
n = index of virial component (0-5)
i = local index of atom
vn = nth component of virial for the interaction
increment nth component of global virial by vn
increment nth component of per-atom virial by vn
this method can be used when fix computes forces in post_force()
and the force depends on a distance to some external object
e.g. fix wall/lj93: compute virial only on owned atoms
------------------------------------------------------------------------- */
template <class DeviceType>
KOKKOS_INLINE_FUNCTION
void FixWallLJ93Kokkos<DeviceType>::v_tally(value_type result, int n, int i, double vn) const
{
if (vflag_global)
result[n+7] += vn;
if (vflag_atom)
Kokkos::atomic_add(&(d_vatom(i,n)),vn);
}
namespace LAMMPS_NS {
template class FixWallLJ93Kokkos<LMPDeviceType>;
#ifdef LMP_KOKKOS_GPU

View File

@ -33,38 +33,37 @@ class FixWallLJ93Kokkos : public FixWallLJ93 {
public:
typedef DeviceType device_type;
typedef ArrayTypes<DeviceType> AT;
typedef double value_type[];
FixWallLJ93Kokkos(class LAMMPS *, int, char **);
~FixWallLJ93Kokkos() override;
void precompute(int) override;
void post_force(int) override;
void wall_particle(int, int, double) override;
int m;
typedef double value_type[];
const int value_count = 13;
KOKKOS_INLINE_FUNCTION
void wall_particle_item(int, value_type) const;
void operator()(const int&, value_type) const;
private:
int dim,side;
double coord;
typename AT::t_x_array x;
typename AT::t_f_array f;
typename AT::t_int_1d mask;
};
typename AT::t_x_array d_x;
typename AT::t_f_array d_f;
typename AT::t_int_1d d_mask;
template <class DeviceType>
struct FixWallLJ93KokkosFunctor {
typedef DeviceType device_type ;
typedef double value_type[];
const int value_count;
DAT::tdual_virial_array k_vatom;
typename AT::t_virial_array d_vatom;
typename AT::tdual_ffloat_1d k_cutoff,k_coeff1,k_coeff2,k_coeff3,k_coeff4,k_offset;
typename AT::t_ffloat_1d d_cutoff,d_coeff1,d_coeff2,d_coeff3,d_coeff4,d_offset;
FixWallLJ93Kokkos<DeviceType> c;
FixWallLJ93KokkosFunctor(FixWallLJ93Kokkos<DeviceType>* c_ptr):
value_count(c_ptr->m+1), c(*c_ptr) {}
KOKKOS_INLINE_FUNCTION
void operator()(const int i, value_type ewall) const {
c.wall_particle_item(i,ewall);
}
void v_tally(value_type, int, int, double) const;
};
}

View File

@ -23,10 +23,6 @@
using namespace LAMMPS_NS;
enum{XLO=0,XHI=1,YLO=2,YHI=3,ZLO=4,ZHI=5};
enum{NONE=0,EDGE,CONSTANT,VARIABLE};
/* ---------------------------------------------------------------------- */
template<class DeviceType>

View File

@ -18,7 +18,7 @@ using namespace LAMMPS_NS;
*
* Copyright:
* (C) 2012 Massachusetts Institute of Technology
* (C) 2013 Forschungszentrum Jülich GmbH
* (C) 2013 Forschungszentrum Juelich GmbH
*
* Licence:
* Permission is hereby granted, free of charge, to any person obtaining
@ -42,7 +42,7 @@ using namespace LAMMPS_NS;
*
* Authors:
* Steven G. Johnson, Massachusetts Institute of Technology, 2012, core author
* Joachim Wuttke, Forschungszentrum Jülich, 2013, package maintainer
* Joachim Wuttke, Forschungszentrum Juelich, 2013, package maintainer
*
* Website:
* https://jugit.fz-juelich.de/mlz/libcerf

View File

@ -13,7 +13,7 @@
/* ----------------------------------------------------------------------
Contributing author: Ajinkya Hire (Univ. of Florida),
Hendrik Kraß (Univ. of Constance),
Hendrik Krass (Univ. of Constance),
Matthias Rupp (Luxembourg Institute of Science and Technology),
Richard Hennig (Univ of Florida)
---------------------------------------------------------------------- */

View File

@ -13,7 +13,7 @@
/* ----------------------------------------------------------------------
Contributing author: Ajinkya Hire (Univ. of Florida),
Hendrik Kraß (Univ. of Constance),
Hendrik Krass (Univ. of Constance),
Matthias Rupp (Luxembourg Institute of Science and Technology),
Richard Hennig (Univ of Florida)
---------------------------------------------------------------------- */

View File

@ -13,7 +13,7 @@
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing author: Dominik Wójt (Wroclaw University of Technology)
Contributing author: Dominik Wojt (Wroclaw University of Technology)
based on pair_airebo by Ase Henry (MIT)
------------------------------------------------------------------------- */

View File

@ -82,7 +82,7 @@ FixAtomSwap::FixAtomSwap(LAMMPS *lmp, int narg, char **arg) :
memory->create(type_list, atom->ntypes, "atom/swap:type_list");
memory->create(mu, atom->ntypes + 1, "atom/swap:mu");
for (int i = 1; i <= atom->ntypes; i++) mu[i] = 0.0;
for (int i = 0; i <= atom->ntypes; i++) mu[i] = 0.0;
// read options from end of input line

View File

@ -12,7 +12,7 @@
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing author: Sebastian Hütter (OvGU)
Contributing author: Sebastian Huetter (OvGU)
------------------------------------------------------------------------- */
#include "meam.h"

View File

@ -12,7 +12,7 @@
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing author: Sebastian Hütter (OvGU)
Contributing author: Sebastian Huetter (OvGU)
------------------------------------------------------------------------- */
#include "meam.h"

View File

@ -829,7 +829,7 @@ void MEAM::get_densref(double r, int a, int b, double* rho01, double* rho11, dou
case L12:
*rho01 = 8 * rhoa01 + 4 * rhoa02;
*rho02 = 12 * rhoa01;
if (ialloy ==1){
if (ialloy == 1) {
*rho21 = 8. / 3. * MathSpecial::square(rhoa21 * t2_meam[a] - rhoa22 * t2_meam[b]);
denom = 8 * rhoa01 * MathSpecial::square(t2_meam[a]) + 4 * rhoa02 * MathSpecial::square(t2_meam[b]);
if (denom > 0.)
@ -837,6 +837,7 @@ void MEAM::get_densref(double r, int a, int b, double* rho01, double* rho11, dou
} else
*rho21 = 8. / 3. * (rhoa21 - rhoa22) * (rhoa21 - rhoa22);
if (msmeamflag) {
*rho21 = 8. / 3. * (rhoa21 - rhoa22) * (rhoa21 - rhoa22);
*rho2m1 = 8. / 3. * (rhoa2m1 - rhoa2m2) * (rhoa2m1 - rhoa2m2);
}
break;

View File

@ -547,9 +547,9 @@ void PairMEAM::read_user_meam_file(const std::string &userfile)
// open user param file on proc 0
std::shared_ptr<PotentialFileReader> reader;
PotentialFileReader *reader = nullptr;
if (comm->me == 0) reader = std::make_shared<PotentialFileReader>(lmp, userfile, "MEAM");
if (comm->me == 0) reader = new PotentialFileReader(lmp, userfile, "MEAM");
// read settings
// pass them one at a time to MEAM package
@ -623,6 +623,7 @@ void PairMEAM::read_user_meam_file(const std::string &userfile)
keyword, descr[errorflag]);
}
}
if (comm->me == 0) delete reader;
}
/* ---------------------------------------------------------------------- */

View File

@ -40,7 +40,7 @@ using namespace FixConst;
* Please cite:
* Ceriotti, M., More, J., & Manolopoulos, D. E. (2014).
* i-PI: A Python interface for ab initio path integral molecular dynamics simulations.
* Computer Physics Communications, 185, 10191026. doi:10.1016/j.cpc.2013.10.027
* Computer Physics Communications, 185, 1019-1026. doi:10.1016/j.cpc.2013.10.027
* And see [https://github.com/i-pi/i-pi] to download a version of i-PI
******************************************************************************************/

View File

@ -12,7 +12,7 @@
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing author: Pedro Antonio Santos Flórez (UNLV)
Contributing author: Pedro Antonio Santos Florez (UNLV)
------------------------------------------------------------------------- */
#include "mliap_model_nn.h"

View File

@ -1580,8 +1580,8 @@ double SNA::compute_dsfac(double r, double rcut, double sinner, double dinner)
else if (r <= rmin0) sfac_outer = 1.0;
else if (r > rcut) sfac_outer = 0.0;
else {
double rcutfac = MY_PI / (rcut - rmin0);
sfac_outer = 0.5 * (cos((r - rmin0) * rcutfac) + 1.0);
double rcutfac = MY_PI / (rcut - rmin0);
sfac_outer = 0.5 * (cos((r - rmin0) * rcutfac) + 1.0);
}
// calculate sfac_inner

View File

@ -13,7 +13,7 @@
/* ----------------------------------------------------------------------
Contributing author: Ajinkya Hire (Univ. of Florida),
Hendrik Kraß (Univ. of Constance),
Hendrik Krass (Univ. of Constance),
Matthias Rupp (Luxembourg Institute of Science and Technology),
Richard Hennig (Univ of Florida)
---------------------------------------------------------------------- */

View File

@ -13,7 +13,7 @@
/* ----------------------------------------------------------------------
Contributing author: Ajinkya Hire (Univ. of Florida),
Hendrik Kraß (Univ. of Constance),
Hendrik Krass (Univ. of Constance),
Matthias Rupp (Luxembourg Institute of Science and Technology),
Richard Hennig (Univ of Florida)
---------------------------------------------------------------------- */

View File

@ -291,3 +291,15 @@ void AngleCosineSquared::born_matrix(int type, int i1, int i2, int i3, double &d
du2 = 2 * k[type];
du = du2 * dcostheta;
}
/* ----------------------------------------------------------------------
return ptr to internal members upon request
------------------------------------------------------------------------ */
void *AngleCosineSquared::extract(const char *str, int &dim)
{
dim = 1;
if (strcmp(str, "k") == 0) return (void *) k;
if (strcmp(str, "theta0") == 0) return (void *) theta0;
return nullptr;
}

View File

@ -36,6 +36,7 @@ class AngleCosineSquared : public Angle {
void write_data(FILE *) override;
double single(int, int, int, int) override;
void born_matrix(int type, int i1, int i2, int i3, double &du, double &du2) override;
void *extract(const char *, int &) override;
protected:
double *k, *theta0;

View File

@ -1,4 +1,3 @@
// clang-format off
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
https://www.lammps.org/, Sandia National Laboratories
@ -49,36 +48,31 @@ static const char plumed_default_kernel[] = "PLUMED_KERNEL=" PLUMED_QUOTE(__PLUM
using namespace LAMMPS_NS;
using namespace FixConst;
FixPlumed::FixPlumed(LAMMPS *lmp, int narg, char **arg) :
Fix(lmp, narg, arg),
p(nullptr), nlocal(0), gatindex(nullptr), masses(nullptr), charges(nullptr),
id_pe(nullptr), id_press(nullptr)
Fix(lmp, narg, arg), p(nullptr), nlocal(0), gatindex(nullptr), masses(nullptr),
charges(nullptr), id_pe(nullptr), id_press(nullptr)
{
if (!atom->tag_enable)
error->all(FLERR,"Fix plumed requires atom tags");
if (!atom->tag_enable) error->all(FLERR, "Fix plumed requires atom tags");
if (atom->tag_consecutive() == 0)
error->all(FLERR,"Fix plumed requires consecutive atom IDs");
if (atom->tag_consecutive() == 0) error->all(FLERR, "Fix plumed requires consecutive atom IDs");
if (igroup != 0 && comm->me == 0)
error->warning(FLERR,"Fix group for fix plumed is not 'all'. "
"Group will be ignored.");
error->warning(FLERR, "Fix group for fix plumed is not 'all'. Group will be ignored.");
#if defined(__PLUMED_DEFAULT_KERNEL)
if (getenv("PLUMED_KERNEL") == nullptr)
platform::putenv(plumed_default_kernel);
if (getenv("PLUMED_KERNEL") == nullptr) platform::putenv(plumed_default_kernel);
#endif
p=new PLMD::Plumed;
p = new PLMD::Plumed;
// Check API version
int api_version=0;
p->cmd("getApiVersion",&api_version);
int api_version = 0;
p->cmd("getApiVersion", &api_version);
if ((api_version < 5) || (api_version > 10))
error->all(FLERR,"Incompatible API version for PLUMED in fix plumed. "
error->all(FLERR,
"Incompatible API version for PLUMED in fix plumed. "
"Only Plumed 2.4.x, 2.5.x, 2.6.x, 2.7.x, 2.8.x, 2.9.x are tested and supported.");
#if !defined(MPI_STUBS)
@ -86,21 +80,19 @@ FixPlumed::FixPlumed(LAMMPS *lmp, int narg, char **arg) :
// inter-partition communication
if (universe->existflag == 1) {
int me;
MPI_Comm inter_comm;
MPI_Comm_rank(world,&me);
// Change MPI_COMM_WORLD to universe->uworld which seems more appropriate
MPI_Comm_split(universe->uworld,me,0,&inter_comm);
p->cmd("GREX setMPIIntracomm",&world);
if (me == 0) {
MPI_Comm_split(universe->uworld, comm->me, 0, &inter_comm);
p->cmd("GREX setMPIIntracomm", &world);
if (comm->me == 0) {
// The inter-partition communicator is only defined for the root in
// each partition (a.k.a. world). This is due to the way in which
// it is defined inside plumed.
p->cmd("GREX setMPIIntercomm",&inter_comm);
p->cmd("GREX setMPIIntercomm", &inter_comm);
}
p->cmd("GREX init",nullptr);
p->cmd("GREX init", nullptr);
}
// The general communicator is independent of the existence of partitions,
@ -110,100 +102,103 @@ FixPlumed::FixPlumed(LAMMPS *lmp, int narg, char **arg) :
// plumed does not know about LAMMPS using the MPI STUBS library and will
// fail if this is called under these circumstances
p->cmd("setMPIComm",&world);
p->cmd("setMPIComm", &world);
#endif
// Set up units
// LAMMPS units wrt kj/mol - nm - ps
// Set up units
if (strcmp(update->unit_style,"lj") == 0) {
if (strcmp(update->unit_style, "lj") == 0) {
// LAMMPS units lj
p->cmd("setNaturalUnits");
} else {
// Conversion factor from LAMMPS energy units to kJ/mol (units of PLUMED)
double energyUnits=1.0;
double energyUnits = 1.0;
// LAMMPS units real :: kcal/mol;
if (strcmp(update->unit_style,"real") == 0) {
energyUnits=4.184;
if (strcmp(update->unit_style, "real") == 0) {
energyUnits = 4.184;
// LAMMPS units metal :: eV;
} else if (strcmp(update->unit_style,"metal") == 0) {
energyUnits=96.48530749925792;
} else if (strcmp(update->unit_style, "metal") == 0) {
energyUnits = 96.48530749925792;
// LAMMPS units si :: Joule;
} else if (strcmp(update->unit_style,"si") == 0) {
energyUnits=0.001;
} else if (strcmp(update->unit_style, "si") == 0) {
energyUnits = 0.001;
// LAMMPS units cgs :: erg;
} else if (strcmp(update->unit_style,"cgs") == 0) {
energyUnits=6.0221418e13;
} else if (strcmp(update->unit_style, "cgs") == 0) {
energyUnits = 6.0221418e13;
// LAMMPS units electron :: Hartree;
} else if (strcmp(update->unit_style,"electron") == 0) {
energyUnits=2625.5257;
} else if (strcmp(update->unit_style, "electron") == 0) {
energyUnits = 2625.5257;
} else error->all(FLERR,"Fix plumed cannot handle your choice of units");
} else
error->all(FLERR, "Fix plumed cannot handle {} units", update->unit_style);
// Conversion factor from LAMMPS length units to nm (units of PLUMED)
double lengthUnits=0.1/force->angstrom;
double lengthUnits = 0.1 / force->angstrom;
// Conversion factor from LAMMPS time unit to ps (units of PLUMED)
double timeUnits=0.001/force->femtosecond;
double timeUnits = 0.001 / force->femtosecond;
p->cmd("setMDEnergyUnits",&energyUnits);
p->cmd("setMDLengthUnits",&lengthUnits);
p->cmd("setMDTimeUnits",&timeUnits);
p->cmd("setMDEnergyUnits", &energyUnits);
p->cmd("setMDLengthUnits", &lengthUnits);
p->cmd("setMDTimeUnits", &timeUnits);
}
// Read fix parameters:
int next=0;
for (int i=3;i<narg;++i) {
if (!strcmp(arg[i],"outfile")) {
next=1;
} else if (next==1) {
int next = 0;
for (int i = 3; i < narg; ++i) {
if (!strcmp(arg[i], "outfile")) {
next = 1;
} else if (next == 1) {
if (universe->existflag == 1) {
// Each replica writes an independent log file
// with suffix equal to the replica id
p->cmd("setLogFile",fmt::format("{}.{}",arg[i],universe->iworld).c_str());
next=0;
p->cmd("setLogFile", fmt::format("{}.{}", arg[i], universe->iworld).c_str());
next = 0;
} else {
// partition option not used
p->cmd("setLogFile",arg[i]);
next=0;
p->cmd("setLogFile", arg[i]);
next = 0;
}
} else if (!strcmp(arg[i],"plumedfile")) {
next=2;
} else if (next==2) {
p->cmd("setPlumedDat",arg[i]);
next=0;
} else error->all(FLERR,"Syntax error - use 'fix <fix-ID> plumed "
"plumedfile plumed.dat outfile plumed.out' ");
} else if (!strcmp(arg[i], "plumedfile")) {
next = 2;
} else if (next == 2) {
p->cmd("setPlumedDat", arg[i]);
next = 0;
} else
error->all(FLERR,
"Syntax error - use 'fix <fix-ID> plumed "
"plumedfile plumed.dat outfile plumed.out' ");
}
if (next==1) error->all(FLERR,"missing argument for outfile option");
if (next==2) error->all(FLERR,"missing argument for plumedfile option");
if (next == 1) error->all(FLERR, "missing argument for outfile option");
if (next == 2) error->all(FLERR, "missing argument for plumedfile option");
p->cmd("setMDEngine","LAMMPS");
p->cmd("setMDEngine", "LAMMPS");
if (atom->natoms > MAXSMALLINT)
error->all(FLERR,"Fix plumed can only handle up to 2.1 billion atoms");
error->all(FLERR, "Fix plumed can only handle up to 2.1 billion atoms");
natoms=int(atom->natoms);
p->cmd("setNatoms",&natoms);
natoms = int(atom->natoms);
p->cmd("setNatoms", &natoms);
double dt=update->dt;
p->cmd("setTimestep",&dt);
double dt = update->dt;
p->cmd("setTimestep", &dt);
extscalar = 1;
scalar_flag = 1;
@ -224,27 +219,24 @@ FixPlumed::FixPlumed(LAMMPS *lmp, int narg, char **arg) :
id_press = utils::strdup("plmd_press");
c_press = modify->add_compute(std::string(id_press) + " all pressure NULL virial");
for (int i = 0; i < modify->nfix; i++) {
const char * const check_style = modify->fix[i]->style;
for (const auto &fix : modify->get_fix_list()) {
const char *const check_style = fix->style;
// There must be only one
if (strcmp(check_style,"plumed") == 0)
error->all(FLERR,"There must be only one instance of fix plumed");
if (strcmp(check_style, "plumed") == 0)
error->all(FLERR, "There must be only one instance of fix plumed");
// Avoid conflict with fixes that define internal pressure computes.
// See comment in the setup method
if (utils::strmatch(check_style,"^nph") ||
utils::strmatch(check_style,"^npt") ||
utils::strmatch(check_style,"^rigid/nph") ||
utils::strmatch(check_style,"^rigid/npt") ||
utils::strmatch(check_style,"^msst") ||
utils::strmatch(check_style,"^nphug") ||
utils::strmatch(check_style,"^ipi") ||
utils::strmatch(check_style,"^press/berendsen") ||
utils::strmatch(check_style,"^qbmsst"))
error->all(FLERR,"Fix plumed must be defined before any other fixes, "
if (utils::strmatch(check_style, "^nph") || utils::strmatch(check_style, "^npt") ||
utils::strmatch(check_style, "^rigid/nph") || utils::strmatch(check_style, "^rigid/npt") ||
utils::strmatch(check_style, "^msst") || utils::strmatch(check_style, "^nphug") ||
utils::strmatch(check_style, "^ipi") || utils::strmatch(check_style, "^press/berendsen") ||
utils::strmatch(check_style, "^qbmsst"))
error->all(FLERR,
"Fix plumed must be defined before any other fixes, "
"that compute pressure internally");
}
}
@ -273,13 +265,13 @@ int FixPlumed::setmask()
void FixPlumed::init()
{
if (utils::strmatch(update->integrate_style,"^respa"))
if (utils::strmatch(update->integrate_style, "^respa"))
nlevels_respa = ((Respa *) update->integrate)->nlevels;
// This avoids nan pressure if compute_pressure is called
// in a setup method
for (int i=0;i<6;i++) virial[i] = 0.;
for (int i = 0; i < 6; i++) virial[i] = 0.;
}
void FixPlumed::setup(int vflag)
@ -293,10 +285,10 @@ void FixPlumed::setup(int vflag)
// has to be executed first. This creates a race condition with the
// setup method of fix_nh. This is why in the constructor I check if
// nh fixes have already been called.
if (utils::strmatch(update->integrate_style,"^respa")) {
((Respa *) update->integrate)->copy_flevel_f(nlevels_respa-1);
post_force_respa(vflag,nlevels_respa-1,0);
((Respa *) update->integrate)->copy_f_flevel(nlevels_respa-1);
if (utils::strmatch(update->integrate_style, "^respa")) {
((Respa *) update->integrate)->copy_flevel_f(nlevels_respa - 1);
post_force_respa(vflag, nlevels_respa - 1, 0);
((Respa *) update->integrate)->copy_f_flevel(nlevels_respa - 1);
} else {
post_force(vflag);
}
@ -312,11 +304,10 @@ void FixPlumed::min_setup(int vflag)
void FixPlumed::post_force(int /* vflag */)
{
int update_gatindex=0;
int update_gatindex = 0;
if (natoms != int(atom->natoms))
error->all(FLERR,"Fix plumed does not support simulations with varying "
"numbers of atoms");
error->all(FLERR, "Fix plumed does not support simulations with varying numbers of atoms");
// Try to find out if the domain decomposition has been updated:
@ -326,95 +317,97 @@ void FixPlumed::post_force(int /* vflag */)
delete[] masses;
delete[] gatindex;
nlocal=atom->nlocal;
gatindex=new int [nlocal];
masses=new double [nlocal];
charges=new double [nlocal];
update_gatindex=1;
nlocal = atom->nlocal;
gatindex = new int[nlocal];
masses = new double[nlocal];
charges = new double[nlocal];
update_gatindex = 1;
} else {
for (int i=0;i<nlocal;i++) {
if (gatindex[i]!=atom->tag[i]-1) {
update_gatindex=1;
for (int i = 0; i < nlocal; i++) {
if (gatindex[i] != atom->tag[i] - 1) {
update_gatindex = 1;
break;
}
}
}
MPI_Allreduce(MPI_IN_PLACE,&update_gatindex,1,MPI_INT,MPI_SUM,world);
MPI_Allreduce(MPI_IN_PLACE, &update_gatindex, 1, MPI_INT, MPI_SUM, world);
// In case it has been updated, rebuild the local mass/charges array
// and tell plumed about the change:
if (update_gatindex) {
for (int i=0;i<nlocal;i++) gatindex[i]=atom->tag[i]-1;
for (int i = 0; i < nlocal; i++) gatindex[i] = atom->tag[i] - 1;
// Get masses
if (atom->rmass_flag) {
for (int i=0;i<nlocal;i++) masses[i]=atom->rmass[i];
for (int i = 0; i < nlocal; i++) masses[i] = atom->rmass[i];
} else {
for (int i=0;i<nlocal;i++) masses[i]=atom->mass[atom->type[i]];
for (int i = 0; i < nlocal; i++) masses[i] = atom->mass[atom->type[i]];
}
// Get charges
if (atom->q_flag) {
for (int i=0;i<nlocal;i++) charges[i]=atom->q[i];
for (int i = 0; i < nlocal; i++) charges[i] = atom->q[i];
} else {
for (int i=0;i<nlocal;i++) charges[i]=0.0;
for (int i = 0; i < nlocal; i++) charges[i] = 0.0;
}
p->cmd("setAtomsNlocal",&nlocal);
p->cmd("setAtomsGatindex",gatindex);
p->cmd("setAtomsNlocal", &nlocal);
p->cmd("setAtomsGatindex", gatindex);
}
// set up local virial/box. plumed uses full 3x3 matrices
double plmd_virial[3][3];
for (int i=0;i<3;i++) for (int j=0;j<3;j++) plmd_virial[i][j]=0.0;
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++) plmd_virial[i][j] = 0.0;
double box[3][3];
for (int i=0;i<3;i++) for (int j=0;j<3;j++) box[i][j]=0.0;
box[0][0]=domain->h[0];
box[1][1]=domain->h[1];
box[2][2]=domain->h[2];
box[2][1]=domain->h[3];
box[2][0]=domain->h[4];
box[1][0]=domain->h[5];
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++) box[i][j] = 0.0;
box[0][0] = domain->h[0];
box[1][1] = domain->h[1];
box[2][2] = domain->h[2];
box[2][1] = domain->h[3];
box[2][0] = domain->h[4];
box[1][0] = domain->h[5];
// Make initial of virial of this fix zero
// The following line is very important, otherwise
// the compute pressure will include
for (int i=0;i<6;++i) virial[i] = 0.;
for (int i = 0; i < 6; ++i) virial[i] = 0.;
// local variable with timestep:
if (update->ntimestep > MAXSMALLINT)
error->all(FLERR,"Fix plumed can only handle up to 2.1 billion timesteps");
int step=int(update->ntimestep);
error->all(FLERR, "Fix plumed can only handle up to 2.1 billion timesteps");
int step = int(update->ntimestep);
// pass all pointers to plumed:
p->cmd("setStep",&step);
int plumedStopCondition=0;
p->cmd("setStopFlag",&plumedStopCondition);
p->cmd("setPositions",&atom->x[0][0]);
p->cmd("setBox",&box[0][0]);
p->cmd("setForces",&atom->f[0][0]);
p->cmd("setMasses",&masses[0]);
p->cmd("setCharges",&charges[0]);
p->cmd("getBias",&bias);
p->cmd("setStep", &step);
int plumedStopCondition = 0;
p->cmd("setStopFlag", &plumedStopCondition);
p->cmd("setPositions", &atom->x[0][0]);
p->cmd("setBox", &box[0][0]);
p->cmd("setForces", &atom->f[0][0]);
p->cmd("setMasses", &masses[0]);
p->cmd("setCharges", &charges[0]);
p->cmd("getBias", &bias);
// Pass virial to plumed
// If energy is needed plmd_virial is equal to LAMMPS' virial
// If energy is not needed plmd_virial is initialized to zero
// In the first case the virial will be rescaled and an extra term will be added
// In the latter case only an extra term will be added
p->cmd("setVirial",&plmd_virial[0][0]);
p->cmd("setVirial", &plmd_virial[0][0]);
p->cmd("prepareCalc");
plumedNeedsEnergy=0;
p->cmd("isEnergyNeeded",&plumedNeedsEnergy);
plumedNeedsEnergy = 0;
p->cmd("isEnergyNeeded", &plumedNeedsEnergy);
// Pass potential energy and virial if needed
double *virial_lmp;
if (plumedNeedsEnergy) {
// Error if tail corrections are included
if (force->pair && force->pair->tail_flag && comm->me == 0)
error->warning(FLERR,"Tail corrections to the pair potential included."
error->warning(FLERR,
"Tail corrections to the pair potential included."
" The energy cannot be biased correctly in this case."
" Remove the tail corrections by removing the"
" command: pair_modify tail yes");
@ -426,20 +419,18 @@ void FixPlumed::post_force(int /* vflag */)
// Divide energy by number of processes
// Plumed wants it this way
int nprocs;
MPI_Comm_size(world,&nprocs);
pot_energy /= nprocs;
p->cmd("setEnergy",&pot_energy);
pot_energy /= comm->nprocs;
p->cmd("setEnergy", &pot_energy);
// Compute pressure due to the virial (no kinetic energy term!)
c_press->compute_vector();
virial_lmp = c_press->vector;
// Check if pressure is finite
if (!std::isfinite(virial_lmp[0]) || !std::isfinite(virial_lmp[1])
|| !std::isfinite(virial_lmp[2]) || !std::isfinite(virial_lmp[3])
|| !std::isfinite(virial_lmp[4]) || !std::isfinite(virial_lmp[5]))
error->all(FLERR,"Non-numeric virial - Plumed cannot work with that");
if (!std::isfinite(virial_lmp[0]) || !std::isfinite(virial_lmp[1]) ||
!std::isfinite(virial_lmp[2]) || !std::isfinite(virial_lmp[3]) ||
!std::isfinite(virial_lmp[4]) || !std::isfinite(virial_lmp[5]))
error->all(FLERR, "Non-numeric virial - Plumed cannot work with that");
// Convert pressure to virial per number of MPI processes
// From now on all virials are divided by the number of MPI processes
@ -451,14 +442,14 @@ void FixPlumed::post_force(int /* vflag */)
} else {
inv_volume = 1.0 / (domain->xprd * domain->yprd);
}
for (int i=0;i<6;i++) virial_lmp[i] /= (inv_volume * nktv2p * nprocs);
for (int i = 0; i < 6; i++) virial_lmp[i] /= (inv_volume * nktv2p * comm->nprocs);
// Convert virial from lammps to plumed representation
plmd_virial[0][0]=-virial_lmp[0];
plmd_virial[1][1]=-virial_lmp[1];
plmd_virial[2][2]=-virial_lmp[2];
plmd_virial[0][1]=-virial_lmp[3];
plmd_virial[0][2]=-virial_lmp[4];
plmd_virial[1][2]=-virial_lmp[5];
plmd_virial[0][0] = -virial_lmp[0];
plmd_virial[1][1] = -virial_lmp[1];
plmd_virial[2][2] = -virial_lmp[2];
plmd_virial[0][1] = -virial_lmp[3];
plmd_virial[0][2] = -virial_lmp[4];
plmd_virial[1][2] = -virial_lmp[5];
}
// do the real calculation:
p->cmd("performCalc");
@ -472,12 +463,12 @@ void FixPlumed::post_force(int /* vflag */)
// The calculation of the pressure will be done by a compute pressure
// and will include this contribution.
if (plumedNeedsEnergy) {
virial[0] = -plmd_virial[0][0]-virial_lmp[0];
virial[1] = -plmd_virial[1][1]-virial_lmp[1];
virial[2] = -plmd_virial[2][2]-virial_lmp[2];
virial[3] = -plmd_virial[0][1]-virial_lmp[3];
virial[4] = -plmd_virial[0][2]-virial_lmp[4];
virial[5] = -plmd_virial[1][2]-virial_lmp[5];
virial[0] = -plmd_virial[0][0] - virial_lmp[0];
virial[1] = -plmd_virial[1][1] - virial_lmp[1];
virial[2] = -plmd_virial[2][2] - virial_lmp[2];
virial[3] = -plmd_virial[0][1] - virial_lmp[3];
virial[4] = -plmd_virial[0][2] - virial_lmp[4];
virial[5] = -plmd_virial[1][2] - virial_lmp[5];
} else {
virial[0] = -plmd_virial[0][0];
virial[1] = -plmd_virial[1][1];
@ -491,13 +482,13 @@ void FixPlumed::post_force(int /* vflag */)
// such that the virial and energy are tallied.
// This should be changed to something that triggers the
// calculation only if plumed needs it.
c_pe->addstep(update->ntimestep+1);
c_press->addstep(update->ntimestep+1);
c_pe->addstep(update->ntimestep + 1);
c_press->addstep(update->ntimestep + 1);
}
void FixPlumed::post_force_respa(int vflag, int ilevel, int /* iloop */)
{
if (ilevel == nlevels_respa-1) post_force(vflag);
if (ilevel == nlevels_respa - 1) post_force(vflag);
}
void FixPlumed::min_post_force(int vflag)
@ -507,7 +498,7 @@ void FixPlumed::min_post_force(int vflag)
void FixPlumed::reset_dt()
{
error->all(FLERR,"Cannot change the time step when fix plumed is active");
error->all(FLERR, "Fix plumed is not compatible with changing the timestep");
}
double FixPlumed::compute_scalar()
@ -517,35 +508,36 @@ double FixPlumed::compute_scalar()
int FixPlumed::modify_param(int narg, char **arg)
{
if (strcmp(arg[0],"pe") == 0) {
if (narg < 2) error->all(FLERR,"Illegal fix_modify command");
if (strcmp(arg[0], "pe") == 0) {
if (narg < 2) error->all(FLERR, "Fix_modify pe requires an argument");
modify->delete_compute(id_pe);
delete[] id_pe;
id_pe = utils::strdup(arg[1]);
c_pe = modify->get_compute_by_id(id_pe);
if (!c_pe) error->all(FLERR,"Could not find fix_modify potential energy ID {}", id_pe);
if (!c_pe) error->all(FLERR, "Could not find fix_modify potential energy ID {}", id_pe);
if (c_pe->peflag == 0)
error->all(FLERR,"Fix_modify compute pe ID {} does not compute potential energy", id_pe);
error->all(FLERR, "Fix_modify compute pe ID {} does not compute potential energy", id_pe);
if (c_pe->igroup != 0 && comm->me == 0)
error->warning(FLERR,"Potential energy compute {} for fix PLUMED is not for group all", id_pe);
error->warning(FLERR, "Potential energy compute {} for fix PLUMED is not for group all",
id_pe);
return 2;
} else if (strcmp(arg[0],"press") == 0) {
if (narg < 2) error->all(FLERR,"Illegal fix_modify command");
} else if (strcmp(arg[0], "press") == 0) {
if (narg < 2) error->all(FLERR, "Fix_modify press requires an argument");
modify->delete_compute(id_press);
delete[] id_press;
id_press = utils::strdup(arg[1]);
c_press = modify->get_compute_by_id(id_press);
if (!c_press) error->all(FLERR,"Could not find fix_modify compute pressure ID {}", id_press);
if (!c_press) error->all(FLERR, "Could not find fix_modify compute pressure ID {}", id_press);
if (c_press->pressflag == 0)
error->all(FLERR,"Fix_modify compute pressure ID {} does not compute pressure", id_press);
error->all(FLERR, "Fix_modify compute pressure ID {} does not compute pressure", id_press);
if (c_press->igroup != 0 && comm->me == 0)
error->warning(FLERR,"Virial for fix PLUMED is not for group all");
error->warning(FLERR, "Virial for fix PLUMED is not for group all");
return 2;
}
@ -554,5 +546,5 @@ int FixPlumed::modify_param(int narg, char **arg)
double FixPlumed::memory_usage()
{
return double((8+8+4)*atom->nlocal);
return double((8 + 8 + 4) * atom->nlocal);
}

View File

@ -844,7 +844,7 @@ void FixBondReact::init_list(int /*id*/, NeighList *ptr)
/* ----------------------------------------------------------------------
Identify all pairs of potentially reactive atoms for this time step.
This function is modified from LAMMPS fix bond/create.
This function is modified from LAMMPS' fix bond/create.
---------------------------------------------------------------------- */
void FixBondReact::post_integrate()

View File

@ -127,9 +127,9 @@ void ComputeRHEOSurface::compute_peratom()
size_t nbytes = nmax_store * sizeof(double);
memset(&divr[0], 0, nbytes);
memset(&rsurface[0], 0, nbytes);
memset(&nsurface[0][0], 0, dim * nbytes);
memset(&gradC[0][0], 0, dim * dim * nbytes);
memset(&B[0][0], 0, dim * dim * nbytes);
memset(&nsurface[0][0], 0, nbytes * dim);
memset(&gradC[0][0], 0, nbytes * dim * dim);
memset(&B[0][0], 0, nbytes * dim * dim);
// loop over neighbors to calculate the average orientation of neighbors
for (ii = 0; ii < inum; ii++) {

View File

@ -55,7 +55,7 @@ static const char cite_rheo_oxide[] =
FixRHEOOxidation::FixRHEOOxidation(LAMMPS *lmp, int narg, char **arg) :
Fix(lmp, narg, arg), compute_surface(nullptr), fix_rheo(nullptr)
{
if (narg != 6) error->all(FLERR, "Illegal fix command");
if (narg != 6) error->all(FLERR, "Illegal fix rheo/oxidation command");
force_reneighbor = 1;
next_reneighbor = -1;
@ -69,7 +69,7 @@ FixRHEOOxidation::FixRHEOOxidation(LAMMPS *lmp, int narg, char **arg) :
error->all(FLERR, "Illegal value {} for bond type in fix rheo/oxidation", btype);
rsurf = utils::numeric(FLERR, arg[5], false, lmp);
if (rsurf <= 0.0) error->all(FLERR, "Illegal surface distance {} in fix rheo/oxidation", cut);
if (rsurf <= 0.0) error->all(FLERR, "Illegal surface distance {} in fix rheo/oxidation", rsurf);
cutsq = cut * cut;

View File

@ -14,7 +14,7 @@
/* ----------------------------------------------------------------------
The SMTBQ code has been developed with the financial support of CNRS and
of the Regional Council of Burgundy (Convention 2010-9201AAO037S03129)
of the Regional Council of Burgundy (Convention No 2010-9201AAO037S03129)
Copyright (2015)
Universite de Bourgogne : Nicolas SALLES, Olivier POLITANO
@ -27,7 +27,7 @@
Contact: Nicolas Salles <nsalles33@gmail.com>
Olivier Politano <olivier.politano@u-bourgogne.fr>
Robert Tétot <robert.tetot@universite-paris-saclay.fr>
Robert Tetot <robert.tetot@universite-paris-saclay.fr>
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
@ -895,7 +895,7 @@ void PairSMTBQ::compute(int eflag, int vflag)
3 -> Short int. Ox-Ox
4 -> Short int. SMTB (repulsion)
5 -> Covalent energy SMTB
6 -> Somme des Q(i)²
6 -> Sum over Q(i)**2
------------------------------------------------------------------------- */
/* -------------- N-body forces Calcul --------------- */
@ -2980,9 +2980,6 @@ void PairSMTBQ::groupQEqAllParallel_QEq()
ngp = igp = 0; nelt[ngp] = 0;
// On prend un oxygène
// printf ("[me %d] On prend un oxygene\n",me);
for (ii = 0; ii < inum; ii++) {
i = ilist[ii] ; itype = map[type[i]];
if (itype != 0 || flag_QEq[i] == 0) continue;

View File

@ -292,7 +292,7 @@ double PairSPHLJ::init_one(int i, int j)
/* --------------------------------------------------------------------------------------------- */
/* Lennard-Jones EOS,
Francis H. Ree
"Analytic representation of thermodynamic data for the LennardJones fluid",
Analytic representation of thermodynamic data for the Lennard-Jones fluid,
Journal of Chemical Physics 73 pp. 5401-5403 (1980)
*/
@ -331,7 +331,7 @@ void PairSPHLJ::LJEOS2(double rho, double e, double cv, double *p, double *c)
/* ------------------------------------------------------------------------------ */
/* Jirí Kolafa, Ivo Nezbeda
/* Jiri Kolafa, Ivo Nezbeda
* "The Lennard-Jones fluid: an accurate analytic and theoretically-based equation of state",
* Fluid Phase Equilibria 100 pp. 1-34 (1994) */
/*double PairSPHLJ::LJEOS2(double rho, double e, double cv) {

View File

@ -16,7 +16,7 @@
Contributing authors: Julien Tranchida (SNL)
Please cite the related publication:
Bessarab, P. F., Uzdin, V. M., & Jónsson, H. (2015).
Bessarab, P. F., Uzdin, V. M., & Jonsson, H. (2015).
Method for finding mechanism and activation energy of magnetic transitions,
applied to skyrmion and antivortex annihilation.
Computer Physics Communications, 196, 335-347.

View File

@ -17,7 +17,7 @@
Julien Tranchida (SNL)
Please cite the related publication:
Ivanov, A. V., Uzdin, V. M., & Jónsson, H. (2019). Fast and Robust
Ivanov, A. V., Uzdin, V. M., & Jonsson, H. (2019). Fast and Robust
Algorithm for the Minimisation of the Energy of Spin Systems. arXiv
preprint arXiv:1904.02669.
------------------------------------------------------------------------- */

View File

@ -17,7 +17,7 @@
Julien Tranchida (SNL)
Please cite the related publication:
Ivanov, A. V., Uzdin, V. M., & Jónsson, H. (2019). Fast and Robust
Ivanov, A. V., Uzdin, V. M., & Jonsson, H. (2019). Fast and Robust
Algorithm for the Minimisation of the Energy of Spin Systems. arXiv
preprint arXiv:1904.02669.
------------------------------------------------------------------------- */

View File

@ -16,7 +16,7 @@
Contributing authors: Julien Tranchida (SNL)
Please cite the related publication:
Bessarab, P. F., Uzdin, V. M., & Jónsson, H. (2015).
Bessarab, P. F., Uzdin, V. M., & Jonsson, H. (2015).
Method for finding mechanism and activation energy of magnetic transitions,
applied to skyrmion and antivortex annihilation.
Computer Physics Communications, 196, 335-347.

View File

@ -1663,6 +1663,27 @@ void Domain::remap(double *x)
if (triclinic) lamda2x(coord,x);
}
/* ----------------------------------------------------------------------
remap all points into the periodic box no matter how far away
adjust 3 image flags encoded in image accordingly
resulting coord must satisfy lo <= coord < hi
MAX is important since coord - prd < lo can happen when coord = hi
for triclinic, point is converted to lamda coords (0-1) before doing remap
image = 10 bits for each dimension
increment/decrement in wrap-around fashion
------------------------------------------------------------------------- */
void Domain::remap_all()
{
double **x = atom->x;
imageint *image = atom->image;
int nlocal = atom->nlocal;
if (triclinic) x2lamda(nlocal);
for (int i = 0; i < nlocal; i++) remap(x[i],image[i]);
if (triclinic) lamda2x(nlocal);
}
/* ----------------------------------------------------------------------
remap xnew to be within half box length of xold
do it directly, not iteratively, in case is far away
@ -2188,6 +2209,19 @@ void Domain::lamda2x(int n)
}
}
void Domain::lamda2x(int n, int groupbit)
{
double **x = atom->x;
int *mask = atom->mask;
for (int i = 0; i < n; i++)
if (mask[i] & groupbit) {
x[i][0] = h[0]*x[i][0] + h[5]*x[i][1] + h[4]*x[i][2] + boxlo[0];
x[i][1] = h[1]*x[i][1] + h[3]*x[i][2] + boxlo[1];
x[i][2] = h[2]*x[i][2] + boxlo[2];
}
}
/* ----------------------------------------------------------------------
convert box coords to triclinic 0-1 lamda coords for all N atoms
lamda = H^-1 (x - x0)
@ -2209,6 +2243,25 @@ void Domain::x2lamda(int n)
}
}
void Domain::x2lamda(int n, int groupbit)
{
double delta[3];
double **x = atom->x;
int *mask = atom->mask;
for (int i = 0; i < n; i++)
if (mask[i] & groupbit) {
delta[0] = x[i][0] - boxlo[0];
delta[1] = x[i][1] - boxlo[1];
delta[2] = x[i][2] - boxlo[2];
x[i][0] = h_inv[0]*delta[0] + h_inv[5]*delta[1] + h_inv[4]*delta[2];
x[i][1] = h_inv[1]*delta[1] + h_inv[3]*delta[2];
x[i][2] = h_inv[2]*delta[2];
}
}
/* ----------------------------------------------------------------------
convert triclinic 0-1 lamda coords to box coords for one atom
x = H lamda + x0;

View File

@ -136,6 +136,7 @@ class Domain : protected Pointers {
void closest_image(const double *const, const double *const, double *const);
void remap(double *, imageint &);
void remap(double *);
void remap_all();
void remap_near(double *, double *);
void unmap_inv(double *x, imageint);
void unmap(double *, imageint);
@ -166,7 +167,9 @@ class Domain : protected Pointers {
void boundary_string(char *);
virtual void lamda2x(int);
virtual void lamda2x(int, int);
virtual void x2lamda(int);
virtual void x2lamda(int, int);
virtual void lamda2x(double *, double *);
virtual void x2lamda(double *, double *);
int inside(double *);

Some files were not shown because too many files have changed in this diff Show More