Merge branch 'develop' into dump-style-yaml

This commit is contained in:
Axel Kohlmeyer
2022-04-08 18:42:28 -04:00
71 changed files with 11869 additions and 3308 deletions

View File

@ -347,6 +347,10 @@ elseif(GPU_API STREQUAL "HIP")
target_link_libraries(gpu PRIVATE hip::host)
if(HIP_USE_DEVICE_SORT)
if(HIP_PLATFORM STREQUAL "amd")
# newer version of ROCm (5.1+) require c++14 for rocprim
set_property(TARGET gpu PROPERTY CXX_STANDARD 14)
endif()
# add hipCUB
target_include_directories(gpu PRIVATE ${HIP_ROOT_DIR}/../include)
target_compile_definitions(gpu PRIVATE -DUSE_HIP_DEVICE_SORT)

View File

@ -0,0 +1,15 @@
# preset that enables KOKKOS and selects SYCL compilation with OpenMP
# enabled as well. Also sets some performance related compiler flags.
set(PKG_KOKKOS ON CACHE BOOL "" FORCE)
set(Kokkos_ENABLE_SERIAL ON CACHE BOOL "" FORCE)
set(Kokkos_ENABLE_OPENMP ON CACHE BOOL "" FORCE)
set(Kokkos_ENABLE_CUDA OFF CACHE BOOL "" FORCE)
set(Kokkos_ENABLE_SYCL ON CACHE BOOL "" FORCE)
set(Kokkos_ARCH_MAXWELL50 on CACHE BOOL "" FORCE)
set(BUILD_OMP ON CACHE BOOL "" FORCE)
set(CMAKE_CXX_COMPILER clang++ CACHE STRING "" FORCE)
set(MPI_CXX_COMPILER "mpicxx" CACHE STRING "" FORCE)
set(CMAKE_CXX_STANDARD 17 CACHE STRING "" FORCE)
set(CMAKE_SHARED_LINKER_FLAGS "-Xsycl-target-frontend -O3" CACHE STRING "" FORCE)
set(CMAKE_TUNE_FLAGS "-fgpu-inline-threshold=100000 -Xsycl-target-frontend -O3 -Xsycl-target-frontend -ffp-contract=on -Wno-unknown-cuda-version" CACHE STRING "" FORCE)

View File

@ -638,13 +638,14 @@ This list was last updated for version 3.5.0 of the Kokkos library.
-D CMAKE_CXX_COMPILER=${HOME}/lammps/lib/kokkos/bin/nvcc_wrapper
To simplify compilation, three preset files are included in the
To simplify compilation, four preset files are included in the
``cmake/presets`` folder, ``kokkos-serial.cmake``,
``kokkos-openmp.cmake``, and ``kokkos-cuda.cmake``. They will
enable the KOKKOS package and enable some hardware choice. So to
compile with OpenMP host parallelization, CUDA device
parallelization (for GPUs with CC 5.0 and up) with some common
packages enabled, you can do the following:
``kokkos-openmp.cmake``, ``kokkos-cuda.cmake``, and
``kokkos-sycl.cmake``. They will enable the KOKKOS package and
enable some hardware choice. So to compile with OpenMP host
parallelization, CUDA device parallelization (for GPUs with CC 5.0
and up) with some common packages enabled, you can do the
following:
.. code-block:: bash

View File

@ -63,6 +63,7 @@ KOKKOS, o = OPENMP, t = OPT.
* :doc:`event/displace <compute_event_displace>`
* :doc:`fabric <compute_fabric>`
* :doc:`fep <compute_fep>`
* :doc:`fep/ta <compute_fep_ta>`
* :doc:`force/tally <compute_tally>`
* :doc:`fragment/atom <compute_cluster_atom>`
* :doc:`global/atom <compute_global_atom>`

View File

@ -88,12 +88,12 @@ OPT.
* :doc:`coul/tt <pair_coul_tt>`
* :doc:`coul/wolf (ko) <pair_coul>`
* :doc:`coul/wolf/cs <pair_cs>`
* :doc:`dpd (gio) <pair_dpd>`
* :doc:`dpd (giko) <pair_dpd>`
* :doc:`dpd/fdt <pair_dpd_fdt>`
* :doc:`dpd/ext <pair_dpd_ext>`
* :doc:`dpd/ext/tstat <pair_dpd_ext>`
* :doc:`dpd/ext (k) <pair_dpd_ext>`
* :doc:`dpd/ext/tstat (k) <pair_dpd_ext>`
* :doc:`dpd/fdt/energy (k) <pair_dpd_fdt>`
* :doc:`dpd/tstat (go) <pair_dpd>`
* :doc:`dpd/tstat (gko) <pair_dpd>`
* :doc:`dsmc <pair_dsmc>`
* :doc:`e3b <pair_e3b>`
* :doc:`drip <pair_drip>`

View File

@ -82,7 +82,7 @@ This data can be extracted and parsed from a log file using python with:
try:
from yaml import CSafeLoader as Loader, CSafeDumper as Dumper
except ImportError:
from yaml import SafeLoader, SafeDumper
from yaml import SafeLoader as Loader, SafeDumper as Dumper
docs = ""
with open("log.lammps") as f:

View File

@ -208,7 +208,8 @@ The individual style names on the :doc:`Commands compute <Commands_compute>` pag
* :doc:`erotate/sphere/atom <compute_erotate_sphere_atom>` - rotational energy for each spherical particle
* :doc:`event/displace <compute_event_displace>` - detect event on atom displacement
* :doc:`fabric <compute_fabric>` - calculates fabric tensors from pair interactions
* :doc:`fep <compute_fep>` -
* :doc:`fep <compute_fep>` - compute free energies for alchemical transformation from perturbation theory
* :doc:`fep/ta <compute_fep_ta>` - compute free energies for a test area perturbation
* :doc:`force/tally <compute_tally>` - force between two groups of atoms via the tally callback mechanism
* :doc:`fragment/atom <compute_cluster_atom>` - fragment ID for each atom
* :doc:`global/atom <compute_global_atom>` -

View File

@ -0,0 +1,99 @@
.. index:: compute fep/ta
compute fep/ta command
======================
Syntax
""""""
.. parsed-literal::
compute ID group-ID fep/ta temp plane scale_factor keyword value ...
* ID, group-ID are documented in the :doc:`compute <compute>` command
* fep/ta = name of this compute command
* temp = external temperature (as specified for constant-temperature run)
* plane = *xy* or *xz* or *yz*
* scale_factor = multiplicative factor for change in plane area
* zero or more keyword/value pairs may be appended
* keyword = *tail*
.. parsed-literal::
*tail* value = *no* or *yes*
*no* = ignore tail correction to pair energies (usually small in fep)
*yes* = include tail correction to pair energies
Examples
""""""""
.. code-block:: LAMMPS
compute 1 all fep/ta 298 xy 1.0005
Description
"""""""""""
Define a computation that calculates the change in the free energy due
to a test-area (TA) perturbation :ref:`(Gloor) <Gloor>`. The test-area
approach can be used to determine the interfacial tension of the system
in a single simulation:
.. math::
\gamma = \lim_{\Delta \mathcal{A} \to 0} \left( \frac{\Delta A_{0 \to 1 }}{\Delta \mathcal{A}}\right)_{N,V,T}
= - \frac{kT}{\Delta \mathcal{A}} \ln \left< \exp(-(U_1 - U_0)/kT) \right>_0
During the perturbation, both axes of *plane* are scaled by multiplying
:math:`\sqrt{scale\_factor}`, while the other axis divided by
*scale_factor* such that the overall volume of the system is maintained.
The *tail* keyword controls the calculation of the tail correction to
"van der Waals" pair energies beyond the cutoff, if this has been
activated via the :doc:`pair_modify <pair_modify>` command. If the
perturbation is small, the tail contribution to the energy difference
between the reference and perturbed systems should be negligible.
----------
Output info
"""""""""""
This compute calculates a global vector of length 3 which contains the
energy difference ( :math:`U_1-U_0` ) as c_ID[1], the Boltzmann factor
:math:`\exp(-(U_1-U_0)/kT)`, as c_ID[2] and the change in the *plane*
area :math:`\Delta \mathcal{A}` as c_ID[3]. :math:`U_1` is the potential
energy of the perturbed state and :math:`U_0` is the potential energy of
the reference state. The energies include kspace terms if these are
used in the simulation.
These output results can be used by any command that uses a global
scalar or vector from a compute as input. See the :doc:`Howto output
<Howto_output>` page for an overview of LAMMPS output options. For
example, the computed values can be averaged using :doc:`fix ave/time
<fix_ave_time>`.
Restrictions
""""""""""""
Constraints, like fix shake, may lead to incorrect values for energy difference.
This compute is distributed as the FEP package. It is only enabled if
LAMMPS was built with that package. See the :doc:`Build package
<Build_package>` page for more info.
Related commands
""""""""""""""""
:doc:`compute fep <compute_fep>`
Default
"""""""
The option defaults are *tail* = *no*\ .
----------
.. _Gloor:
**(Gloor)** Gloor, J Chem Phys, 123, 134703 (2005)

View File

@ -1,20 +1,22 @@
.. index:: pair_style dpd
.. index:: pair_style dpd/gpu
.. index:: pair_style dpd/intel
.. index:: pair_style dpd/kk
.. index:: pair_style dpd/omp
.. index:: pair_style dpd/tstat
.. index:: pair_style dpd/tstat/gpu
.. index:: pair_style dpd/tstat/kk
.. index:: pair_style dpd/tstat/omp
pair_style dpd command
======================
Accelerator Variants: *dpd/gpu*, *dpd/intel*, *dpd/omp*
Accelerator Variants: *dpd/gpu*, *dpd/intel*, *dpd/kk*, *dpd/omp*
pair_style dpd/tstat command
============================
Accelerator Variants: *dpd/tstat/gpu*, *dpd/tstat/omp*
Accelerator Variants: *dpd/tstat/gpu*, *dpd/tstat/kk*, *dpd/tstat/omp*
Syntax
""""""

View File

@ -1,12 +1,18 @@
.. index:: pair_style dpd/ext
.. index:: pair_style dpd/ext/kk
.. index:: pair_style dpd/ext/tstat
.. index:: pair_style dpd/ext/tstat/kk
pair_style dpd/ext command
==========================
Accelerator Variants: dpd/ext/kk
pair_style dpd/ext/tstat command
================================
Accelerator Variants: dpd/ext/tstat/kk
Syntax
""""""
@ -137,6 +143,10 @@ except that A is not included.
----------
.. include:: accel_styles.rst
----------
**Mixing, shift, table, tail correction, restart, rRESPA info**\ :

View File

@ -1180,6 +1180,7 @@ Gladky
gld
gle
globbing
Gloor
Glosli
Glotzer
gmail
@ -1428,6 +1429,7 @@ interal
interatomic
Interatomic
interconvert
interfacial
interial
interlayer
intermolecular

View File

@ -1,10 +1,16 @@
Examples for Extended Dissipative Particle Dynamics (DPD)
---------------------------------------------------------
This directory contains examples for extended DPD simulations
Examples for Basic Dissipative Particle Dynamics (DPD)
------------------------------------------------------
This directory contains examples for DPD simulations using
pair styles from the DPD-BASIC package.
1) 'dpdext' - test case (DPD fluid) for 'dpdext' pair style (in.dpdext) and an initial
configuration (dpdext.data)
1) 'dpd' - simple example (DPD fluid) for 'dpd' pair style (in.dpd)
2) 'dpdext_tstat' - test case (coarse-grained SPC/E water) for 'dpdext/tstat' pair style
(in.cg_spce), an initial configuration (dpdext.data) and tabulated potential
2) 'dpd_tstat' - coarse-grained SPC/E water example for 'dpd/tstat' pair style
(in.dpd_tstat), an initial configuration (dpdext.data) and tabulated potential
(cg_spce_table.pot) obtained by bottom-up coarse-graining of the atomistic SPC/E water.
3) 'dpdext' - simple example (DPD fluid) for 'dpd/ext' pair style (in.dpdext)
4) 'dpdext_tstat' - coarse-grained SPC/E water example for 'dpd/ext/tstat' pair style
(in.dpdext_tstat), an initial configuration (dpdext.data) and tabulated potential
(cg_spce_table.pot) obtained by bottom-up coarse-graining of the atomistic SPC/E water.

View File

@ -0,0 +1,43 @@
# DPD Fluid
variable T equal 1.0
variable rc equal 1.0
variable rcD equal 1.2
units lj
boundary p p p
atom_style atomic
dimension 3
newton on
comm_modify vel yes
### create box and configuration
variable L equal 5.0
lattice fcc 3.0
region simBox block 0 ${L} 0 ${L} 0 ${L}
create_box 2 simBox
#create_atoms 1 region simBox
create_atoms 1 random 100 12456 simBox
create_atoms 2 random 100 13245 simBox
mass 1 1.0
mass 2 2.0
###
pair_style dpd ${T} ${rc} 3854262
pair_coeff 1 1 25.0 4.5 1.2
pair_coeff 1 2 25.1 4.51 1.21
pair_coeff 2 2 25.2 4.52 1.22
timestep 0.01
run_style verlet
velocity all create ${T} 68768932
thermo_style custom step time temp press
thermo 100
fix 1 all nve
run 5000

View File

@ -0,0 +1,154 @@
LAMMPS (24 Mar 2022)
OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98)
using 1 OpenMP thread(s) per MPI task
# DPD Fluid
variable T equal 1.0
variable rc equal 1.0
variable rcD equal 1.2
units lj
boundary p p p
atom_style atomic
dimension 3
newton on
comm_modify vel yes
### create box and configuration
variable L equal 5.0
lattice fcc 3.0
Lattice spacing in x,y,z = 1.1006424 1.1006424 1.1006424
region simBox block 0 ${L} 0 ${L} 0 ${L}
region simBox block 0 5 0 ${L} 0 ${L}
region simBox block 0 5 0 5 0 ${L}
region simBox block 0 5 0 5 0 5
create_box 2 simBox
Created orthogonal box = (0 0 0) to (5.5032121 5.5032121 5.5032121)
1 by 1 by 1 MPI processor grid
#create_atoms 1 region simBox
create_atoms 1 random 100 12456 simBox
Created 100 atoms
using lattice units in orthogonal box = (0 0 0) to (5.5032121 5.5032121 5.5032121)
create_atoms CPU = 0.000 seconds
create_atoms 2 random 100 13245 simBox
Created 100 atoms
using lattice units in orthogonal box = (0 0 0) to (5.5032121 5.5032121 5.5032121)
create_atoms CPU = 0.000 seconds
mass 1 1.0
mass 2 2.0
###
pair_style dpd ${T} ${rc} 3854262
pair_style dpd 1 ${rc} 3854262
pair_style dpd 1 1 3854262
pair_coeff 1 1 25.0 4.5 1.2
pair_coeff 1 2 25.1 4.51 1.21
pair_coeff 2 2 25.2 4.52 1.22
timestep 0.01
run_style verlet
velocity all create ${T} 68768932
velocity all create 1 68768932
thermo_style custom step time temp press
thermo 100
fix 1 all nve
run 5000
generated 0 of 1 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update every 1 steps, delay 10 steps, check yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 1.52
ghost atom cutoff = 1.52
binsize = 0.76, bins = 8 8 8
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair dpd, perpetual
attributes: half, newton on
pair build: half/bin/atomonly/newton
stencil: half/bin/3d
bin: standard
Per MPI rank memory allocation (min/avg/max) = 3.083 | 3.083 | 3.083 Mbytes
Step Time Temp Press
0 0 1 9.5226009
100 1 1.9913643 9.2036029
200 2 1.6321732 9.2787957
300 3 1.3533438 8.3081433
400 4 1.2125884 8.0809065
500 5 1.0682216 8.0877925
600 6 0.99100473 8.1100319
700 7 0.99731243 7.8225195
800 8 1.0597693 7.8368218
900 9 0.99038588 7.9450569
1000 10 1.077129 7.5857015
1100 11 0.99070336 7.5138128
1200 12 1.013894 7.2794857
1300 13 1.0433203 7.7439871
1400 14 1.0285528 7.5662235
1500 15 0.99180601 7.8376313
1600 16 0.98059071 8.0243735
1700 17 1.0070947 8.3186893
1800 18 0.99507569 7.0786393
1900 19 1.0040168 7.8120389
2000 20 0.98636164 7.472185
2100 21 0.95811165 7.7085985
2200 22 0.93568327 6.9424246
2300 23 0.92804144 8.1239435
2400 24 0.94940276 7.6108611
2500 25 1.0535153 8.0772721
2600 26 1.0902144 7.5609768
2700 27 1.0737336 7.8706755
2800 28 0.93074581 7.3699993
2900 29 1.0440705 7.6454988
3000 30 0.93868164 7.841168
3100 31 1.0172025 7.6856163
3200 32 1.0405368 7.5325735
3300 33 0.96721201 7.8262809
3400 34 0.90430758 7.1693921
3500 35 0.89938433 7.865845
3600 36 0.9907178 7.3462971
3700 37 1.0311879 7.8876401
3800 38 0.98339132 7.3413929
3900 39 1.2111264 8.0968408
4000 40 1.062489 7.7315959
4100 41 0.94737492 7.3386028
4200 42 1.0453816 8.2017304
4300 43 0.97024897 7.7379624
4400 44 0.9553861 7.8047635
4500 45 1.043252 7.7486215
4600 46 0.98611474 8.1237053
4700 47 0.98624285 8.5801642
4800 48 0.97176754 7.1540299
4900 49 1.0165401 7.3853841
5000 50 0.88359115 7.5541592
Loop time of 0.359916 on 1 procs for 5000 steps with 200 atoms
Performance: 12002788.048 tau/day, 13892.116 timesteps/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.24932 | 0.24932 | 0.24932 | 0.0 | 69.27
Neigh | 0.068726 | 0.068726 | 0.068726 | 0.0 | 19.10
Comm | 0.028691 | 0.028691 | 0.028691 | 0.0 | 7.97
Output | 0.00066318 | 0.00066318 | 0.00066318 | 0.0 | 0.18
Modify | 0.0078062 | 0.0078062 | 0.0078062 | 0.0 | 2.17
Other | | 0.004713 | | | 1.31
Nlocal: 200 ave 200 max 200 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 546 ave 546 max 546 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 1649 ave 1649 max 1649 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 1649
Ave neighs/atom = 8.245
Neighbor list builds = 500
Dangerous builds = 500
Total wall time: 0:00:00

View File

@ -0,0 +1,154 @@
LAMMPS (24 Mar 2022)
OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98)
using 1 OpenMP thread(s) per MPI task
# DPD Fluid
variable T equal 1.0
variable rc equal 1.0
variable rcD equal 1.2
units lj
boundary p p p
atom_style atomic
dimension 3
newton on
comm_modify vel yes
### create box and configuration
variable L equal 5.0
lattice fcc 3.0
Lattice spacing in x,y,z = 1.1006424 1.1006424 1.1006424
region simBox block 0 ${L} 0 ${L} 0 ${L}
region simBox block 0 5 0 ${L} 0 ${L}
region simBox block 0 5 0 5 0 ${L}
region simBox block 0 5 0 5 0 5
create_box 2 simBox
Created orthogonal box = (0 0 0) to (5.5032121 5.5032121 5.5032121)
1 by 2 by 2 MPI processor grid
#create_atoms 1 region simBox
create_atoms 1 random 100 12456 simBox
Created 100 atoms
using lattice units in orthogonal box = (0 0 0) to (5.5032121 5.5032121 5.5032121)
create_atoms CPU = 0.000 seconds
create_atoms 2 random 100 13245 simBox
Created 100 atoms
using lattice units in orthogonal box = (0 0 0) to (5.5032121 5.5032121 5.5032121)
create_atoms CPU = 0.000 seconds
mass 1 1.0
mass 2 2.0
###
pair_style dpd ${T} ${rc} 3854262
pair_style dpd 1 ${rc} 3854262
pair_style dpd 1 1 3854262
pair_coeff 1 1 25.0 4.5 1.2
pair_coeff 1 2 25.1 4.51 1.21
pair_coeff 2 2 25.2 4.52 1.22
timestep 0.01
run_style verlet
velocity all create ${T} 68768932
velocity all create 1 68768932
thermo_style custom step time temp press
thermo 100
fix 1 all nve
run 5000
generated 0 of 1 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update every 1 steps, delay 10 steps, check yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 1.52
ghost atom cutoff = 1.52
binsize = 0.76, bins = 8 8 8
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair dpd, perpetual
attributes: half, newton on
pair build: half/bin/atomonly/newton
stencil: half/bin/3d
bin: standard
Per MPI rank memory allocation (min/avg/max) = 3.064 | 3.064 | 3.064 Mbytes
Step Time Temp Press
0 0 1 8.603339
100 1 1.8691059 8.9058297
200 2 1.4500635 8.7420141
300 3 1.3089453 8.3985981
400 4 1.1647803 8.2948808
500 5 1.1399445 7.7421817
600 6 1.0297918 7.2040397
700 7 1.046713 7.6115758
800 8 0.93523712 7.6885563
900 9 0.94701493 7.9662712
1000 10 0.99302416 7.7606189
1100 11 0.98975674 7.5207427
1200 12 0.98661662 7.3565222
1300 13 1.0289377 7.6110453
1400 14 0.9982501 7.8065701
1500 15 1.0043888 7.3957185
1600 16 1.0175816 7.7885955
1700 17 1.0252117 7.5076258
1800 18 1.0275139 8.1052823
1900 19 1.0021054 7.0385989
2000 20 1.0489009 7.7138149
2100 21 0.91250488 7.3540839
2200 22 0.92470996 7.9600233
2300 23 0.96932725 7.3106045
2400 24 0.93443088 7.4594635
2500 25 0.95596038 7.2544715
2600 26 1.0368594 7.6229263
2700 27 0.94639332 7.4869636
2800 28 0.99917354 7.9806636
2900 29 0.95048071 7.0086404
3000 30 0.95226181 7.7807205
3100 31 0.95864429 7.8059442
3200 32 0.85678761 7.3416027
3300 33 0.95951096 7.3467158
3400 34 0.97665772 8.2900991
3500 35 0.92885927 7.5385993
3600 36 1.0455015 8.0627999
3700 37 0.91911809 8.0371736
3800 38 0.92022241 7.5803999
3900 39 1.0465522 7.6920189
4000 40 0.98568475 7.4529825
4100 41 1.0389372 7.2273346
4200 42 1.0257545 7.6081878
4300 43 1.0937573 8.2158237
4400 44 1.0908817 7.5021567
4500 45 1.0482874 7.5924368
4600 46 1.1468439 8.0285157
4700 47 1.119683 8.3365123
4800 48 1.0963877 7.51772
4900 49 1.0766762 7.3137035
5000 50 1.0359203 7.7354572
Loop time of 0.148597 on 4 procs for 5000 steps with 200 atoms
Performance: 29071936.422 tau/day, 33648.075 timesteps/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.059602 | 0.063397 | 0.068622 | 1.3 | 42.66
Neigh | 0.017747 | 0.018193 | 0.018698 | 0.3 | 12.24
Comm | 0.055145 | 0.061014 | 0.065369 | 1.5 | 41.06
Output | 0.00042708 | 0.00050725 | 0.00071024 | 0.0 | 0.34
Modify | 0.0023494 | 0.002532 | 0.0026434 | 0.2 | 1.70
Other | | 0.002953 | | | 1.99
Nlocal: 50 ave 52 max 48 min
Histogram: 1 0 1 0 0 0 0 1 0 1
Nghost: 292.75 ave 299 max 287 min
Histogram: 1 0 1 0 0 0 1 0 0 1
Neighs: 413.5 ave 441 max 399 min
Histogram: 2 0 0 1 0 0 0 0 0 1
Total # of neighbors = 1654
Ave neighs/atom = 8.27
Neighbor list builds = 500
Dangerous builds = 500
Total wall time: 0:00:00

View File

@ -1,4 +1,4 @@
DPD Fluid
Coarse-Grained SPC/E Water
2180 atoms

View File

@ -0,0 +1,354 @@
VOTCA
N 351 R 2.0 9.0
1 2.000000E+00 2.190202E+01 7.229762E+01
2 2.020000E+00 2.048957E+01 6.887333E+01
3 2.040000E+00 1.915004E+01 6.500604E+01
4 2.060000E+00 1.789228E+01 6.069573E+01
5 2.080000E+00 1.672516E+01 5.594242E+01
6 2.100000E+00 1.565754E+01 5.074609E+01
7 2.120000E+00 1.467088E+01 4.787307E+01
8 2.140000E+00 1.374450E+01 4.471740E+01
9 2.160000E+00 1.288407E+01 4.127908E+01
10 2.180000E+00 1.209522E+01 3.755811E+01
11 2.200000E+00 1.138363E+01 3.355449E+01
12 2.220000E+00 1.072913E+01 3.188695E+01
13 2.240000E+00 1.010845E+01 3.017359E+01
14 2.260000E+00 9.522496E+00 2.841440E+01
15 2.280000E+00 8.972182E+00 2.660938E+01
16 2.300000E+00 8.458426E+00 2.475854E+01
17 2.320000E+00 8.014166E+00 2.006698E+01
18 2.340000E+00 7.639767E+00 1.777244E+01
19 2.360000E+00 7.287288E+00 1.787493E+01
20 2.380000E+00 6.908790E+00 2.037445E+01
21 2.400000E+00 6.456330E+00 2.527099E+01
22 2.420000E+00 5.858025E+00 3.384695E+01
23 2.440000E+00 5.130955E+00 3.814748E+01
24 2.460000E+00 4.360629E+00 3.817257E+01
25 2.480000E+00 3.632555E+00 3.392224E+01
26 2.500000E+00 3.032242E+00 2.539647E+01
27 2.520000E+00 2.547993E+00 2.297813E+01
28 2.540000E+00 2.115131E+00 2.025763E+01
29 2.560000E+00 1.739702E+00 1.723497E+01
30 2.580000E+00 1.427747E+00 1.391013E+01
31 2.600000E+00 1.185311E+00 1.028314E+01
32 2.620000E+00 9.860176E-01 9.578245E+00
33 2.640000E+00 8.048986E-01 8.465708E+00
34 2.660000E+00 6.501069E-01 6.945526E+00
35 2.680000E+00 5.297952E-01 5.017699E+00
36 2.700000E+00 4.521166E-01 2.682227E+00
37 2.720000E+00 3.986447E-01 2.615311E+00
38 2.740000E+00 3.494900E-01 2.250522E+00
39 2.760000E+00 3.106097E-01 1.587859E+00
40 2.780000E+00 2.879614E-01 6.273237E-01
41 2.800000E+00 2.875026E-01 -6.310851E-01
42 2.820000E+00 3.002733E-01 -6.543549E-01
43 2.840000E+00 3.140112E-01 -7.277911E-01
44 2.860000E+00 3.297194E-01 -8.513935E-01
45 2.880000E+00 3.484014E-01 -1.025162E+00
46 2.900000E+00 3.710604E-01 -1.249097E+00
47 2.920000E+00 3.974884E-01 -1.380483E+00
48 2.940000E+00 4.257507E-01 -1.432530E+00
49 2.960000E+00 4.542607E-01 -1.405240E+00
50 2.980000E+00 4.814314E-01 -1.298611E+00
51 3.000000E+00 5.056762E-01 -1.112645E+00
52 3.020000E+00 5.266502E-01 -9.832894E-01
53 3.040000E+00 5.449492E-01 -8.451544E-01
54 3.060000E+00 5.603978E-01 -6.982396E-01
55 3.080000E+00 5.728203E-01 -5.425450E-01
56 3.100000E+00 5.820411E-01 -3.780706E-01
57 3.120000E+00 5.882509E-01 -2.409307E-01
58 3.140000E+00 5.915991E-01 -9.190908E-02
59 3.160000E+00 5.918481E-01 6.899430E-02
60 3.180000E+00 5.887601E-01 2.417794E-01
61 3.200000E+00 5.820977E-01 4.264463E-01
62 3.220000E+00 5.733491E-01 4.528343E-01
63 3.240000E+00 5.638075E-01 5.057356E-01
64 3.260000E+00 5.529429E-01 5.851503E-01
65 3.280000E+00 5.402248E-01 6.910784E-01
66 3.300000E+00 5.251230E-01 8.235199E-01
67 3.320000E+00 5.086524E-01 8.236482E-01
68 3.340000E+00 4.921725E-01 8.244583E-01
69 3.360000E+00 4.756696E-01 8.259503E-01
70 3.380000E+00 4.591299E-01 8.281240E-01
71 3.400000E+00 4.425400E-01 8.309796E-01
72 3.420000E+00 4.259181E-01 8.311861E-01
73 3.440000E+00 4.092937E-01 8.312292E-01
74 3.460000E+00 3.926700E-01 8.311089E-01
75 3.480000E+00 3.760504E-01 8.308252E-01
76 3.500000E+00 3.594381E-01 8.303781E-01
77 3.520000E+00 3.428394E-01 8.295412E-01
78 3.540000E+00 3.262547E-01 8.289646E-01
79 3.560000E+00 3.096790E-01 8.286483E-01
80 3.580000E+00 2.931071E-01 8.285923E-01
81 3.600000E+00 2.765336E-01 8.287966E-01
82 3.620000E+00 2.599901E-01 8.254306E-01
83 3.640000E+00 2.435212E-01 8.213359E-01
84 3.660000E+00 2.271415E-01 8.165124E-01
85 3.680000E+00 2.108656E-01 8.109603E-01
86 3.700000E+00 1.947080E-01 8.046794E-01
87 3.720000E+00 1.790243E-01 7.653050E-01
88 3.740000E+00 1.640312E-01 7.356166E-01
89 3.760000E+00 1.495351E-01 7.156143E-01
90 3.780000E+00 1.353421E-01 7.052980E-01
91 3.800000E+00 1.212586E-01 7.046676E-01
92 3.820000E+00 1.072429E-01 6.965706E-01
93 3.840000E+00 9.340878E-02 6.865180E-01
94 3.860000E+00 7.979524E-02 6.745098E-01
95 3.880000E+00 6.644142E-02 6.605462E-01
96 3.900000E+00 5.338643E-02 6.446270E-01
97 3.920000E+00 4.067486E-02 6.268536E-01
98 3.940000E+00 2.829935E-02 6.110218E-01
99 3.960000E+00 1.622105E-02 5.971317E-01
100 3.980000E+00 4.401131E-03 5.851833E-01
101 4.000000E+00 -7.199230E-03 5.751764E-01
102 4.020000E+00 -1.856170E-02 5.611971E-01
103 4.040000E+00 -2.965216E-02 5.479743E-01
104 4.060000E+00 -4.048572E-02 5.355079E-01
105 4.080000E+00 -5.107752E-02 5.237981E-01
106 4.100000E+00 -6.144268E-02 5.128447E-01
107 4.120000E+00 -7.151117E-02 4.939504E-01
108 4.140000E+00 -8.119856E-02 4.747353E-01
109 4.160000E+00 -9.049845E-02 4.551994E-01
110 4.180000E+00 -9.940440E-02 4.353427E-01
111 4.200000E+00 -1.079100E-01 4.151651E-01
112 4.220000E+00 -1.159565E-01 3.900062E-01
113 4.240000E+00 -1.235312E-01 3.679865E-01
114 4.260000E+00 -1.306969E-01 3.491061E-01
115 4.280000E+00 -1.375164E-01 3.333651E-01
116 4.300000E+00 -1.440524E-01 3.207633E-01
117 4.320000E+00 -1.503014E-01 3.040292E-01
118 4.340000E+00 -1.562092E-01 2.866389E-01
119 4.360000E+00 -1.617626E-01 2.685925E-01
120 4.380000E+00 -1.669485E-01 2.498899E-01
121 4.400000E+00 -1.717538E-01 2.305311E-01
122 4.420000E+00 -1.760941E-01 2.036400E-01
123 4.440000E+00 -1.799054E-01 1.776469E-01
124 4.460000E+00 -1.832059E-01 1.525518E-01
125 4.480000E+00 -1.860135E-01 1.283546E-01
126 4.500000E+00 -1.883461E-01 1.050554E-01
127 4.520000E+00 -1.902569E-01 8.558005E-02
128 4.540000E+00 -1.917515E-01 6.344105E-02
129 4.560000E+00 -1.927768E-01 3.863842E-02
130 4.580000E+00 -1.932793E-01 1.117216E-02
131 4.600000E+00 -1.932059E-01 -1.895774E-02
132 4.620000E+00 -1.926829E-01 -3.331832E-02
133 4.640000E+00 -1.918741E-01 -4.753697E-02
134 4.660000E+00 -1.907824E-01 -6.161370E-02
135 4.680000E+00 -1.894105E-01 -7.554851E-02
136 4.700000E+00 -1.877614E-01 -8.934140E-02
137 4.720000E+00 -1.859159E-01 -9.580751E-02
138 4.740000E+00 -1.839049E-01 -1.058976E-01
139 4.760000E+00 -1.816559E-01 -1.196116E-01
140 4.780000E+00 -1.790963E-01 -1.369495E-01
141 4.800000E+00 -1.761537E-01 -1.579114E-01
142 4.820000E+00 -1.728280E-01 -1.744216E-01
143 4.840000E+00 -1.691864E-01 -1.895036E-01
144 4.860000E+00 -1.652574E-01 -2.031575E-01
145 4.880000E+00 -1.610696E-01 -2.153832E-01
146 4.900000E+00 -1.566516E-01 -2.261808E-01
147 4.920000E+00 -1.521084E-01 -2.290714E-01
148 4.940000E+00 -1.474515E-01 -2.375453E-01
149 4.960000E+00 -1.425693E-01 -2.516026E-01
150 4.980000E+00 -1.373502E-01 -2.712432E-01
151 5.000000E+00 -1.316824E-01 -2.964672E-01
152 5.020000E+00 -1.257009E-01 -3.016666E-01
153 5.040000E+00 -1.196162E-01 -3.067953E-01
154 5.060000E+00 -1.134296E-01 -3.118535E-01
155 5.080000E+00 -1.071425E-01 -3.168409E-01
156 5.100000E+00 -1.007564E-01 -3.217577E-01
157 5.120000E+00 -9.430843E-02 -3.230025E-01
158 5.140000E+00 -8.783782E-02 -3.240216E-01
159 5.160000E+00 -8.134907E-02 -3.248150E-01
160 5.180000E+00 -7.484672E-02 -3.253827E-01
161 5.200000E+00 -6.833527E-02 -3.257248E-01
162 5.220000E+00 -6.171989E-02 -3.350608E-01
163 5.240000E+00 -5.496291E-02 -3.398853E-01
164 5.260000E+00 -4.815456E-02 -3.401983E-01
165 5.280000E+00 -4.138506E-02 -3.359997E-01
166 5.300000E+00 -3.474465E-02 -3.272895E-01
167 5.320000E+00 -2.866480E-02 -2.819209E-01
168 5.340000E+00 -2.341879E-02 -2.439062E-01
169 5.360000E+00 -1.885953E-02 -2.132454E-01
170 5.380000E+00 -1.483994E-02 -1.899386E-01
171 5.400000E+00 -1.121296E-02 -1.739857E-01
172 5.420000E+00 -7.974056E-03 -1.497398E-01
173 5.440000E+00 -5.229953E-03 -1.245058E-01
174 5.460000E+00 -3.000413E-03 -9.828350E-02
175 5.480000E+00 -1.305201E-03 -7.107305E-02
176 5.500000E+00 -1.640790E-04 -4.287441E-02
177 5.520000E+00 6.371635E-04 -3.612657E-02
178 5.540000E+00 1.236053E-03 -2.263906E-02
179 5.560000E+00 1.497795E-03 -2.411882E-03
180 5.580000E+00 1.287597E-03 2.455496E-02
181 5.600000E+00 4.706651E-04 5.826147E-02
182 5.620000E+00 -7.026386E-04 5.910929E-02
183 5.640000E+00 -1.895322E-03 6.019943E-02
184 5.660000E+00 -3.112231E-03 6.153190E-02
185 5.680000E+00 -4.358213E-03 6.310668E-02
186 5.700000E+00 -5.638114E-03 6.492378E-02
187 5.720000E+00 -6.949688E-03 6.610584E-02
188 5.740000E+00 -8.277238E-03 6.652145E-02
189 5.760000E+00 -9.605436E-03 6.617062E-02
190 5.780000E+00 -1.091895E-02 6.505335E-02
191 5.800000E+00 -1.220246E-02 6.316963E-02
192 5.820000E+00 -1.341489E-02 5.820182E-02
193 5.840000E+00 -1.453566E-02 5.400257E-02
194 5.860000E+00 -1.558012E-02 5.057189E-02
195 5.880000E+00 -1.656366E-02 4.790978E-02
196 5.900000E+00 -1.750164E-02 4.601622E-02
197 5.920000E+00 -1.840088E-02 4.358369E-02
198 5.940000E+00 -1.923199E-02 3.920163E-02
199 5.960000E+00 -1.995595E-02 3.287003E-02
200 5.980000E+00 -2.053379E-02 2.458889E-02
201 6.000000E+00 -2.092651E-02 1.435822E-02
202 6.020000E+00 -2.120502E-02 1.352840E-02
203 6.040000E+00 -2.146907E-02 1.291186E-02
204 6.060000E+00 -2.172292E-02 1.250861E-02
205 6.080000E+00 -2.197084E-02 1.231865E-02
206 6.100000E+00 -2.221709E-02 1.234198E-02
207 6.120000E+00 -2.246474E-02 1.237271E-02
208 6.140000E+00 -2.270998E-02 1.210114E-02
209 6.160000E+00 -2.294677E-02 1.152726E-02
210 6.180000E+00 -2.316905E-02 1.065107E-02
211 6.200000E+00 -2.337079E-02 9.472569E-03
212 6.220000E+00 -2.332237E-02 -1.276224E-02
213 6.240000E+00 -2.292243E-02 -2.567822E-02
214 6.260000E+00 -2.235736E-02 -2.927535E-02
215 6.280000E+00 -2.181354E-02 -2.355364E-02
216 6.300000E+00 -2.147734E-02 -8.513096E-03
217 6.320000E+00 -2.141633E-02 1.466366E-03
218 6.340000E+00 -2.149820E-02 5.775798E-03
219 6.360000E+00 -2.160956E-02 4.415202E-03
220 6.380000E+00 -2.163701E-02 -2.615423E-03
221 6.400000E+00 -2.146714E-02 -1.531608E-02
222 6.420000E+00 -2.107402E-02 -2.337955E-02
223 6.440000E+00 -2.055660E-02 -2.774728E-02
224 6.460000E+00 -1.998877E-02 -2.841924E-02
225 6.480000E+00 -1.944446E-02 -2.539546E-02
226 6.500000E+00 -1.899759E-02 -1.867591E-02
227 6.520000E+00 -1.869042E-02 -1.259095E-02
228 6.540000E+00 -1.847196E-02 -9.804901E-03
229 6.560000E+00 -1.827623E-02 -1.031775E-02
230 6.580000E+00 -1.803726E-02 -1.412951E-02
231 6.600000E+00 -1.768906E-02 -2.124018E-02
232 6.620000E+00 -1.710949E-02 -3.551655E-02
233 6.640000E+00 -1.631641E-02 -4.259122E-02
234 6.660000E+00 -1.545385E-02 -4.246419E-02
235 6.680000E+00 -1.466585E-02 -3.513545E-02
236 6.700000E+00 -1.409644E-02 -2.060502E-02
237 6.720000E+00 -1.374966E-02 -1.461056E-02
238 6.740000E+00 -1.349054E-02 -1.183851E-02
239 6.760000E+00 -1.325464E-02 -1.228886E-02
240 6.780000E+00 -1.297750E-02 -1.596163E-02
241 6.800000E+00 -1.259469E-02 -2.285680E-02
242 6.820000E+00 -1.213049E-02 -2.349903E-02
243 6.840000E+00 -1.165728E-02 -2.375897E-02
244 6.860000E+00 -1.118268E-02 -2.363664E-02
245 6.880000E+00 -1.071436E-02 -2.313203E-02
246 6.900000E+00 -1.025995E-02 -2.224514E-02
247 6.920000E+00 -9.817276E-03 -2.203990E-02
248 6.940000E+00 -9.377653E-03 -2.193988E-02
249 6.960000E+00 -8.938979E-03 -2.194508E-02
250 6.980000E+00 -8.499148E-03 -2.205550E-02
251 7.000000E+00 -8.056057E-03 -2.227113E-02
252 7.020000E+00 -7.597830E-03 -2.345789E-02
253 7.040000E+00 -7.121492E-03 -2.408210E-02
254 7.060000E+00 -6.638296E-03 -2.414376E-02
255 7.080000E+00 -6.159492E-03 -2.364288E-02
256 7.100000E+00 -5.696331E-03 -2.257946E-02
257 7.120000E+00 -5.301441E-03 -1.729553E-02
258 7.140000E+00 -4.989070E-03 -1.432759E-02
259 7.160000E+00 -4.712898E-03 -1.367562E-02
260 7.180000E+00 -4.426605E-03 -1.533964E-02
261 7.200000E+00 -4.083872E-03 -1.931964E-02
262 7.220000E+00 -3.631995E-03 -2.538390E-02
263 7.240000E+00 -3.087883E-03 -2.854317E-02
264 7.260000E+00 -2.509635E-03 -2.879748E-02
265 7.280000E+00 -1.955351E-03 -2.614680E-02
266 7.300000E+00 -1.483130E-03 -2.059115E-02
267 7.320000E+00 -1.113389E-03 -1.639767E-02
268 7.340000E+00 -8.266321E-04 -1.229279E-02
269 7.360000E+00 -6.210869E-04 -8.276492E-03
270 7.380000E+00 -4.949818E-04 -4.348786E-03
271 7.400000E+00 -4.465449E-04 -5.096684E-04
272 7.420000E+00 -5.304321E-04 8.162452E-03
273 7.440000E+00 -7.436056E-04 1.241897E-02
274 7.460000E+00 -9.977534E-04 1.225988E-02
275 7.480000E+00 -1.204563E-03 7.685191E-03
276 7.500000E+00 -1.275724E-03 -1.305104E-03
277 7.520000E+00 -1.199415E-03 -5.916706E-03
278 7.540000E+00 -1.055417E-03 -8.074089E-03
279 7.560000E+00 -8.928131E-04 -7.777253E-03
280 7.580000E+00 -7.606883E-04 -5.026198E-03
281 7.600000E+00 -7.081267E-04 1.790768E-04
282 7.620000E+00 -7.213835E-04 1.157786E-03
283 7.640000E+00 -7.548855E-04 2.203601E-03
284 7.660000E+00 -8.099749E-04 3.316523E-03
285 7.680000E+00 -8.879938E-04 4.496550E-03
286 7.700000E+00 -9.902843E-04 5.743685E-03
287 7.720000E+00 -1.122403E-03 7.421734E-03
288 7.740000E+00 -1.285295E-03 8.820936E-03
289 7.760000E+00 -1.473382E-03 9.941291E-03
290 7.780000E+00 -1.681087E-03 1.078280E-02
291 7.800000E+00 -1.902835E-03 1.134546E-02
292 7.820000E+00 -2.225281E-03 2.008573E-02
293 7.840000E+00 -2.673724E-03 2.394500E-02
294 7.860000E+00 -3.150542E-03 2.292328E-02
295 7.880000E+00 -3.558115E-03 1.702056E-02
296 7.900000E+00 -3.798824E-03 6.236836E-03
297 7.920000E+00 -3.844315E-03 -1.142168E-03
298 7.940000E+00 -3.774961E-03 -5.247538E-03
299 7.960000E+00 -3.656237E-03 -6.079274E-03
300 7.980000E+00 -3.553615E-03 -3.637376E-03
301 8.000000E+00 -3.532566E-03 2.078155E-03
302 8.020000E+00 -3.611956E-03 5.494873E-03
303 8.040000E+00 -3.737724E-03 6.716053E-03
304 8.060000E+00 -3.865961E-03 5.741694E-03
305 8.080000E+00 -3.952755E-03 2.571796E-03
306 8.100000E+00 -3.954196E-03 -2.793640E-03
307 8.120000E+00 -3.873685E-03 -5.086591E-03
308 8.140000E+00 -3.757567E-03 -6.354313E-03
309 8.160000E+00 -3.626347E-03 -6.596805E-03
310 8.180000E+00 -3.500530E-03 -5.814068E-03
311 8.200000E+00 -3.400620E-03 -4.006101E-03
312 8.220000E+00 -3.334411E-03 -2.730570E-03
313 8.240000E+00 -3.286762E-03 -2.150229E-03
314 8.260000E+00 -3.243768E-03 -2.265076E-03
315 8.280000E+00 -3.191524E-03 -3.075114E-03
316 8.300000E+00 -3.116129E-03 -4.580340E-03
317 8.320000E+00 -2.964210E-03 -1.014102E-02
318 8.340000E+00 -2.729309E-03 -1.287854E-02
319 8.360000E+00 -2.467889E-03 -1.279292E-02
320 8.380000E+00 -2.236413E-03 -9.884157E-03
321 8.400000E+00 -2.091344E-03 -4.152240E-03
322 8.420000E+00 -2.034875E-03 -1.692189E-03
323 8.440000E+00 -2.015752E-03 -4.177491E-04
324 8.460000E+00 -2.010261E-03 -3.289192E-04
325 8.480000E+00 -1.994691E-03 -1.425700E-03
326 8.500000E+00 -1.945329E-03 -3.708091E-03
327 8.520000E+00 -1.867098E-03 -4.115259E-03
328 8.540000E+00 -1.780711E-03 -4.523663E-03
329 8.560000E+00 -1.686143E-03 -4.933304E-03
330 8.580000E+00 -1.583370E-03 -5.344181E-03
331 8.600000E+00 -1.472368E-03 -5.756296E-03
332 8.620000E+00 -1.328792E-03 -8.394009E-03
333 8.640000E+00 -1.144899E-03 -9.787974E-03
334 8.660000E+00 -9.455644E-04 -9.938189E-03
335 8.680000E+00 -7.556630E-04 -8.844656E-03
336 8.700000E+00 -6.000698E-04 -6.507373E-03
337 8.720000E+00 -5.364035E-04 -3.286769E-04
338 8.740000E+00 -5.681458E-04 3.033482E-03
339 8.760000E+00 -6.389659E-04 3.579102E-03
340 8.780000E+00 -6.925330E-04 1.308185E-03
341 8.800000E+00 -6.725164E-04 -3.779270E-03
342 8.820000E+00 -5.113768E-04 -1.169180E-02
343 8.840000E+00 -2.305599E-04 -1.574700E-02
344 8.860000E+00 9.278768E-05 -1.594487E-02
345 8.880000E+00 3.815195E-04 -1.228542E-02
346 8.900000E+00 5.584889E-04 -4.768636E-03
347 8.920000E+00 6.079481E-04 -2.335309E-04
348 8.940000E+00 5.700798E-04 3.964121E-03
349 8.960000E+00 4.516330E-04 7.824320E-03
350 8.980000E+00 2.593567E-04 1.134707E-02
351 9.000000E+00 0.000000E+00 1.453236E-02

View File

@ -0,0 +1,31 @@
# Coarse-Grained SPC/E Water
variable T equal 300.0
variable rc equal 9.0
variable rcD equal 10.0
units real
boundary p p p
atom_style atomic
dimension 3
newton on
comm_modify vel yes
read_data cg_spce.data
pair_style hybrid/overlay table spline 1000 dpd/tstat ${T} ${T} ${rc} 385262
pair_coeff 1 1 table cg_spce_table.pot VOTCA ${rc}
pair_coeff 1 1 dpd/tstat 10.0 ${rcD}
timestep 1.0
run_style verlet
velocity all create ${T} 68768932
thermo_style custom step time temp press
thermo 100
fix 1 all nve
run 1000

View File

@ -0,0 +1,106 @@
LAMMPS (24 Mar 2022)
OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98)
using 1 OpenMP thread(s) per MPI task
# Coarse-Grained SPC/E Water
variable T equal 300.0
variable rc equal 9.0
variable rcD equal 10.0
units real
boundary p p p
atom_style atomic
dimension 3
newton on
comm_modify vel yes
read_data cg_spce.data
Reading data file ...
orthogonal box = (0 0 0) to (40.31 40.31 40.31)
1 by 1 by 1 MPI processor grid
reading atoms ...
2180 atoms
read_data CPU = 0.003 seconds
pair_style hybrid/overlay table spline 1000 dpd/tstat ${T} ${T} ${rc} 385262
pair_style hybrid/overlay table spline 1000 dpd/tstat 300 ${T} ${rc} 385262
pair_style hybrid/overlay table spline 1000 dpd/tstat 300 300 ${rc} 385262
pair_style hybrid/overlay table spline 1000 dpd/tstat 300 300 9 385262
pair_coeff 1 1 table cg_spce_table.pot VOTCA ${rc}
pair_coeff 1 1 table cg_spce_table.pot VOTCA 9
WARNING: 16 of 351 force values in table VOTCA are inconsistent with -dE/dr.
WARNING: Should only be flagged at inflection points (src/pair_table.cpp:465)
pair_coeff 1 1 dpd/tstat 10.0 ${rcD}
pair_coeff 1 1 dpd/tstat 10.0 10
timestep 1.0
run_style verlet
velocity all create ${T} 68768932
velocity all create 300 68768932
thermo_style custom step time temp press
thermo 100
fix 1 all nve
run 1000
generated 0 of 0 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update every 1 steps, delay 10 steps, check yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 12
ghost atom cutoff = 12
binsize = 6, bins = 7 7 7
2 neighbor lists, perpetual/occasional/extra = 2 0 0
(1) pair table, perpetual
attributes: half, newton on
pair build: half/bin/atomonly/newton
stencil: half/bin/3d
bin: standard
(2) pair dpd/tstat, perpetual, copy from (1)
attributes: half, newton on
pair build: copy
stencil: none
bin: none
Per MPI rank memory allocation (min/avg/max) = 5.38 | 5.38 | 5.38 Mbytes
Step Time Temp Press
0 0 300 7459.7935
100 100 309.27219 6997.2438
200 200 311.23318 9940.3922
300 300 300.14145 7970.3486
400 400 293.17924 8390.7272
500 500 285.9647 7304.1147
600 600 291.15512 6605.1675
700 700 294.54557 7708.3815
800 800 288.72442 8641.2675
900 900 294.83288 7145.1684
1000 1000 291.12446 8525.4556
Loop time of 10.1894 on 1 procs for 1000 steps with 2180 atoms
Performance: 8.479 ns/day, 2.830 hours/ns, 98.141 timesteps/s
99.9% CPU use with 1 MPI tasks x 1 OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 10.02 | 10.02 | 10.02 | 0.0 | 98.34
Neigh | 0.087623 | 0.087623 | 0.087623 | 0.0 | 0.86
Comm | 0.055526 | 0.055526 | 0.055526 | 0.0 | 0.54
Output | 0.00026505 | 0.00026505 | 0.00026505 | 0.0 | 0.00
Modify | 0.013958 | 0.013958 | 0.013958 | 0.0 | 0.14
Other | | 0.01163 | | | 0.11
Nlocal: 2180 ave 2180 max 2180 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 6741 ave 6741 max 6741 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 261567 ave 261567 max 261567 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 261567
Ave neighs/atom = 119.98486
Neighbor list builds = 14
Dangerous builds = 0
Total wall time: 0:00:10

View File

@ -0,0 +1,106 @@
LAMMPS (24 Mar 2022)
OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98)
using 1 OpenMP thread(s) per MPI task
# Coarse-Grained SPC/E Water
variable T equal 300.0
variable rc equal 9.0
variable rcD equal 10.0
units real
boundary p p p
atom_style atomic
dimension 3
newton on
comm_modify vel yes
read_data cg_spce.data
Reading data file ...
orthogonal box = (0 0 0) to (40.31 40.31 40.31)
1 by 2 by 2 MPI processor grid
reading atoms ...
2180 atoms
read_data CPU = 0.003 seconds
pair_style hybrid/overlay table spline 1000 dpd/tstat ${T} ${T} ${rc} 385262
pair_style hybrid/overlay table spline 1000 dpd/tstat 300 ${T} ${rc} 385262
pair_style hybrid/overlay table spline 1000 dpd/tstat 300 300 ${rc} 385262
pair_style hybrid/overlay table spline 1000 dpd/tstat 300 300 9 385262
pair_coeff 1 1 table cg_spce_table.pot VOTCA ${rc}
pair_coeff 1 1 table cg_spce_table.pot VOTCA 9
WARNING: 16 of 351 force values in table VOTCA are inconsistent with -dE/dr.
WARNING: Should only be flagged at inflection points (src/pair_table.cpp:465)
pair_coeff 1 1 dpd/tstat 10.0 ${rcD}
pair_coeff 1 1 dpd/tstat 10.0 10
timestep 1.0
run_style verlet
velocity all create ${T} 68768932
velocity all create 300 68768932
thermo_style custom step time temp press
thermo 100
fix 1 all nve
run 1000
generated 0 of 0 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update every 1 steps, delay 10 steps, check yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 12
ghost atom cutoff = 12
binsize = 6, bins = 7 7 7
2 neighbor lists, perpetual/occasional/extra = 2 0 0
(1) pair table, perpetual
attributes: half, newton on
pair build: half/bin/atomonly/newton
stencil: half/bin/3d
bin: standard
(2) pair dpd/tstat, perpetual, copy from (1)
attributes: half, newton on
pair build: copy
stencil: none
bin: none
Per MPI rank memory allocation (min/avg/max) = 3.695 | 3.696 | 3.697 Mbytes
Step Time Temp Press
0 0 300 7929.9249
100 100 305.51763 8531.8105
200 200 304.43334 8697.989
300 300 292.42805 6865.4712
400 400 300.66447 7606.6995
500 500 298.43456 8713.2403
600 600 298.10981 6913.5475
700 700 297.39737 9121.8642
800 800 298.23888 7833.1307
900 900 293.91793 8423.8417
1000 1000 299.65933 7974.9976
Loop time of 2.82436 on 4 procs for 1000 steps with 2180 atoms
Performance: 30.591 ns/day, 0.785 hours/ns, 354.062 timesteps/s
99.7% CPU use with 4 MPI tasks x 1 OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 2.6238 | 2.644 | 2.6909 | 1.7 | 93.61
Neigh | 0.021524 | 0.021958 | 0.022778 | 0.3 | 0.78
Comm | 0.10035 | 0.1479 | 0.16842 | 7.2 | 5.24
Output | 0.00019058 | 0.00021173 | 0.00026852 | 0.0 | 0.01
Modify | 0.0041395 | 0.0041846 | 0.0042798 | 0.1 | 0.15
Other | | 0.006091 | | | 0.22
Nlocal: 545 ave 559 max 536 min
Histogram: 1 0 1 1 0 0 0 0 0 1
Nghost: 3613.5 ave 3634 max 3604 min
Histogram: 1 2 0 0 0 0 0 0 0 1
Neighs: 65402 ave 68101 max 63621 min
Histogram: 1 1 0 0 1 0 0 0 0 1
Total # of neighbors = 261608
Ave neighs/atom = 120.00367
Neighbor list builds = 14
Dangerous builds = 0
Total wall time: 0:00:02

View File

@ -4,9 +4,9 @@ variable T equal 1.0
variable rc equal 1.0
variable rcD equal 1.2
units lj
units lj
boundary p p p
atom_style atomic
atom_style atomic
dimension 3
newton on
comm_modify vel yes
@ -16,29 +16,27 @@ variable L equal 5.0
lattice fcc 3.0
region simBox block 0 ${L} 0 ${L} 0 ${L}
create_box 2 simBox
#create_atoms 1 region simBox
create_atoms 1 random 100 132456 simBox
create_atoms 2 random 100 132456 simBox
create_atoms 1 random 100 12456 simBox
create_atoms 2 random 100 13245 simBox
mass 1 1.0
mass 2 2.0
###
pair_style dpd/ext ${T} ${rc} 3854262
pair_style dpd/ext ${T} ${rc} 3854262
pair_coeff 1 1 25.0 4.5 4.53 0.5 0.53 1.2 #${rcD}
pair_coeff 1 2 25.1 4.51 4.54 0.51 0.54 1.21 #${rcD}
pair_coeff 2 2 25.2 4.52 4.55 0.52 0.55 1.22 #${rcD}
timestep 0.01
timestep 0.01
run_style verlet
velocity all create ${T} 68768932
thermo_style custom step time temp press
thermo 500
thermo 100
fix 1 all nve
run 50000
run 5000
write_data final.data pair ij

View File

@ -0,0 +1,153 @@
LAMMPS (24 Mar 2022)
OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98)
using 1 OpenMP thread(s) per MPI task
# DPD Fluid
variable T equal 1.0
variable rc equal 1.0
variable rcD equal 1.2
units lj
boundary p p p
atom_style atomic
dimension 3
newton on
comm_modify vel yes
### create box and configuration
variable L equal 5.0
lattice fcc 3.0
Lattice spacing in x,y,z = 1.1006424 1.1006424 1.1006424
region simBox block 0 ${L} 0 ${L} 0 ${L}
region simBox block 0 5 0 ${L} 0 ${L}
region simBox block 0 5 0 5 0 ${L}
region simBox block 0 5 0 5 0 5
create_box 2 simBox
Created orthogonal box = (0 0 0) to (5.5032121 5.5032121 5.5032121)
1 by 1 by 1 MPI processor grid
create_atoms 1 random 100 12456 simBox
Created 100 atoms
using lattice units in orthogonal box = (0 0 0) to (5.5032121 5.5032121 5.5032121)
create_atoms CPU = 0.000 seconds
create_atoms 2 random 100 13245 simBox
Created 100 atoms
using lattice units in orthogonal box = (0 0 0) to (5.5032121 5.5032121 5.5032121)
create_atoms CPU = 0.000 seconds
mass 1 1.0
mass 2 2.0
###
pair_style dpd/ext ${T} ${rc} 3854262
pair_style dpd/ext 1 ${rc} 3854262
pair_style dpd/ext 1 1 3854262
pair_coeff 1 1 25.0 4.5 4.53 0.5 0.53 1.2 #${rcD}
pair_coeff 1 2 25.1 4.51 4.54 0.51 0.54 1.21 #${rcD}
pair_coeff 2 2 25.2 4.52 4.55 0.52 0.55 1.22 #${rcD}
timestep 0.01
run_style verlet
velocity all create ${T} 68768932
velocity all create 1 68768932
thermo_style custom step time temp press
thermo 100
fix 1 all nve
run 5000
generated 0 of 1 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update every 1 steps, delay 10 steps, check yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 1.52
ghost atom cutoff = 1.52
binsize = 0.76, bins = 8 8 8
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair dpd/ext, perpetual
attributes: half, newton on
pair build: half/bin/atomonly/newton
stencil: half/bin/3d
bin: standard
Per MPI rank memory allocation (min/avg/max) = 3.083 | 3.083 | 3.083 Mbytes
Step Time Temp Press
0 0 1 10.864186
100 1 1.1314376 7.1955963
200 2 1.0058948 8.4574538
300 3 0.93292241 7.7033353
400 4 0.93599378 7.9649888
500 5 1.0390423 7.9498546
600 6 1.0750333 7.3594973
700 7 1.119325 7.1843859
800 8 0.96727219 6.8327896
900 9 0.98826001 8.1974994
1000 10 1.105819 7.8830702
1100 11 0.99559202 7.8295372
1200 12 0.9210428 8.2045593
1300 13 0.96628584 8.6531905
1400 14 1.1808689 7.7659964
1500 15 0.96208743 7.9977415
1600 16 1.0080123 7.6254557
1700 17 0.96910957 8.3643075
1800 18 1.0562621 7.5966268
1900 19 0.93109173 7.7944606
2000 20 1.1126085 9.3753501
2100 21 1.1328553 7.6293793
2200 22 0.8964042 7.5985061
2300 23 1.0043044 8.0016943
2400 24 1.0319521 8.1249684
2500 25 0.95913468 7.2383318
2600 26 0.99480311 7.6491295
2700 27 0.9735191 7.5004628
2800 28 0.96145308 8.222045
2900 29 1.0131071 6.6390842
3000 30 0.99463836 7.0147693
3100 31 0.96803993 8.2738796
3200 32 0.94066026 9.476403
3300 33 0.97401823 6.409563
3400 34 1.0548493 7.7301555
3500 35 0.98567796 8.2949868
3600 36 0.86621746 7.4759028
3700 37 0.94934175 8.1189998
3800 38 0.9626774 7.7986715
3900 39 0.95728518 6.8669836
4000 40 1.0866412 7.41281
4100 41 0.98873564 6.4612262
4200 42 0.9109925 7.1806331
4300 43 1.0344723 8.4617679
4400 44 0.98920584 7.3622901
4500 45 0.99386139 6.8002442
4600 46 1.0947487 6.8868352
4700 47 0.98789482 7.8428621
4800 48 1.0035907 8.3878628
4900 49 1.0336467 8.1592349
5000 50 1.0870964 8.217988
Loop time of 0.907286 on 1 procs for 5000 steps with 200 atoms
Performance: 4761453.941 tau/day, 5510.942 timesteps/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.79672 | 0.79672 | 0.79672 | 0.0 | 87.81
Neigh | 0.066416 | 0.066416 | 0.066416 | 0.0 | 7.32
Comm | 0.029801 | 0.029801 | 0.029801 | 0.0 | 3.28
Output | 0.0010415 | 0.0010415 | 0.0010415 | 0.0 | 0.11
Modify | 0.0078915 | 0.0078915 | 0.0078915 | 0.0 | 0.87
Other | | 0.005414 | | | 0.60
Nlocal: 200 ave 200 max 200 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 563 ave 563 max 563 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 1624 ave 1624 max 1624 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 1624
Ave neighs/atom = 8.12
Neighbor list builds = 500
Dangerous builds = 500
Total wall time: 0:00:00

View File

@ -0,0 +1,153 @@
LAMMPS (24 Mar 2022)
OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98)
using 1 OpenMP thread(s) per MPI task
# DPD Fluid
variable T equal 1.0
variable rc equal 1.0
variable rcD equal 1.2
units lj
boundary p p p
atom_style atomic
dimension 3
newton on
comm_modify vel yes
### create box and configuration
variable L equal 5.0
lattice fcc 3.0
Lattice spacing in x,y,z = 1.1006424 1.1006424 1.1006424
region simBox block 0 ${L} 0 ${L} 0 ${L}
region simBox block 0 5 0 ${L} 0 ${L}
region simBox block 0 5 0 5 0 ${L}
region simBox block 0 5 0 5 0 5
create_box 2 simBox
Created orthogonal box = (0 0 0) to (5.5032121 5.5032121 5.5032121)
1 by 2 by 2 MPI processor grid
create_atoms 1 random 100 12456 simBox
Created 100 atoms
using lattice units in orthogonal box = (0 0 0) to (5.5032121 5.5032121 5.5032121)
create_atoms CPU = 0.000 seconds
create_atoms 2 random 100 13245 simBox
Created 100 atoms
using lattice units in orthogonal box = (0 0 0) to (5.5032121 5.5032121 5.5032121)
create_atoms CPU = 0.000 seconds
mass 1 1.0
mass 2 2.0
###
pair_style dpd/ext ${T} ${rc} 3854262
pair_style dpd/ext 1 ${rc} 3854262
pair_style dpd/ext 1 1 3854262
pair_coeff 1 1 25.0 4.5 4.53 0.5 0.53 1.2 #${rcD}
pair_coeff 1 2 25.1 4.51 4.54 0.51 0.54 1.21 #${rcD}
pair_coeff 2 2 25.2 4.52 4.55 0.52 0.55 1.22 #${rcD}
timestep 0.01
run_style verlet
velocity all create ${T} 68768932
velocity all create 1 68768932
thermo_style custom step time temp press
thermo 100
fix 1 all nve
run 5000
generated 0 of 1 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update every 1 steps, delay 10 steps, check yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 1.52
ghost atom cutoff = 1.52
binsize = 0.76, bins = 8 8 8
1 neighbor lists, perpetual/occasional/extra = 1 0 0
(1) pair dpd/ext, perpetual
attributes: half, newton on
pair build: half/bin/atomonly/newton
stencil: half/bin/3d
bin: standard
Per MPI rank memory allocation (min/avg/max) = 3.064 | 3.064 | 3.064 Mbytes
Step Time Temp Press
0 0 1 9.2729849
100 1 1.1416138 7.7058466
200 2 0.91696292 8.1601454
300 3 0.96358166 6.7987934
400 4 0.94726377 7.6196059
500 5 1.0941462 7.5974711
600 6 0.91469027 8.3921536
700 7 1.0912559 7.362721
800 8 0.96537861 9.2089379
900 9 0.9986577 8.0072887
1000 10 0.9580071 7.2399027
1100 11 0.94763774 7.8075521
1200 12 0.9942368 7.5215461
1300 13 1.0312465 8.2684258
1400 14 0.95133276 7.2734722
1500 15 0.97273431 7.1831939
1600 16 1.0052028 7.929104
1700 17 0.93909435 8.2831308
1800 18 1.0647294 8.850861
1900 19 1.0268112 7.2828461
2000 20 0.91293528 8.208191
2100 21 0.94719411 8.3353929
2200 22 0.90507637 9.1708397
2300 23 1.0663386 7.1415871
2400 24 1.0132089 9.2210634
2500 25 1.0633849 8.3368039
2600 26 0.95803955 8.8247976
2700 27 0.95264552 7.3204561
2800 28 0.93548595 7.290555
2900 29 0.96876322 7.4969147
3000 30 0.99554648 8.2055023
3100 31 1.0190751 7.907751
3200 32 1.0887502 7.7247246
3300 33 1.0059692 7.4039814
3400 34 1.0055991 7.3469353
3500 35 1.0067689 7.2161248
3600 36 1.1103667 8.4373236
3700 37 1.0668979 7.1922528
3800 38 0.97902043 5.5426601
3900 39 1.0268733 6.7786635
4000 40 1.0036613 7.8078466
4100 41 1.0714377 7.4129166
4200 42 0.99168608 6.0096099
4300 43 1.084818 7.4932992
4400 44 0.98348896 8.9950057
4500 45 1.045253 6.1309568
4600 46 1.0266723 6.3227645
4700 47 1.0183525 8.1505786
4800 48 1.0527309 8.2824928
4900 49 0.96877903 7.6341751
5000 50 1.0178917 7.5037327
Loop time of 0.320182 on 4 procs for 5000 steps with 200 atoms
Performance: 13492326.176 tau/day, 15616.118 timesteps/s
98.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.20185 | 0.21019 | 0.2166 | 1.4 | 65.65
Neigh | 0.017652 | 0.018339 | 0.019085 | 0.5 | 5.73
Comm | 0.076802 | 0.084707 | 0.094197 | 2.6 | 26.46
Output | 0.00057039 | 0.00066408 | 0.00093301 | 0.0 | 0.21
Modify | 0.0025036 | 0.0027709 | 0.0030403 | 0.5 | 0.87
Other | | 0.003508 | | | 1.10
Nlocal: 50 ave 53 max 45 min
Histogram: 1 0 0 0 0 0 1 0 1 1
Nghost: 288.5 ave 300 max 279 min
Histogram: 1 1 0 0 0 0 1 0 0 1
Neighs: 418.25 ave 438 max 384 min
Histogram: 1 0 0 0 0 1 0 0 0 2
Total # of neighbors = 1673
Ave neighs/atom = 8.365
Neighbor list builds = 500
Dangerous builds = 500
Total wall time: 0:00:00

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1 @@
../dpd_tstat/cg_spce.data

View File

@ -1,354 +0,0 @@
VOTCA
N 351 R 2.0 9.0
1 2.000000E+00 2.190202E+01 7.229762E+01
2 2.020000E+00 2.048957E+01 6.887333E+01
3 2.040000E+00 1.915004E+01 6.500604E+01
4 2.060000E+00 1.789228E+01 6.069573E+01
5 2.080000E+00 1.672516E+01 5.594242E+01
6 2.100000E+00 1.565754E+01 5.074609E+01
7 2.120000E+00 1.467088E+01 4.787307E+01
8 2.140000E+00 1.374450E+01 4.471740E+01
9 2.160000E+00 1.288407E+01 4.127908E+01
10 2.180000E+00 1.209522E+01 3.755811E+01
11 2.200000E+00 1.138363E+01 3.355449E+01
12 2.220000E+00 1.072913E+01 3.188695E+01
13 2.240000E+00 1.010845E+01 3.017359E+01
14 2.260000E+00 9.522496E+00 2.841440E+01
15 2.280000E+00 8.972182E+00 2.660938E+01
16 2.300000E+00 8.458426E+00 2.475854E+01
17 2.320000E+00 8.014166E+00 2.006698E+01
18 2.340000E+00 7.639767E+00 1.777244E+01
19 2.360000E+00 7.287288E+00 1.787493E+01
20 2.380000E+00 6.908790E+00 2.037445E+01
21 2.400000E+00 6.456330E+00 2.527099E+01
22 2.420000E+00 5.858025E+00 3.384695E+01
23 2.440000E+00 5.130955E+00 3.814748E+01
24 2.460000E+00 4.360629E+00 3.817257E+01
25 2.480000E+00 3.632555E+00 3.392224E+01
26 2.500000E+00 3.032242E+00 2.539647E+01
27 2.520000E+00 2.547993E+00 2.297813E+01
28 2.540000E+00 2.115131E+00 2.025763E+01
29 2.560000E+00 1.739702E+00 1.723497E+01
30 2.580000E+00 1.427747E+00 1.391013E+01
31 2.600000E+00 1.185311E+00 1.028314E+01
32 2.620000E+00 9.860176E-01 9.578245E+00
33 2.640000E+00 8.048986E-01 8.465708E+00
34 2.660000E+00 6.501069E-01 6.945526E+00
35 2.680000E+00 5.297952E-01 5.017699E+00
36 2.700000E+00 4.521166E-01 2.682227E+00
37 2.720000E+00 3.986447E-01 2.615311E+00
38 2.740000E+00 3.494900E-01 2.250522E+00
39 2.760000E+00 3.106097E-01 1.587859E+00
40 2.780000E+00 2.879614E-01 6.273237E-01
41 2.800000E+00 2.875026E-01 -6.310851E-01
42 2.820000E+00 3.002733E-01 -6.543549E-01
43 2.840000E+00 3.140112E-01 -7.277911E-01
44 2.860000E+00 3.297194E-01 -8.513935E-01
45 2.880000E+00 3.484014E-01 -1.025162E+00
46 2.900000E+00 3.710604E-01 -1.249097E+00
47 2.920000E+00 3.974884E-01 -1.380483E+00
48 2.940000E+00 4.257507E-01 -1.432530E+00
49 2.960000E+00 4.542607E-01 -1.405240E+00
50 2.980000E+00 4.814314E-01 -1.298611E+00
51 3.000000E+00 5.056762E-01 -1.112645E+00
52 3.020000E+00 5.266502E-01 -9.832894E-01
53 3.040000E+00 5.449492E-01 -8.451544E-01
54 3.060000E+00 5.603978E-01 -6.982396E-01
55 3.080000E+00 5.728203E-01 -5.425450E-01
56 3.100000E+00 5.820411E-01 -3.780706E-01
57 3.120000E+00 5.882509E-01 -2.409307E-01
58 3.140000E+00 5.915991E-01 -9.190908E-02
59 3.160000E+00 5.918481E-01 6.899430E-02
60 3.180000E+00 5.887601E-01 2.417794E-01
61 3.200000E+00 5.820977E-01 4.264463E-01
62 3.220000E+00 5.733491E-01 4.528343E-01
63 3.240000E+00 5.638075E-01 5.057356E-01
64 3.260000E+00 5.529429E-01 5.851503E-01
65 3.280000E+00 5.402248E-01 6.910784E-01
66 3.300000E+00 5.251230E-01 8.235199E-01
67 3.320000E+00 5.086524E-01 8.236482E-01
68 3.340000E+00 4.921725E-01 8.244583E-01
69 3.360000E+00 4.756696E-01 8.259503E-01
70 3.380000E+00 4.591299E-01 8.281240E-01
71 3.400000E+00 4.425400E-01 8.309796E-01
72 3.420000E+00 4.259181E-01 8.311861E-01
73 3.440000E+00 4.092937E-01 8.312292E-01
74 3.460000E+00 3.926700E-01 8.311089E-01
75 3.480000E+00 3.760504E-01 8.308252E-01
76 3.500000E+00 3.594381E-01 8.303781E-01
77 3.520000E+00 3.428394E-01 8.295412E-01
78 3.540000E+00 3.262547E-01 8.289646E-01
79 3.560000E+00 3.096790E-01 8.286483E-01
80 3.580000E+00 2.931071E-01 8.285923E-01
81 3.600000E+00 2.765336E-01 8.287966E-01
82 3.620000E+00 2.599901E-01 8.254306E-01
83 3.640000E+00 2.435212E-01 8.213359E-01
84 3.660000E+00 2.271415E-01 8.165124E-01
85 3.680000E+00 2.108656E-01 8.109603E-01
86 3.700000E+00 1.947080E-01 8.046794E-01
87 3.720000E+00 1.790243E-01 7.653050E-01
88 3.740000E+00 1.640312E-01 7.356166E-01
89 3.760000E+00 1.495351E-01 7.156143E-01
90 3.780000E+00 1.353421E-01 7.052980E-01
91 3.800000E+00 1.212586E-01 7.046676E-01
92 3.820000E+00 1.072429E-01 6.965706E-01
93 3.840000E+00 9.340878E-02 6.865180E-01
94 3.860000E+00 7.979524E-02 6.745098E-01
95 3.880000E+00 6.644142E-02 6.605462E-01
96 3.900000E+00 5.338643E-02 6.446270E-01
97 3.920000E+00 4.067486E-02 6.268536E-01
98 3.940000E+00 2.829935E-02 6.110218E-01
99 3.960000E+00 1.622105E-02 5.971317E-01
100 3.980000E+00 4.401131E-03 5.851833E-01
101 4.000000E+00 -7.199230E-03 5.751764E-01
102 4.020000E+00 -1.856170E-02 5.611971E-01
103 4.040000E+00 -2.965216E-02 5.479743E-01
104 4.060000E+00 -4.048572E-02 5.355079E-01
105 4.080000E+00 -5.107752E-02 5.237981E-01
106 4.100000E+00 -6.144268E-02 5.128447E-01
107 4.120000E+00 -7.151117E-02 4.939504E-01
108 4.140000E+00 -8.119856E-02 4.747353E-01
109 4.160000E+00 -9.049845E-02 4.551994E-01
110 4.180000E+00 -9.940440E-02 4.353427E-01
111 4.200000E+00 -1.079100E-01 4.151651E-01
112 4.220000E+00 -1.159565E-01 3.900062E-01
113 4.240000E+00 -1.235312E-01 3.679865E-01
114 4.260000E+00 -1.306969E-01 3.491061E-01
115 4.280000E+00 -1.375164E-01 3.333651E-01
116 4.300000E+00 -1.440524E-01 3.207633E-01
117 4.320000E+00 -1.503014E-01 3.040292E-01
118 4.340000E+00 -1.562092E-01 2.866389E-01
119 4.360000E+00 -1.617626E-01 2.685925E-01
120 4.380000E+00 -1.669485E-01 2.498899E-01
121 4.400000E+00 -1.717538E-01 2.305311E-01
122 4.420000E+00 -1.760941E-01 2.036400E-01
123 4.440000E+00 -1.799054E-01 1.776469E-01
124 4.460000E+00 -1.832059E-01 1.525518E-01
125 4.480000E+00 -1.860135E-01 1.283546E-01
126 4.500000E+00 -1.883461E-01 1.050554E-01
127 4.520000E+00 -1.902569E-01 8.558005E-02
128 4.540000E+00 -1.917515E-01 6.344105E-02
129 4.560000E+00 -1.927768E-01 3.863842E-02
130 4.580000E+00 -1.932793E-01 1.117216E-02
131 4.600000E+00 -1.932059E-01 -1.895774E-02
132 4.620000E+00 -1.926829E-01 -3.331832E-02
133 4.640000E+00 -1.918741E-01 -4.753697E-02
134 4.660000E+00 -1.907824E-01 -6.161370E-02
135 4.680000E+00 -1.894105E-01 -7.554851E-02
136 4.700000E+00 -1.877614E-01 -8.934140E-02
137 4.720000E+00 -1.859159E-01 -9.580751E-02
138 4.740000E+00 -1.839049E-01 -1.058976E-01
139 4.760000E+00 -1.816559E-01 -1.196116E-01
140 4.780000E+00 -1.790963E-01 -1.369495E-01
141 4.800000E+00 -1.761537E-01 -1.579114E-01
142 4.820000E+00 -1.728280E-01 -1.744216E-01
143 4.840000E+00 -1.691864E-01 -1.895036E-01
144 4.860000E+00 -1.652574E-01 -2.031575E-01
145 4.880000E+00 -1.610696E-01 -2.153832E-01
146 4.900000E+00 -1.566516E-01 -2.261808E-01
147 4.920000E+00 -1.521084E-01 -2.290714E-01
148 4.940000E+00 -1.474515E-01 -2.375453E-01
149 4.960000E+00 -1.425693E-01 -2.516026E-01
150 4.980000E+00 -1.373502E-01 -2.712432E-01
151 5.000000E+00 -1.316824E-01 -2.964672E-01
152 5.020000E+00 -1.257009E-01 -3.016666E-01
153 5.040000E+00 -1.196162E-01 -3.067953E-01
154 5.060000E+00 -1.134296E-01 -3.118535E-01
155 5.080000E+00 -1.071425E-01 -3.168409E-01
156 5.100000E+00 -1.007564E-01 -3.217577E-01
157 5.120000E+00 -9.430843E-02 -3.230025E-01
158 5.140000E+00 -8.783782E-02 -3.240216E-01
159 5.160000E+00 -8.134907E-02 -3.248150E-01
160 5.180000E+00 -7.484672E-02 -3.253827E-01
161 5.200000E+00 -6.833527E-02 -3.257248E-01
162 5.220000E+00 -6.171989E-02 -3.350608E-01
163 5.240000E+00 -5.496291E-02 -3.398853E-01
164 5.260000E+00 -4.815456E-02 -3.401983E-01
165 5.280000E+00 -4.138506E-02 -3.359997E-01
166 5.300000E+00 -3.474465E-02 -3.272895E-01
167 5.320000E+00 -2.866480E-02 -2.819209E-01
168 5.340000E+00 -2.341879E-02 -2.439062E-01
169 5.360000E+00 -1.885953E-02 -2.132454E-01
170 5.380000E+00 -1.483994E-02 -1.899386E-01
171 5.400000E+00 -1.121296E-02 -1.739857E-01
172 5.420000E+00 -7.974056E-03 -1.497398E-01
173 5.440000E+00 -5.229953E-03 -1.245058E-01
174 5.460000E+00 -3.000413E-03 -9.828350E-02
175 5.480000E+00 -1.305201E-03 -7.107305E-02
176 5.500000E+00 -1.640790E-04 -4.287441E-02
177 5.520000E+00 6.371635E-04 -3.612657E-02
178 5.540000E+00 1.236053E-03 -2.263906E-02
179 5.560000E+00 1.497795E-03 -2.411882E-03
180 5.580000E+00 1.287597E-03 2.455496E-02
181 5.600000E+00 4.706651E-04 5.826147E-02
182 5.620000E+00 -7.026386E-04 5.910929E-02
183 5.640000E+00 -1.895322E-03 6.019943E-02
184 5.660000E+00 -3.112231E-03 6.153190E-02
185 5.680000E+00 -4.358213E-03 6.310668E-02
186 5.700000E+00 -5.638114E-03 6.492378E-02
187 5.720000E+00 -6.949688E-03 6.610584E-02
188 5.740000E+00 -8.277238E-03 6.652145E-02
189 5.760000E+00 -9.605436E-03 6.617062E-02
190 5.780000E+00 -1.091895E-02 6.505335E-02
191 5.800000E+00 -1.220246E-02 6.316963E-02
192 5.820000E+00 -1.341489E-02 5.820182E-02
193 5.840000E+00 -1.453566E-02 5.400257E-02
194 5.860000E+00 -1.558012E-02 5.057189E-02
195 5.880000E+00 -1.656366E-02 4.790978E-02
196 5.900000E+00 -1.750164E-02 4.601622E-02
197 5.920000E+00 -1.840088E-02 4.358369E-02
198 5.940000E+00 -1.923199E-02 3.920163E-02
199 5.960000E+00 -1.995595E-02 3.287003E-02
200 5.980000E+00 -2.053379E-02 2.458889E-02
201 6.000000E+00 -2.092651E-02 1.435822E-02
202 6.020000E+00 -2.120502E-02 1.352840E-02
203 6.040000E+00 -2.146907E-02 1.291186E-02
204 6.060000E+00 -2.172292E-02 1.250861E-02
205 6.080000E+00 -2.197084E-02 1.231865E-02
206 6.100000E+00 -2.221709E-02 1.234198E-02
207 6.120000E+00 -2.246474E-02 1.237271E-02
208 6.140000E+00 -2.270998E-02 1.210114E-02
209 6.160000E+00 -2.294677E-02 1.152726E-02
210 6.180000E+00 -2.316905E-02 1.065107E-02
211 6.200000E+00 -2.337079E-02 9.472569E-03
212 6.220000E+00 -2.332237E-02 -1.276224E-02
213 6.240000E+00 -2.292243E-02 -2.567822E-02
214 6.260000E+00 -2.235736E-02 -2.927535E-02
215 6.280000E+00 -2.181354E-02 -2.355364E-02
216 6.300000E+00 -2.147734E-02 -8.513096E-03
217 6.320000E+00 -2.141633E-02 1.466366E-03
218 6.340000E+00 -2.149820E-02 5.775798E-03
219 6.360000E+00 -2.160956E-02 4.415202E-03
220 6.380000E+00 -2.163701E-02 -2.615423E-03
221 6.400000E+00 -2.146714E-02 -1.531608E-02
222 6.420000E+00 -2.107402E-02 -2.337955E-02
223 6.440000E+00 -2.055660E-02 -2.774728E-02
224 6.460000E+00 -1.998877E-02 -2.841924E-02
225 6.480000E+00 -1.944446E-02 -2.539546E-02
226 6.500000E+00 -1.899759E-02 -1.867591E-02
227 6.520000E+00 -1.869042E-02 -1.259095E-02
228 6.540000E+00 -1.847196E-02 -9.804901E-03
229 6.560000E+00 -1.827623E-02 -1.031775E-02
230 6.580000E+00 -1.803726E-02 -1.412951E-02
231 6.600000E+00 -1.768906E-02 -2.124018E-02
232 6.620000E+00 -1.710949E-02 -3.551655E-02
233 6.640000E+00 -1.631641E-02 -4.259122E-02
234 6.660000E+00 -1.545385E-02 -4.246419E-02
235 6.680000E+00 -1.466585E-02 -3.513545E-02
236 6.700000E+00 -1.409644E-02 -2.060502E-02
237 6.720000E+00 -1.374966E-02 -1.461056E-02
238 6.740000E+00 -1.349054E-02 -1.183851E-02
239 6.760000E+00 -1.325464E-02 -1.228886E-02
240 6.780000E+00 -1.297750E-02 -1.596163E-02
241 6.800000E+00 -1.259469E-02 -2.285680E-02
242 6.820000E+00 -1.213049E-02 -2.349903E-02
243 6.840000E+00 -1.165728E-02 -2.375897E-02
244 6.860000E+00 -1.118268E-02 -2.363664E-02
245 6.880000E+00 -1.071436E-02 -2.313203E-02
246 6.900000E+00 -1.025995E-02 -2.224514E-02
247 6.920000E+00 -9.817276E-03 -2.203990E-02
248 6.940000E+00 -9.377653E-03 -2.193988E-02
249 6.960000E+00 -8.938979E-03 -2.194508E-02
250 6.980000E+00 -8.499148E-03 -2.205550E-02
251 7.000000E+00 -8.056057E-03 -2.227113E-02
252 7.020000E+00 -7.597830E-03 -2.345789E-02
253 7.040000E+00 -7.121492E-03 -2.408210E-02
254 7.060000E+00 -6.638296E-03 -2.414376E-02
255 7.080000E+00 -6.159492E-03 -2.364288E-02
256 7.100000E+00 -5.696331E-03 -2.257946E-02
257 7.120000E+00 -5.301441E-03 -1.729553E-02
258 7.140000E+00 -4.989070E-03 -1.432759E-02
259 7.160000E+00 -4.712898E-03 -1.367562E-02
260 7.180000E+00 -4.426605E-03 -1.533964E-02
261 7.200000E+00 -4.083872E-03 -1.931964E-02
262 7.220000E+00 -3.631995E-03 -2.538390E-02
263 7.240000E+00 -3.087883E-03 -2.854317E-02
264 7.260000E+00 -2.509635E-03 -2.879748E-02
265 7.280000E+00 -1.955351E-03 -2.614680E-02
266 7.300000E+00 -1.483130E-03 -2.059115E-02
267 7.320000E+00 -1.113389E-03 -1.639767E-02
268 7.340000E+00 -8.266321E-04 -1.229279E-02
269 7.360000E+00 -6.210869E-04 -8.276492E-03
270 7.380000E+00 -4.949818E-04 -4.348786E-03
271 7.400000E+00 -4.465449E-04 -5.096684E-04
272 7.420000E+00 -5.304321E-04 8.162452E-03
273 7.440000E+00 -7.436056E-04 1.241897E-02
274 7.460000E+00 -9.977534E-04 1.225988E-02
275 7.480000E+00 -1.204563E-03 7.685191E-03
276 7.500000E+00 -1.275724E-03 -1.305104E-03
277 7.520000E+00 -1.199415E-03 -5.916706E-03
278 7.540000E+00 -1.055417E-03 -8.074089E-03
279 7.560000E+00 -8.928131E-04 -7.777253E-03
280 7.580000E+00 -7.606883E-04 -5.026198E-03
281 7.600000E+00 -7.081267E-04 1.790768E-04
282 7.620000E+00 -7.213835E-04 1.157786E-03
283 7.640000E+00 -7.548855E-04 2.203601E-03
284 7.660000E+00 -8.099749E-04 3.316523E-03
285 7.680000E+00 -8.879938E-04 4.496550E-03
286 7.700000E+00 -9.902843E-04 5.743685E-03
287 7.720000E+00 -1.122403E-03 7.421734E-03
288 7.740000E+00 -1.285295E-03 8.820936E-03
289 7.760000E+00 -1.473382E-03 9.941291E-03
290 7.780000E+00 -1.681087E-03 1.078280E-02
291 7.800000E+00 -1.902835E-03 1.134546E-02
292 7.820000E+00 -2.225281E-03 2.008573E-02
293 7.840000E+00 -2.673724E-03 2.394500E-02
294 7.860000E+00 -3.150542E-03 2.292328E-02
295 7.880000E+00 -3.558115E-03 1.702056E-02
296 7.900000E+00 -3.798824E-03 6.236836E-03
297 7.920000E+00 -3.844315E-03 -1.142168E-03
298 7.940000E+00 -3.774961E-03 -5.247538E-03
299 7.960000E+00 -3.656237E-03 -6.079274E-03
300 7.980000E+00 -3.553615E-03 -3.637376E-03
301 8.000000E+00 -3.532566E-03 2.078155E-03
302 8.020000E+00 -3.611956E-03 5.494873E-03
303 8.040000E+00 -3.737724E-03 6.716053E-03
304 8.060000E+00 -3.865961E-03 5.741694E-03
305 8.080000E+00 -3.952755E-03 2.571796E-03
306 8.100000E+00 -3.954196E-03 -2.793640E-03
307 8.120000E+00 -3.873685E-03 -5.086591E-03
308 8.140000E+00 -3.757567E-03 -6.354313E-03
309 8.160000E+00 -3.626347E-03 -6.596805E-03
310 8.180000E+00 -3.500530E-03 -5.814068E-03
311 8.200000E+00 -3.400620E-03 -4.006101E-03
312 8.220000E+00 -3.334411E-03 -2.730570E-03
313 8.240000E+00 -3.286762E-03 -2.150229E-03
314 8.260000E+00 -3.243768E-03 -2.265076E-03
315 8.280000E+00 -3.191524E-03 -3.075114E-03
316 8.300000E+00 -3.116129E-03 -4.580340E-03
317 8.320000E+00 -2.964210E-03 -1.014102E-02
318 8.340000E+00 -2.729309E-03 -1.287854E-02
319 8.360000E+00 -2.467889E-03 -1.279292E-02
320 8.380000E+00 -2.236413E-03 -9.884157E-03
321 8.400000E+00 -2.091344E-03 -4.152240E-03
322 8.420000E+00 -2.034875E-03 -1.692189E-03
323 8.440000E+00 -2.015752E-03 -4.177491E-04
324 8.460000E+00 -2.010261E-03 -3.289192E-04
325 8.480000E+00 -1.994691E-03 -1.425700E-03
326 8.500000E+00 -1.945329E-03 -3.708091E-03
327 8.520000E+00 -1.867098E-03 -4.115259E-03
328 8.540000E+00 -1.780711E-03 -4.523663E-03
329 8.560000E+00 -1.686143E-03 -4.933304E-03
330 8.580000E+00 -1.583370E-03 -5.344181E-03
331 8.600000E+00 -1.472368E-03 -5.756296E-03
332 8.620000E+00 -1.328792E-03 -8.394009E-03
333 8.640000E+00 -1.144899E-03 -9.787974E-03
334 8.660000E+00 -9.455644E-04 -9.938189E-03
335 8.680000E+00 -7.556630E-04 -8.844656E-03
336 8.700000E+00 -6.000698E-04 -6.507373E-03
337 8.720000E+00 -5.364035E-04 -3.286769E-04
338 8.740000E+00 -5.681458E-04 3.033482E-03
339 8.760000E+00 -6.389659E-04 3.579102E-03
340 8.780000E+00 -6.925330E-04 1.308185E-03
341 8.800000E+00 -6.725164E-04 -3.779270E-03
342 8.820000E+00 -5.113768E-04 -1.169180E-02
343 8.840000E+00 -2.305599E-04 -1.574700E-02
344 8.860000E+00 9.278768E-05 -1.594487E-02
345 8.880000E+00 3.815195E-04 -1.228542E-02
346 8.900000E+00 5.584889E-04 -4.768636E-03
347 8.920000E+00 6.079481E-04 -2.335309E-04
348 8.940000E+00 5.700798E-04 3.964121E-03
349 8.960000E+00 4.516330E-04 7.824320E-03
350 8.980000E+00 2.593567E-04 1.134707E-02
351 9.000000E+00 0.000000E+00 1.453236E-02

View File

@ -0,0 +1 @@
../dpd_tstat/cg_spce_table.pot

View File

@ -4,7 +4,7 @@ variable T equal 300.0
variable rc equal 9.0
variable rcD equal 10.0
units real
units real
boundary p p p
atom_style atomic
dimension 3
@ -13,7 +13,7 @@ comm_modify vel yes
read_data cg_spce.data
pair_style hybrid/overlay table linear 1000 dpd/ext/tstat ${T} ${T} ${rc} 385262
pair_style hybrid/overlay table spline 1000 dpd/ext/tstat ${T} ${T} ${rc} 385262
pair_coeff 1 1 table cg_spce_table.pot VOTCA ${rc}
pair_coeff 1 1 dpd/ext/tstat 20.0 10.0 0.5 0.5 ${rcD}
@ -24,8 +24,8 @@ run_style verlet
velocity all create ${T} 68768932
thermo_style custom step time temp press
thermo 10
thermo 100
fix 1 all nve
run 2000
run 1000

View File

@ -1,293 +0,0 @@
LAMMPS (8 Apr 2021)
# Coarse-Grained SPC/E Water
variable T equal 300.0
variable rc equal 9.0
variable rcD equal 10.0
units real
boundary p p p
atom_style atomic
dimension 3
newton on
comm_modify vel yes
read_data cg_spce.data
Reading data file ...
orthogonal box = (0.0000000 0.0000000 0.0000000) to (40.310000 40.310000 40.310000)
1 by 1 by 1 MPI processor grid
reading atoms ...
2180 atoms
read_data CPU = 0.020 seconds
pair_style hybrid/overlay table linear 1000 dpd/ext/tstat ${T} ${T} ${rc} 385262
pair_style hybrid/overlay table linear 1000 dpd/ext/tstat 300 ${T} ${rc} 385262
pair_style hybrid/overlay table linear 1000 dpd/ext/tstat 300 300 ${rc} 385262
pair_style hybrid/overlay table linear 1000 dpd/ext/tstat 300 300 9 385262
pair_coeff 1 1 table cg_spce_table.pot VOTCA ${rc}
pair_coeff 1 1 table cg_spce_table.pot VOTCA 9
WARNING: 16 of 351 force values in table VOTCA are inconsistent with -dE/dr.
Should only be flagged at inflection points (../pair_table.cpp:461)
pair_coeff 1 1 dpd/ext/tstat 20.0 10.0 0.5 0.5 ${rcD}
pair_coeff 1 1 dpd/ext/tstat 20.0 10.0 0.5 0.5 10
timestep 1.0
run_style verlet
velocity all create ${T} 68768932
velocity all create 300 68768932
thermo_style custom step time temp press
thermo 10
fix 1 all nve
run 2000
Neighbor list info ...
update every 1 steps, delay 10 steps, check yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 12
ghost atom cutoff = 12
binsize = 6, bins = 7 7 7
2 neighbor lists, perpetual/occasional/extra = 2 0 0
(1) pair table, perpetual
attributes: half, newton on
pair build: half/bin/atomonly/newton
stencil: half/bin/3d/newton
bin: standard
(2) pair dpd/ext/tstat, perpetual, copy from (1)
attributes: half, newton on
pair build: copy
stencil: none
bin: none
Per MPI rank memory allocation (min/avg/max) = 5.380 | 5.380 | 5.380 Mbytes
Step Time Temp Press
0 0 300 7368.7186
10 10 298.34842 6443.6033
20 20 303.36187 9303.0158
30 30 301.59356 7533.7912
40 40 300.97217 5623.9089
50 50 300.31652 9105.8093
60 60 296.92173 9213.304
70 70 294.36593 12701.327
80 80 295.30077 6098.4732
90 90 296.35396 8051.719
100 100 293.72532 5555.983
110 110 290.95711 9001.8346
120 120 290.91972 10264.241
130 130 294.14911 11450.959
140 140 299.11994 7244.1639
150 150 301.20082 7675.7516
160 160 300.71883 9718.1901
170 170 295.47176 8931.1414
180 180 290.45284 7381.7674
190 190 291.66922 11028.436
200 200 294.0543 11897.269
210 210 299.17955 8939.2171
220 220 298.45193 8047.038
230 230 300.48548 10033.64
240 240 299.24752 6310.7247
250 250 304.51487 8710.5626
260 260 303.6513 5230.8162
270 270 300.76074 12164.773
280 280 302.60275 11145.98
290 290 297.22957 9521.4384
300 300 297.1365 7446.9006
310 310 292.18323 8021.8344
320 320 295.03958 9130.8594
330 330 293.9622 4647.512
340 340 290.77751 8001.486
350 350 292.34687 11887.668
360 360 295.95968 9262.148
370 370 293.50476 4181.549
380 380 288.69498 7632.071
390 390 289.63957 5130.0205
400 400 295.02212 5643.5024
410 410 296.3944 7267.235
420 420 299.22019 7149.9305
430 430 298.36689 8384.595
440 440 295.33149 10515.75
450 450 294.76959 11569.389
460 460 300.141 7272.4453
470 470 299.14431 7792.5419
480 480 302.3697 5837.8675
490 490 301.94692 6999.1059
500 500 300.25929 4885.3948
510 510 302.50013 8231.0438
520 520 300.76412 8445.0349
530 530 298.5016 9110.432
540 540 301.14513 9348.6421
550 550 297.36425 10753.314
560 560 296.50046 10476.823
570 570 300.57267 9889.7968
580 580 300.4868 8377.423
590 590 296.65103 6859.32
600 600 298.50013 7080.5995
610 610 300.28274 9502.5438
620 620 298.45508 8819.7846
630 630 300.24859 6291.4944
640 640 299.38719 7430.2366
650 650 297.91915 9435.3218
660 660 300.61208 6287.9931
670 670 303.59291 8357.7639
680 680 301.85511 1697.3038
690 690 298.96873 5210.2286
700 700 298.09035 7510.4359
710 710 303.11692 10129.526
720 720 302.65473 10488.388
730 730 300.15444 7118.5953
740 740 300.19245 10582.032
750 750 296.73618 6538.0363
760 760 299.72857 7588.9487
770 770 299.00347 6633.9983
780 780 301.38129 8053.5347
790 790 298.54819 8711.4965
800 800 305.54197 9717.9727
810 810 302.96497 7582.0444
820 820 306.81537 9433.6446
830 830 309.16373 10088.582
840 840 313.53881 9509.8624
850 850 310.82992 5366.015
860 860 306.49798 8499.9157
870 870 308.93421 5690.3242
880 880 302.56668 5526.3636
890 890 306.72501 7380.8469
900 900 308.87199 10388.13
910 910 312.7367 6613.0734
920 920 308.34508 5903.4291
930 930 306.39924 8615.6622
940 940 310.37544 6849.4694
950 950 310.13051 6188.7605
960 960 308.68049 7637.532
970 970 302.85465 6448.7926
980 980 307.40719 8763.0959
990 990 304.02815 8373.6518
1000 1000 300.69539 5682.6678
1010 1010 299.16385 6012.246
1020 1020 305.118 7913.4144
1030 1030 304.20382 10580.788
1040 1040 302.91134 7698.4548
1050 1050 298.08593 8952.6724
1060 1060 302.56196 10602.997
1070 1070 305.98211 12174.358
1080 1080 305.70253 12288.219
1090 1090 303.22805 7922.7166
1100 1100 301.54879 5031.3836
1110 1110 302.57611 8547.4189
1120 1120 302.00845 12966.595
1130 1130 296.10912 4514.1707
1140 1140 295.11601 6543.7239
1150 1150 287.29188 6453.3386
1160 1160 284.83881 7168.9427
1170 1170 289.77871 7895.7434
1180 1180 293.48011 7680.6885
1190 1190 295.69035 8609.6593
1200 1200 296.0653 7343.68
1210 1210 302.72922 6973.6048
1220 1220 304.11805 7322.7664
1230 1230 300.24647 6418.2612
1240 1240 293.24074 9039.1214
1250 1250 300.56214 7877.4055
1260 1260 308.03086 5644.2135
1270 1270 311.12289 6875.5126
1280 1280 307.83182 7204.9894
1290 1290 309.58491 9993.2255
1300 1300 305.36536 8626.859
1310 1310 304.35084 3471.1205
1320 1320 304.40125 2149.2701
1330 1330 295.74547 6252.9592
1340 1340 293.16034 3407.4408
1350 1350 298.6302 10139.977
1360 1360 300.46627 7312.9011
1370 1370 298.00367 2780.8886
1380 1380 300.97807 9403.3451
1390 1390 294.32612 12005.453
1400 1400 296.13403 5569.4907
1410 1410 297.86152 9558.6064
1420 1420 303.01992 8678.345
1430 1430 298.53849 5544.6316
1440 1440 293.60633 12879.765
1450 1450 296.28813 9312.4229
1460 1460 292.64466 8344.5877
1470 1470 295.28975 7689.9396
1480 1480 300.10761 7436.7346
1490 1490 291.6152 8909.6757
1500 1500 286.644 9756.5014
1510 1510 294.52064 10383.164
1520 1520 297.49618 4972.89
1530 1530 295.63379 6192.5729
1540 1540 295.04528 4987.7191
1550 1550 290.41403 7013.6076
1560 1560 295.62326 7222.5009
1570 1570 299.90584 4282.5688
1580 1580 299.04532 7885.433
1590 1590 300.03907 5508.0652
1600 1600 298.05683 9262.3744
1610 1610 297.50015 9544.6913
1620 1620 303.21217 6393.6756
1630 1630 304.44383 9674.6583
1640 1640 302.68977 9065.4408
1650 1650 303.62415 6851.1575
1660 1660 306.11103 8592.0481
1670 1670 300.84566 8483.551
1680 1680 303.92882 10113.096
1690 1690 305.02534 7389.9402
1700 1700 303.52902 5541.9256
1710 1710 299.27905 9547.7344
1720 1720 294.14366 7269.2402
1730 1730 299.49977 8086.0601
1740 1740 298.66942 7026.6067
1750 1750 296.94428 9595.2435
1760 1760 297.36921 6268.7436
1770 1770 299.88423 10598.189
1780 1780 293.76868 7405.7641
1790 1790 297.19444 10837.102
1800 1800 296.46054 8345.699
1810 1810 299.06801 5256.5992
1820 1820 294.17725 5510.7529
1830 1830 286.78527 6310.8881
1840 1840 284.89686 8249.1144
1850 1850 293.79389 4578.9263
1860 1860 298.31279 8752.305
1870 1870 295.31087 8401.2736
1880 1880 298.13297 4354.8694
1890 1890 298.90786 11454.088
1900 1900 299.1416 9121.4138
1910 1910 296.43134 12157.884
1920 1920 292.05445 8613.1522
1930 1930 300.3421 7898.3626
1940 1940 304.55746 6311.259
1950 1950 304.03899 8789.3537
1960 1960 305.08259 7243.5622
1970 1970 304.0858 8712.4796
1980 1980 299.14574 5166.3501
1990 1990 300.07254 10019.769
2000 2000 301.78176 8789.7968
Loop time of 91.2059 on 1 procs for 2000 steps with 2180 atoms
Performance: 1.895 ns/day, 12.667 hours/ns, 21.928 timesteps/s
99.8% CPU use with 1 MPI tasks x no OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 90.668 | 90.668 | 90.668 | 0.0 | 99.41
Neigh | 0.23231 | 0.23231 | 0.23231 | 0.0 | 0.25
Comm | 0.20819 | 0.20819 | 0.20819 | 0.0 | 0.23
Output | 0.0049558 | 0.0049558 | 0.0049558 | 0.0 | 0.01
Modify | 0.052906 | 0.052906 | 0.052906 | 0.0 | 0.06
Other | | 0.03904 | | | 0.04
Nlocal: 2180.00 ave 2180 max 2180 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 6693.00 ave 6693 max 6693 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 261496.0 ave 261496 max 261496 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 261496
Ave neighs/atom = 119.95229
Neighbor list builds = 25
Dangerous builds = 0
Total wall time: 0:01:31

View File

@ -1,293 +0,0 @@
LAMMPS (8 Apr 2021)
# Coarse-Grained SPC/E Water
variable T equal 300.0
variable rc equal 9.0
variable rcD equal 10.0
units real
boundary p p p
atom_style atomic
dimension 3
newton on
comm_modify vel yes
read_data cg_spce.data
Reading data file ...
orthogonal box = (0.0000000 0.0000000 0.0000000) to (40.310000 40.310000 40.310000)
1 by 2 by 2 MPI processor grid
reading atoms ...
2180 atoms
read_data CPU = 0.005 seconds
pair_style hybrid/overlay table linear 1000 dpd/ext/tstat ${T} ${T} ${rc} 385262
pair_style hybrid/overlay table linear 1000 dpd/ext/tstat 300 ${T} ${rc} 385262
pair_style hybrid/overlay table linear 1000 dpd/ext/tstat 300 300 ${rc} 385262
pair_style hybrid/overlay table linear 1000 dpd/ext/tstat 300 300 9 385262
pair_coeff 1 1 table cg_spce_table.pot VOTCA ${rc}
pair_coeff 1 1 table cg_spce_table.pot VOTCA 9
WARNING: 16 of 351 force values in table VOTCA are inconsistent with -dE/dr.
Should only be flagged at inflection points (../pair_table.cpp:461)
pair_coeff 1 1 dpd/ext/tstat 20.0 10.0 0.5 0.5 ${rcD}
pair_coeff 1 1 dpd/ext/tstat 20.0 10.0 0.5 0.5 10
timestep 1.0
run_style verlet
velocity all create ${T} 68768932
velocity all create 300 68768932
thermo_style custom step time temp press
thermo 10
fix 1 all nve
run 2000
Neighbor list info ...
update every 1 steps, delay 10 steps, check yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 12
ghost atom cutoff = 12
binsize = 6, bins = 7 7 7
2 neighbor lists, perpetual/occasional/extra = 2 0 0
(1) pair table, perpetual
attributes: half, newton on
pair build: half/bin/atomonly/newton
stencil: half/bin/3d/newton
bin: standard
(2) pair dpd/ext/tstat, perpetual, copy from (1)
attributes: half, newton on
pair build: copy
stencil: none
bin: none
Per MPI rank memory allocation (min/avg/max) = 3.695 | 3.696 | 3.697 Mbytes
Step Time Temp Press
0 0 300 5965.5396
10 10 303.16391 8779.1574
20 20 306.9014 8268.573
30 30 305.84291 9976.0547
40 40 301.20527 8832.3902
50 50 305.72012 8041.0146
60 60 305.1676 7118.8042
70 70 305.01132 9423.9307
80 80 308.10236 10781.423
90 90 309.18703 3637.9961
100 100 305.11814 7726.7672
110 110 298.37346 8575.1602
120 120 304.79786 8910.8048
130 130 309.05401 6351.4839
140 140 304.28367 4805.137
150 150 300.28903 7412.6411
160 160 299.39358 10183.593
170 170 296.80729 5437.1054
180 180 295.2755 8317.0414
190 190 303.25949 8338.3453
200 200 303.24607 9636.5224
210 210 298.56684 10288.264
220 220 293.42999 9001.0482
230 230 293.12497 9083.5194
240 240 291.92847 9659.3388
250 250 299.2202 6328.759
260 260 297.45209 10405.677
270 270 292.12257 7273.9369
280 280 289.81113 8957.8747
290 290 299.06683 6695.3776
300 300 300.75468 6298.5705
310 310 296.26524 7432.4815
320 320 294.21403 9941.7038
330 330 293.01776 4750.2993
340 340 295.22553 4968.3595
350 350 293.95589 9224.5496
360 360 297.94278 8792.0395
370 370 298.99075 5453.7814
380 380 302.1188 6229.2283
390 390 298.48943 8517.5273
400 400 295.3701 11328.394
410 410 287.74238 4058.0382
420 420 288.83732 5706.6773
430 430 298.8242 6178.7142
440 440 304.42682 10138.321
450 450 300.28695 9731.3417
460 460 300.34539 9249.4691
470 470 303.32231 11638.718
480 480 301.46777 4186.402
490 490 292.56069 9184.8386
500 500 297.26162 11766.733
510 510 295.34018 6436.33
520 520 300.16314 9325.3669
530 530 305.00513 5947.6408
540 540 300.88805 5222.7384
550 550 301.56707 6669.1808
560 560 304.89854 10730.053
570 570 299.50424 7956.1042
580 580 301.23382 10192.246
590 590 298.81222 6017.2125
600 600 300.57891 4575.433
610 610 301.95936 6309.7515
620 620 301.09393 5993.6489
630 630 300.47565 4388.7137
640 640 299.31886 9535.6093
650 650 295.06025 7954.5811
660 660 298.72666 8630.7466
670 670 302.53833 5636.1305
680 680 306.32833 12539.149
690 690 296.1951 11345.293
700 700 297.00325 6352.1448
710 710 298.51181 6922.4379
720 720 293.80125 4849.4922
730 730 296.52677 11141.583
740 740 294.15306 3527.8677
750 750 294.74737 8454.0815
760 760 292.53913 8187.9032
770 770 294.37078 7487.5703
780 780 297.50085 9198.7697
790 790 298.37773 8969.0024
800 800 293.29879 6506.6479
810 810 296.58266 8805.7872
820 820 290.85616 5248.8123
830 830 292.29488 5123.8203
840 840 292.77623 8263.5675
850 850 297.88225 6777.7444
860 860 300.01913 10439.087
870 870 295.79578 7318.1322
880 880 301.5994 8242.4774
890 890 306.63208 8090.6106
900 900 303.53759 6831.2666
910 910 300.70481 3811.0498
920 920 299.96274 8351.1573
930 930 299.67435 7046.0534
940 940 310.81742 6887.6925
950 950 305.09984 4811.088
960 960 301.33039 4184.851
970 970 301.19205 6417.6542
980 980 299.6491 7738.2233
990 990 297.33655 9264.0874
1000 1000 302.33418 7166.2751
1010 1010 300.08402 9121.0882
1020 1020 302.82225 6405.7109
1030 1030 304.01683 6944.0839
1040 1040 305.82618 6160.3838
1050 1050 308.12518 4356.0931
1060 1060 307.64811 6954.7245
1070 1070 313.70509 5558.9804
1080 1080 316.09239 7250.6147
1090 1090 310.2845 5441.3722
1100 1100 300.18899 4417.8774
1110 1110 304.02471 5609.1668
1120 1120 303.46016 10355.031
1130 1130 305.68165 6400.913
1140 1140 308.78348 7235.1894
1150 1150 299.30025 9246.4856
1160 1160 302.70799 9866.9536
1170 1170 302.0977 8643.5532
1180 1180 307.15407 8866.4664
1190 1190 305.78146 7562.4911
1200 1200 302.54605 7974.9973
1210 1210 306.14264 9554.2381
1220 1220 308.89843 6219.5361
1230 1230 305.71844 7633.9105
1240 1240 306.51911 7705.4795
1250 1250 304.78473 8590.5595
1260 1260 300.82969 9281.5964
1270 1270 305.9271 4951.1323
1280 1280 310.32728 9446.3989
1290 1290 318.27879 9102.5544
1300 1300 310.45777 5931.5457
1310 1310 304.81268 1214.4291
1320 1320 307.08811 10315.961
1330 1330 306.86917 8584.9658
1340 1340 307.26912 7254.864
1350 1350 310.02754 8508.6256
1360 1360 306.12763 4912.6641
1370 1370 301.67924 6715.8196
1380 1380 298.37239 6149.8821
1390 1390 299.62894 8181.4761
1400 1400 301.60395 6714.4244
1410 1410 297.65752 7035.6575
1420 1420 297.02817 7510.2637
1430 1430 303.59177 10361.937
1440 1440 300.10771 8473.2311
1450 1450 291.21837 6097.9954
1460 1460 291.58663 7729.0841
1470 1470 292.52447 6555.8661
1480 1480 294.48264 6960.0201
1490 1490 298.34869 8044.2321
1500 1500 296.8193 11731.289
1510 1510 296.52073 5452.8935
1520 1520 294.54819 9591.7969
1530 1530 297.36394 5148.5383
1540 1540 289.08137 6057.0981
1550 1550 288.27007 8965.1965
1560 1560 294.84398 8316.9487
1570 1570 299.79573 8760.7322
1580 1580 295.66745 5045.5322
1590 1590 298.14356 7161.1834
1600 1600 297.10402 6529.9938
1610 1610 299.69137 7741.6027
1620 1620 304.93043 11222.109
1630 1630 302.01322 10893.107
1640 1640 295.47422 8400.3124
1650 1650 301.93122 7190.2609
1660 1660 305.02639 6140.5552
1670 1670 302.86047 8651.5366
1680 1680 304.82151 9909.407
1690 1690 300.48426 8428.8845
1700 1700 293.06643 5333.8144
1710 1710 295.43687 9103.4353
1720 1720 298.77208 8162.1053
1730 1730 300.08189 9603.4371
1740 1740 303.16004 10693.291
1750 1750 303.54199 9151.023
1760 1760 300.99281 4641.2985
1770 1770 297.36657 3888.5753
1780 1780 298.32969 7286.2299
1790 1790 297.34183 8975.8956
1800 1800 295.83042 6366.7607
1810 1810 295.92044 9308.4953
1820 1820 298.10087 7117.2369
1830 1830 296.13936 4849.3739
1840 1840 296.5869 8321.4011
1850 1850 296.74513 9530.6806
1860 1860 298.57398 8788.0603
1870 1870 299.12825 6015.4777
1880 1880 301.91639 11706.441
1890 1890 309.85968 10909.493
1900 1900 302.64998 8779.8967
1910 1910 301.62919 9176.3902
1920 1920 300.66238 5369.8681
1930 1930 297.64499 8185.09
1940 1940 296.47852 10188.803
1950 1950 297.802 6679.4466
1960 1960 299.78754 7316.8198
1970 1970 300.09083 6008.9414
1980 1980 297.94119 5615.6403
1990 1990 298.37687 9727.308
2000 2000 296.08394 6400.2746
Loop time of 41.5171 on 4 procs for 2000 steps with 2180 atoms
Performance: 4.162 ns/day, 5.766 hours/ns, 48.173 timesteps/s
99.5% CPU use with 4 MPI tasks x no OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 38.667 | 38.954 | 39.453 | 4.8 | 93.83
Neigh | 0.10947 | 0.11039 | 0.11153 | 0.3 | 0.27
Comm | 1.8661 | 2.3644 | 2.652 | 19.6 | 5.70
Output | 0.0082644 | 0.0094232 | 0.01281 | 2.0 | 0.02
Modify | 0.024678 | 0.025206 | 0.025888 | 0.3 | 0.06
Other | | 0.05335 | | | 0.13
Nlocal: 545.000 ave 559 max 531 min
Histogram: 1 0 0 0 1 1 0 0 0 1
Nghost: 3619.00 ave 3655 max 3594 min
Histogram: 1 1 0 0 1 0 0 0 0 1
Neighs: 65415.5 ave 66835 max 64310 min
Histogram: 1 0 0 2 0 0 0 0 0 1
Total # of neighbors = 261662
Ave neighs/atom = 120.02844
Neighbor list builds = 26
Dangerous builds = 0
Total wall time: 0:00:41

View File

@ -0,0 +1,106 @@
LAMMPS (24 Mar 2022)
OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98)
using 1 OpenMP thread(s) per MPI task
# Coarse-Grained SPC/E Water
variable T equal 300.0
variable rc equal 9.0
variable rcD equal 10.0
units real
boundary p p p
atom_style atomic
dimension 3
newton on
comm_modify vel yes
read_data cg_spce.data
Reading data file ...
orthogonal box = (0 0 0) to (40.31 40.31 40.31)
1 by 1 by 1 MPI processor grid
reading atoms ...
2180 atoms
read_data CPU = 0.003 seconds
pair_style hybrid/overlay table spline 1000 dpd/ext/tstat ${T} ${T} ${rc} 385262
pair_style hybrid/overlay table spline 1000 dpd/ext/tstat 300 ${T} ${rc} 385262
pair_style hybrid/overlay table spline 1000 dpd/ext/tstat 300 300 ${rc} 385262
pair_style hybrid/overlay table spline 1000 dpd/ext/tstat 300 300 9 385262
pair_coeff 1 1 table cg_spce_table.pot VOTCA ${rc}
pair_coeff 1 1 table cg_spce_table.pot VOTCA 9
WARNING: 16 of 351 force values in table VOTCA are inconsistent with -dE/dr.
WARNING: Should only be flagged at inflection points (src/pair_table.cpp:465)
pair_coeff 1 1 dpd/ext/tstat 20.0 10.0 0.5 0.5 ${rcD}
pair_coeff 1 1 dpd/ext/tstat 20.0 10.0 0.5 0.5 10
timestep 1.0
run_style verlet
velocity all create ${T} 68768932
velocity all create 300 68768932
thermo_style custom step time temp press
thermo 100
fix 1 all nve
run 1000
generated 0 of 0 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update every 1 steps, delay 10 steps, check yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 12
ghost atom cutoff = 12
binsize = 6, bins = 7 7 7
2 neighbor lists, perpetual/occasional/extra = 2 0 0
(1) pair table, perpetual
attributes: half, newton on
pair build: half/bin/atomonly/newton
stencil: half/bin/3d
bin: standard
(2) pair dpd/ext/tstat, perpetual, copy from (1)
attributes: half, newton on
pair build: copy
stencil: none
bin: none
Per MPI rank memory allocation (min/avg/max) = 5.38 | 5.38 | 5.38 Mbytes
Step Time Temp Press
0 0 300 7353.4129
100 100 303.74025 4964.013
200 200 298.35396 8007.7802
300 300 298.28547 6291.5807
400 400 298.01797 6252.1041
500 500 299.88984 3489.931
600 600 302.5718 9092.203
700 700 305.38722 5909.02
800 800 294.81401 10282.286
900 900 292.40724 8338.6878
1000 1000 293.64788 6951.569
Loop time of 28.1058 on 1 procs for 1000 steps with 2180 atoms
Performance: 3.074 ns/day, 7.807 hours/ns, 35.580 timesteps/s
99.9% CPU use with 1 MPI tasks x 1 OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 27.948 | 27.948 | 27.948 | 0.0 | 99.44
Neigh | 0.071647 | 0.071647 | 0.071647 | 0.0 | 0.25
Comm | 0.058215 | 0.058215 | 0.058215 | 0.0 | 0.21
Output | 0.00026724 | 0.00026724 | 0.00026724 | 0.0 | 0.00
Modify | 0.014429 | 0.014429 | 0.014429 | 0.0 | 0.05
Other | | 0.01283 | | | 0.05
Nlocal: 2180 ave 2180 max 2180 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 6643 ave 6643 max 6643 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 261826 ave 261826 max 261826 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 261826
Ave neighs/atom = 120.10367
Neighbor list builds = 12
Dangerous builds = 0
Total wall time: 0:00:28

View File

@ -0,0 +1,106 @@
LAMMPS (24 Mar 2022)
OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98)
using 1 OpenMP thread(s) per MPI task
# Coarse-Grained SPC/E Water
variable T equal 300.0
variable rc equal 9.0
variable rcD equal 10.0
units real
boundary p p p
atom_style atomic
dimension 3
newton on
comm_modify vel yes
read_data cg_spce.data
Reading data file ...
orthogonal box = (0 0 0) to (40.31 40.31 40.31)
1 by 2 by 2 MPI processor grid
reading atoms ...
2180 atoms
read_data CPU = 0.003 seconds
pair_style hybrid/overlay table spline 1000 dpd/ext/tstat ${T} ${T} ${rc} 385262
pair_style hybrid/overlay table spline 1000 dpd/ext/tstat 300 ${T} ${rc} 385262
pair_style hybrid/overlay table spline 1000 dpd/ext/tstat 300 300 ${rc} 385262
pair_style hybrid/overlay table spline 1000 dpd/ext/tstat 300 300 9 385262
pair_coeff 1 1 table cg_spce_table.pot VOTCA ${rc}
pair_coeff 1 1 table cg_spce_table.pot VOTCA 9
WARNING: 16 of 351 force values in table VOTCA are inconsistent with -dE/dr.
WARNING: Should only be flagged at inflection points (src/pair_table.cpp:465)
pair_coeff 1 1 dpd/ext/tstat 20.0 10.0 0.5 0.5 ${rcD}
pair_coeff 1 1 dpd/ext/tstat 20.0 10.0 0.5 0.5 10
timestep 1.0
run_style verlet
velocity all create ${T} 68768932
velocity all create 300 68768932
thermo_style custom step time temp press
thermo 100
fix 1 all nve
run 1000
generated 0 of 0 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update every 1 steps, delay 10 steps, check yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 12
ghost atom cutoff = 12
binsize = 6, bins = 7 7 7
2 neighbor lists, perpetual/occasional/extra = 2 0 0
(1) pair table, perpetual
attributes: half, newton on
pair build: half/bin/atomonly/newton
stencil: half/bin/3d
bin: standard
(2) pair dpd/ext/tstat, perpetual, copy from (1)
attributes: half, newton on
pair build: copy
stencil: none
bin: none
Per MPI rank memory allocation (min/avg/max) = 3.695 | 3.696 | 3.697 Mbytes
Step Time Temp Press
0 0 300 5950.2338
100 100 301.15012 9090.2244
200 200 301.28795 10589.557
300 300 293.61974 5971.7781
400 400 310.4217 8198.7972
500 500 299.89888 9140.3132
600 600 305.56607 7783.4481
700 700 295.99415 6276.9444
800 800 296.50051 5058.1115
900 900 288.68499 8637.0269
1000 1000 291.17292 6516.4192
Loop time of 7.57429 on 4 procs for 1000 steps with 2180 atoms
Performance: 11.407 ns/day, 2.104 hours/ns, 132.026 timesteps/s
99.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 | 7.2745 | 7.3674 | 7.4316 | 2.1 | 97.27
Neigh | 0.01863 | 0.018866 | 0.019429 | 0.2 | 0.25
Comm | 0.1123 | 0.17708 | 0.27025 | 13.8 | 2.34
Output | 0.00019274 | 0.00021224 | 0.00026504 | 0.0 | 0.00
Modify | 0.0041691 | 0.0042729 | 0.0043136 | 0.1 | 0.06
Other | | 0.006464 | | | 0.09
Nlocal: 545 ave 552 max 531 min
Histogram: 1 0 0 0 0 0 0 0 2 1
Nghost: 3620.5 ave 3656 max 3584 min
Histogram: 1 0 1 0 0 0 0 1 0 1
Neighs: 65419 ave 66338 max 64104 min
Histogram: 1 0 0 0 1 0 0 0 1 1
Total # of neighbors = 261676
Ave neighs/atom = 120.03486
Neighbor list builds = 12
Dangerous builds = 0
Total wall time: 0:00:07

View File

@ -23,3 +23,5 @@ to the final states.
* `quicktests` -- very short runs with charged Lennard-Jones atoms to test
*compute fep*, *fix adapt/fep* and *pair lj/cut/coul/long/soft*.
* `ta` -- surface tension of SPCE water without constraints. Test-area method.

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,49 @@
units real
boundary p p p
atom_style full
bond_style harmonic
angle_style harmonic
special_bonds lj/coul 0.0 0.0 0.5
pair_style lj/cut/coul/long 12.0 12.0
pair_modify tail no
kspace_style pppm 1.0e-5
read_data data.spce # 8x8x16 SPCE molecules in a 30x30x100 box
bond_coeff 1 517.630258 1.0
angle_coeff 1 37.950526 109.47
pair_coeff 1 1 0.1553 3.166 # O O
pair_coeff 1 2 0.0 1.0 # O H
pair_coeff 2 2 0.0 1.0 # H H
# don't use fix shake with compute fep/ta
# fix SHAKE all shake 0.0001 20 0 b 1
neighbor 2.0 bin
# neigh_modify delay 0 every 1 check yes
timestep 1.0
variable TK equal 300.0
compute TA all fep/ta ${TK} xy 1.0005
velocity all create ${TK} 12345
thermo_style custom step temp press etotal pe c_TA[*]
thermo 5000
fix NVT all nvt temp ${TK} ${TK} 100
run 300000
reset_timestep 0
variable gamma_v equal 100*(pzz-0.5*(pxx+pyy))/2/100 # surface tension via the mechanical route
fix FEP all ave/time 100 1000 100000 c_TA[*] v_gamma_v ave running file spce.fep.ta
run 2000000

View File

@ -0,0 +1,689 @@
LAMMPS (17 Feb 2022)
OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98)
using 1 OpenMP thread(s) per MPI task
package gpu 0
units real
boundary p p p
atom_style full
bond_style harmonic
angle_style harmonic
special_bonds lj/coul 0.0 0.0 0.5
pair_style lj/cut/coul/long 12.0 12.0
pair_modify tail no
kspace_style pppm 1.0e-5
read_data data.spce # 8x8x16 SPCE molecules in a 30x30x100 box
Reading data file ...
orthogonal box = (0 0 0) to (30 30 100)
1 by 1 by 1 MPI processor grid
reading atoms ...
3072 atoms
scanning bonds ...
2 = max bonds/atom
scanning angles ...
1 = max angles/atom
reading bonds ...
2048 bonds
reading angles ...
1024 angles
Finding 1-2 1-3 1-4 neighbors ...
special bond factors lj: 0 0 0.5
special bond factors coul: 0 0 0.5
2 = max # of 1-2 neighbors
1 = max # of 1-3 neighbors
1 = max # of 1-4 neighbors
2 = max # of special neighbors
special bonds CPU = 0.001 seconds
read_data CPU = 0.006 seconds
bond_coeff 1 517.630258 1.0
angle_coeff 1 37.950526 109.47
pair_coeff 1 1 0.1553 3.166 # O O
pair_coeff 1 2 0.0 1.0 # O H
pair_coeff 2 2 0.0 1.0 # H H
# don't use fix shake with compute fep/ta
# fix SHAKE all shake 0.0001 20 0 b 1
neighbor 2.0 bin
# neigh_modify delay 0 every 1 check yes
timestep 1.0
variable TK equal 300.0
compute TA all fep/ta ${TK} xy 1.0005
compute TA all fep/ta 300 xy 1.0005
velocity all create ${TK} 12345
velocity all create 300 12345
thermo_style custom step temp press etotal pe c_TA[*]
thermo 5000
fix NVT all nvt temp ${TK} ${TK} 100
fix NVT all nvt temp 300 ${TK} 100
fix NVT all nvt temp 300 300 100
run 300000
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
Your simulation uses code contributions which should be cited:
- GPU package (short-range, long-range and three-body potentials):
@Article{Brown11,
author = {W. M. Brown, P. Wang, S. J. Plimpton, A. N. Tharrington},
title = {Implementing Molecular Dynamics on Hybrid High Performance Computers - Short Range Forces},
journal = {Comp.~Phys.~Comm.},
year = 2011,
volume = 182,
pages = {898--911}
}
@Article{Brown12,
author = {W. M. Brown, A. Kohlmeyer, S. J. Plimpton, A. N. Tharrington},
title = {Implementing Molecular Dynamics on Hybrid High Performance Computers - Particle-Particle Particle-Mesh},
journal = {Comp.~Phys.~Comm.},
year = 2012,
volume = 183,
pages = {449--459}
}
@Article{Brown13,
author = {W. M. Brown, Y. Masako},
title = {Implementing Molecular Dynamics on Hybrid High Performance Computers Three-Body Potentials},
journal = {Comp.~Phys.~Comm.},
year = 2013,
volume = 184,
pages = {2785--2793}
}
@Article{Trung15,
author = {T. D. Nguyen, S. J. Plimpton},
title = {Accelerating dissipative particle dynamics simulations for soft matter systems},
journal = {Comput.~Mater.~Sci.},
year = 2015,
volume = 100,
pages = {173--180}
}
@Article{Trung17,
author = {T. D. Nguyen},
title = {GPU-accelerated Tersoff potentials for massively parallel Molecular Dynamics simulations},
journal = {Comp.~Phys.~Comm.},
year = 2017,
volume = 212,
pages = {113--122}
}
@Article{Nikolskiy19,
author = {V. Nikolskiy, V. Stegailov},
title = {GPU acceleration of four-site water models in LAMMPS},
journal = {Proceeding of the International Conference on Parallel Computing (ParCo 2019), Prague, Czech Republic},
year = 2019
}
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
PPPM initialization ...
using 12-bit tables for long-range coulomb (src/kspace.cpp:340)
G vector (1/distance) = 0.24270009
grid = 20 20 50
stencil order = 5
estimated absolute RMS force accuracy = 0.0037271514
estimated relative force accuracy = 1.1224206e-05
using double precision FFTW3
3d grid and FFT values/proc = 40824 20000
generated 0 of 1 mixed pair_coeff terms from geometric mixing rule
FEP/TA settings ...
temperature = 300.000000
scale factor = 1.000500
tail no
Per MPI rank memory allocation (min/avg/max) = 10.59 | 10.59 | 10.59 Mbytes
Step Temp Press TotEng PotEng c_TA[1] c_TA[2] c_TA[3]
0 300 5742.8831 8061.6965 5315.4762 -10.940045 93249708 0.45
5000 301.43029 -118.64017 -7888.4723 -10647.786 -0.13617205 1.2566061 0.45
10000 294.49018 -301.44062 -8063.3808 -10759.164 -0.14897537 1.2838851 0.45
15000 294.36123 -407.07728 -8189.2912 -10883.894 0.34568257 0.55998421 0.45
20000 300.95171 111.50248 -8104.1193 -10859.052 0.11293291 0.82742794 0.45
25000 300.28473 388.00598 -8147.8655 -10896.692 0.11270184 0.82774872 0.45
30000 306.62229 -113.93849 -8191.7529 -10998.594 0.26068823 0.6457922 0.45
35000 303.66349 -426.81556 -8269.8364 -11049.593 0.78191631 0.26939311 0.45
40000 291.70214 -50.50854 -8368.0775 -11038.339 0.20120788 0.71354814 0.45
45000 299.74326 -289.18081 -8346.2716 -11090.142 0.4163404 0.49739645 0.45
50000 300.53193 36.834691 -8367.5726 -11118.662 0.20517137 0.70881996 0.45
55000 298.20207 -107.76906 -8274.386 -11004.148 0.7409946 0.2885342 0.45
60000 298.32558 -65.20542 -8433.4884 -11164.381 0.16210976 0.76191344 0.45
65000 297.3149 -102.87381 -8379.2515 -11100.892 0.21193701 0.70082127 0.45
70000 300.78423 -463.75811 -8381.3317 -11134.731 0.32109349 0.58356406 0.45
75000 299.53099 -53.264996 -8495.159 -11237.086 0.44828935 0.47144212 0.45
80000 295.55879 -590.1244 -8432.3435 -11137.909 0.28788374 0.61699451 0.45
85000 298.73289 -234.73297 -8473.8721 -11208.493 -0.11723275 1.2173128 0.45
90000 307.02709 -264.9035 -8303.7625 -11114.309 -0.098959935 1.1805672 0.45
95000 304.79112 199.8891 -8364.2553 -11154.334 0.036986735 0.93984396 0.45
100000 295.49748 -743.18974 -8453.8066 -11158.811 0.249981 0.65749559 0.45
105000 303.11352 -163.70166 -8324.4846 -11099.206 -0.012286442 1.0208231 0.45
110000 294.30278 -33.731015 -8512.8168 -11206.884 -0.0129379 1.0219392 0.45
115000 293.65421 393.24871 -8481.1933 -11169.324 0.75255277 0.28299408 0.45
120000 300.56448 16.832298 -8507.3819 -11258.769 0.13389897 0.79883437 0.45
125000 297.92506 -398.77893 -8576.4403 -11303.666 0.07292658 0.88485917 0.45
130000 303.007 -589.11865 -8560.7259 -11334.472 0.42876446 0.48713794 0.45
135000 310.82674 -203.4991 -8565.3181 -11410.647 0.075268046 0.88139064 0.45
140000 303.68345 -710.20709 -8570.895 -11350.834 -0.1023741 1.1873476 0.45
145000 293.86825 129.05781 -8457.0747 -11147.165 0.39475138 0.51573896 0.45
150000 296.93136 -734.03863 -8577.2763 -11295.406 0.73600373 0.29095985 0.45
155000 296.67522 -290.20206 -8631.0579 -11346.843 -0.30049664 1.6554154 0.45
160000 301.5685 -656.03394 -8646.3196 -11406.898 0.08494101 0.86720512 0.45
165000 295.8808 342.45206 -8602.0309 -11310.544 -0.30873864 1.6784606 0.45
170000 303.33048 -64.144957 -8580.8446 -11357.552 0.13622456 0.79572423 0.45
175000 300.75245 -908.44969 -8566.8005 -11319.909 0.15795135 0.76724659 0.45
180000 301.34603 -350.00512 -8489.0111 -11247.553 0.21089487 0.70204744 0.45
185000 305.96254 62.840515 -8458.0542 -11258.856 -0.050029338 1.0875408 0.45
190000 300.14392 256.935 -8684.6591 -11432.197 0.40144188 0.50998337 0.45
195000 299.32366 -218.70113 -8505.3328 -11245.362 -0.19428451 1.3852659 0.45
200000 307.89424 -569.89954 -8615.1541 -11433.639 0.55121888 0.39668508 0.45
205000 299.34873 334.69765 -8657.6353 -11397.894 0.17751997 0.74247109 0.45
210000 298.54619 -261.12193 -8601.2439 -11334.156 0.74219016 0.28795615 0.45
215000 304.02395 -306.81112 -8531.9913 -11315.047 0.86987192 0.23244073 0.45
220000 299.95916 278.60921 -8682.394 -11428.24 -0.26474202 1.559051 0.45
225000 302.839 -226.36906 -8515.0815 -11287.29 0.060381353 0.90367684 0.45
230000 299.54085 240.08589 -8636.8991 -11378.916 -0.46699438 2.1887589 0.45
235000 297.62792 -138.20813 -8627.0888 -11351.595 -0.035013312 1.0604901 0.45
240000 299.15558 442.88999 -8749.2731 -11487.763 0.14696819 0.78151268 0.45
245000 291.76323 174.70322 -8597.8808 -11268.701 -0.3979188 1.9492946 0.45
250000 308.21961 37.282506 -8603.7127 -11425.176 0.021882894 0.96395922 0.45
255000 307.18484 -493.77408 -8459.5942 -11271.585 0.16914044 0.75298079 0.45
260000 294.17364 -238.05366 -8677.8379 -11370.723 -0.35710078 1.8202968 0.45
265000 289.14461 -304.12454 -8727.2613 -11374.111 0.18045129 0.73882932 0.45
270000 301.51228 -255.75558 -8640.9577 -11401.022 0.49252861 0.43772444 0.45
275000 294.98349 -351.00974 -8678.3965 -11378.695 -0.31576914 1.6983718 0.45
280000 294.37376 279.87325 -8668.9575 -11363.675 0.26328091 0.64298978 0.45
285000 295.68351 249.3086 -8748.533 -11455.24 0.6820904 0.31849899 0.45
290000 298.74266 -749.43024 -8583.8679 -11318.578 0.030414997 0.95026156 0.45
295000 292.67215 -573.39647 -8713.3223 -11392.463 0.25656615 0.65027291 0.45
300000 302.48853 186.71329 -8655.8918 -11424.892 0.20319721 0.71117107 0.45
Loop time of 706.805 on 1 procs for 300000 steps with 3072 atoms
Performance: 36.672 ns/day, 0.654 hours/ns, 424.445 timesteps/s
95.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 | 149.88 | 149.88 | 149.88 | 0.0 | 21.21
Bond | 17.824 | 17.824 | 17.824 | 0.0 | 2.52
Kspace | 517.46 | 517.46 | 517.46 | 0.0 | 73.21
Neigh | 1.3789 | 1.3789 | 1.3789 | 0.0 | 0.20
Comm | 9.412 | 9.412 | 9.412 | 0.0 | 1.33
Output | 0.092 | 0.092 | 0.092 | 0.0 | 0.01
Modify | 8.3026 | 8.3026 | 8.3026 | 0.0 | 1.17
Other | | 2.458 | | | 0.35
Nlocal: 3072 ave 3072 max 3072 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 8370 ave 8370 max 8370 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 = -1
Ave neighs/atom = -0.00032552083
Ave special neighs/atom = 2
Neighbor list builds = 14698
Dangerous builds = 21
reset_timestep 0
variable gamma_v equal 100*(pzz-0.5*(pxx+pyy))/2/100 # surface tension via the mechanical route
fix FEP all ave/time 100 1000 100000 c_TA[*] v_gamma_v ave running file spce.fep.ta
run 2000000
PPPM initialization ...
using 12-bit tables for long-range coulomb (src/kspace.cpp:340)
G vector (1/distance) = 0.24270009
grid = 20 20 50
stencil order = 5
estimated absolute RMS force accuracy = 0.0037271514
estimated relative force accuracy = 1.1224206e-05
using double precision FFTW3
3d grid and FFT values/proc = 40824 20000
generated 0 of 1 mixed pair_coeff terms from geometric mixing rule
Per MPI rank memory allocation (min/avg/max) = 10.61 | 10.61 | 10.61 Mbytes
Step Temp Press TotEng PotEng c_TA[1] c_TA[2] c_TA[3]
0 302.48853 186.71327 -8655.8918 -11424.892 0.20325452 0.71110271 0.45
5000 296.71986 -573.544 -8510.0832 -11226.277 0.43636365 0.48096787 0.45
10000 302.58189 314.36295 -8636.8139 -11406.669 0.005932853 0.99009761 0.45
15000 296.98096 -950.66627 -8635.9066 -11354.49 0.48058674 0.44658101 0.45
20000 297.11923 -474.65836 -8666.9864 -11386.836 0.27933535 0.62590536 0.45
25000 302.26474 -621.83271 -8655.4227 -11422.375 0.01931686 0.96811729 0.45
30000 300.37645 -358.95128 -8568.7732 -11318.44 0.25415456 0.65290873 0.45
35000 296.5436 179.71411 -8665.0335 -11379.614 0.1911473 0.72569185 0.45
40000 300.79459 92.193193 -8617.7807 -11371.275 0.27587113 0.629553 0.45
45000 298.87827 220.06674 -8695.83 -11431.782 0.28715816 0.61774591 0.45
50000 304.4095 -375.31266 -8614.4396 -11401.025 -0.18683272 1.3680584 0.45
55000 305.11287 128.51602 -8559.8245 -11352.848 0.24122754 0.66722084 0.45
60000 296.56241 302.30371 -8725.6357 -11440.388 -0.27104279 1.5756158 0.45
65000 295.78468 -393.18931 -8716.4616 -11424.095 0.39132466 0.51871194 0.45
70000 297.67504 155.75977 -8641.2451 -11366.182 0.031194864 0.94901929 0.45
75000 298.81381 -207.51201 -8622.9859 -11358.348 -0.11330086 1.2093106 0.45
80000 296.17928 -360.65589 -8679.0048 -11390.25 0.68794433 0.31538684 0.45
85000 303.90294 488.01134 -8643.2028 -11425.151 0.41330713 0.49993365 0.45
90000 296.49425 14.901201 -8636.0539 -11350.182 -0.21538319 1.4351695 0.45
95000 308.63505 137.10659 -8570.395 -11395.661 0.51407684 0.42218544 0.45
100000 302.56638 -402.80803 -8635.0157 -11404.729 0.1552006 0.77079493 0.45
105000 293.79289 -417.74599 -8626.2538 -11315.654 -0.13491963 1.253969 0.45
110000 293.52504 -808.94658 -8684.9259 -11371.874 0.20573374 0.70815164 0.45
115000 307.6821 132.78071 -8639.817 -11456.36 -0.67060193 3.0798018 0.45
120000 303.22974 121.87128 -8714.7295 -11490.515 0.3675961 0.5397742 0.45
125000 303.8202 -34.518279 -8625.1384 -11406.329 0.17151619 0.74998608 0.45
130000 294.5718 -508.86133 -8684.9608 -11381.491 0.23323323 0.67622827 0.45
135000 302.79866 -445.99091 -8627.6163 -11399.456 0.3300839 0.57482965 0.45
140000 297.84052 -78.442467 -8621.5234 -11347.976 0.39157424 0.51849484 0.45
145000 303.64247 463.89678 -8673.8591 -11453.423 0.39692857 0.51385891 0.45
150000 288.38239 28.567607 -8789.6464 -11429.518 -0.045509865 1.0793274 0.45
155000 296.02581 -111.35664 -8674.295 -11384.135 0.23313764 0.67633671 0.45
160000 307.72004 -410.73956 -8578.8169 -11395.707 0.28485416 0.62013794 0.45
165000 300.42279 -483.56039 -8598.0354 -11348.126 0.38342507 0.52563101 0.45
170000 302.51326 -150.99512 -8626.2426 -11395.469 0.2439355 0.66419697 0.45
175000 295.41161 -554.9058 -8760.0201 -11464.238 0.38186652 0.52700696 0.45
180000 296.21987 -194.97724 -8645.4143 -11357.031 0.098453456 0.84777037 0.45
185000 296.52352 -186.85833 -8690.0538 -11404.45 0.6348999 0.34473516 0.45
190000 304.72799 -60.2868 -8667.2005 -11456.701 0.1885985 0.72880108 0.45
195000 306.65221 -871.17267 -8679.3434 -11486.458 0.56138735 0.38997638 0.45
200000 301.07509 362.96369 -8616.9867 -11373.048 -0.53126323 2.4379049 0.45
205000 303.65587 -216.8767 -8564.3182 -11344.005 0.11046546 0.83085967 0.45
210000 296.20891 -474.08356 -8698.3778 -11409.894 -0.11237476 1.2074335 0.45
215000 295.37276 422.46284 -8714.4636 -11418.326 0.042757549 0.93079022 0.45
220000 301.20663 -202.20616 -8577.1827 -11334.449 0.30387837 0.60066105 0.45
225000 306.20481 -90.566175 -8503.5134 -11306.533 0.29188403 0.6128683 0.45
230000 303.54253 -24.255163 -8641.8724 -11420.521 -0.38522168 1.9082173 0.45
235000 300.29265 -572.08074 -8664.2779 -11413.177 0.48055356 0.44660587 0.45
240000 302.90712 -226.88617 -8636.6962 -11409.528 -0.15295452 1.2924832 0.45
245000 305.05222 -68.241521 -8591.0885 -11383.557 -0.19850824 1.3951152 0.45
250000 300.27784 -46.680162 -8746.7288 -11495.492 -0.0098493376 1.0166585 0.45
255000 308.23091 -424.64171 -8573.7405 -11395.307 0.1366107 0.79520901 0.45
260000 296.11619 4.6901264 -8742.1916 -11452.859 -0.12450429 1.2322516 0.45
265000 301.62359 134.42152 -8565.5323 -11326.615 -0.028534957 1.0490284 0.45
270000 306.71999 -62.484213 -8690.7983 -11498.534 0.28432443 0.62068922 0.45
275000 292.91982 532.15442 -8779.2684 -11460.676 -0.40898808 1.9858264 0.45
280000 306.88024 -339.05165 -8557.2761 -11366.479 0.12573772 0.80984534 0.45
285000 303.38798 617.66326 -8630.5787 -11407.813 -0.1310487 1.2458532 0.45
290000 299.66094 302.90333 -8692.267 -11435.383 0.65063395 0.33575584 0.45
295000 304.49009 656.72392 -8710.7918 -11498.115 -0.16849302 1.3266137 0.45
300000 303.80861 -221.66912 -8688.9465 -11470.031 -0.24985266 1.5205954 0.45
305000 300.67136 -498.92059 -8669.6648 -11422.031 0.19219443 0.72441833 0.45
310000 305.7021 -521.59218 -8505.6751 -11304.093 0.52013748 0.4179152 0.45
315000 302.66313 -359.25677 -8682.4925 -11453.091 -0.26135382 1.5502155 0.45
320000 304.5646 441.04962 -8610.9569 -11398.962 0.41662005 0.49716319 0.45
325000 300.04934 -142.59053 -8698.3246 -11444.997 -0.23029219 1.4715132 0.45
330000 305.55522 -212.47771 -8576.3678 -11373.441 0.091594168 0.85758093 0.45
335000 294.79439 -151.62761 -8762.4565 -11461.024 0.14345357 0.78613362 0.45
340000 302.4373 463.41717 -8643.2588 -11411.79 0.36279978 0.54413438 0.45
345000 295.91624 -272.3623 -8678.9725 -11387.81 0.1032874 0.84092407 0.45
350000 300.60829 62.418773 -8633.2343 -11385.023 -0.040578988 1.0704371 0.45
355000 301.41802 -860.82496 -8573.5867 -11332.788 0.04947461 0.9203617 0.45
360000 298.03103 -265.05516 -8619.4232 -11347.619 -0.20903224 1.4199617 0.45
365000 298.08727 -359.76277 -8612.4898 -11341.201 0.040109682 0.93493354 0.45
370000 301.55162 -339.05976 -8687.3746 -11447.799 0.1705358 0.75122045 0.45
375000 299.3933 -290.38029 -8723.9515 -11464.618 -0.1476 1.2809266 0.45
380000 303.02442 -1104.7914 -8626.7252 -11400.631 0.3211992 0.58346059 0.45
385000 301.49421 -613.53228 -8662.2479 -11422.146 -0.42642873 2.0447796 0.45
390000 302.01134 -351.23257 -8662.4664 -11427.099 0.23747904 0.67142935 0.45
395000 307.32962 -443.86959 -8624.8646 -11438.181 0.17359502 0.74737541 0.45
400000 301.67955 -253.92045 -8690.6143 -11452.209 -0.43779134 2.0841261 0.45
405000 302.60773 -97.544471 -8646.8281 -11416.92 0.071259831 0.88733652 0.45
410000 302.48853 -630.99507 -8710.4497 -11479.45 0.28763517 0.61725182 0.45
415000 296.46562 -443.33457 -8763.0661 -11476.932 0.088532948 0.86199583 0.45
420000 295.37803 -70.515081 -8720.0027 -11423.913 0.06359365 0.89882065 0.45
425000 299.31069 -48.284153 -8678.6115 -11418.522 0.063520704 0.89893064 0.45
430000 296.37918 -651.48627 -8784.4246 -11497.5 -0.0094249768 1.0159351 0.45
435000 303.07145 -284.10404 -8558.3149 -11332.651 0.034731239 0.94340646 0.45
440000 293.1823 -280.18182 -8707.2432 -11391.054 0.14151034 0.78870025 0.45
445000 305.55617 -286.4858 -8646.9315 -11444.013 0.26166889 0.64473078 0.45
450000 300.67206 102.89156 -8705.2376 -11457.61 0.88202179 0.2277515 0.45
455000 304.23258 9.5792632 -8571.8771 -11356.843 -0.42835558 2.0513992 0.45
460000 292.30355 265.8009 -8707.4453 -11383.212 0.20592758 0.70792142 0.45
465000 297.62746 193.66269 -8716.5132 -11441.015 0.36938368 0.53815813 0.45
470000 292.53483 -75.549804 -8728.3188 -11406.202 0.49993961 0.43231669 0.45
475000 296.10181 -202.26042 -8657.5804 -11368.116 -0.29829888 1.6493239 0.45
480000 300.24953 249.20038 -8688.6705 -11437.175 0.4372485 0.48025452 0.45
485000 296.41241 -73.46156 -8558.9344 -11272.314 -0.15947631 1.3067001 0.45
490000 302.51379 -654.60188 -8571.28 -11340.512 0.36608136 0.54114742 0.45
495000 300.50497 -127.55361 -8724.7069 -11475.55 0.029571506 0.95160701 0.45
500000 303.60879 183.79306 -8568.3539 -11347.609 0.050255275 0.91915729 0.45
505000 303.19721 -181.45226 -8614.403 -11389.891 0.32941264 0.57547725 0.45
510000 296.74554 -22.844257 -8659.5977 -11376.026 0.017555998 0.97098101 0.45
515000 304.94785 184.89151 -8657.5502 -11449.063 0.36892431 0.53857296 0.45
520000 297.55996 -618.66865 -8737.5039 -11461.388 0.0057510291 0.99039963 0.45
525000 301.79028 298.59479 -8629.0889 -11391.698 0.34316268 0.56235619 0.45
530000 309.73127 127.43322 -8551.5448 -11386.846 0.76278829 0.27817682 0.45
535000 296.10155 231.50902 -8700.9183 -11411.452 0.44398766 0.47485618 0.45
540000 299.71005 -102.1096 -8655.905 -11399.471 0.76085637 0.27907974 0.45
545000 300.14982 -206.19313 -8714.8486 -11462.44 0.22627441 0.68416793 0.45
550000 294.79885 -643.7432 -8605.2486 -11303.857 -0.057557071 1.1013603 0.45
555000 294.17638 -19.930168 -8726.0381 -11418.949 0.40954478 0.50309869 0.45
560000 297.03199 -369.45853 -8470.404 -11189.455 -0.6540448 2.9954437 0.45
565000 291.48707 -349.3956 -8714.1576 -11382.45 0.16175418 0.76236802 0.45
570000 310.66906 -63.356318 -8637.4971 -11481.383 0.025729917 0.95775884 0.45
575000 300.62447 -741.10788 -8620.5725 -11372.509 0.16003059 0.76457532 0.45
580000 303.7169 -69.625554 -8649.3106 -11429.556 0.13011667 0.80391862 0.45
585000 296.8583 22.033506 -8781.0388 -11498.5 0.05826221 0.9068948 0.45
590000 295.12104 251.36802 -8661.2354 -11362.793 0.0042041083 0.99297285 0.45
595000 291.91551 264.01646 -8784.286 -11456.5 -0.3176707 1.7037977 0.45
600000 299.51751 -425.6209 -8680.4016 -11422.205 0.063170047 0.89945954 0.45
605000 296.04489 -702.56187 -8648.8336 -11358.848 0.44150563 0.47683729 0.45
610000 293.08062 387.21018 -8636.9022 -11319.782 0.430424 0.48578377 0.45
615000 300.1062 -406.07366 -8651.5383 -11398.731 0.16393273 0.75958719 0.45
620000 304.45492 -717.77411 -8466.6335 -11253.634 0.14754207 0.78076073 0.45
625000 300.25467 394.44177 -8545.7468 -11294.298 -0.098814662 1.1802796 0.45
630000 301.25687 315.97468 -8555.4413 -11313.167 -0.30209606 1.6598626 0.45
635000 296.62552 -313.8236 -8661.4264 -11376.756 0.82351209 0.25123759 0.45
640000 300.49659 458.65236 -8648.2545 -11399.021 -0.2575 1.5402266 0.45
645000 299.08458 -40.905776 -8589.4621 -11327.303 0.07180479 0.88652576 0.45
650000 299.78807 286.71966 -8663.8862 -11408.166 -0.10586303 1.1943167 0.45
655000 300.2646 175.76273 -8685.9588 -11434.601 -0.4131303 1.9996722 0.45
660000 296.01304 69.482635 -8722.0849 -11431.808 0.65234529 0.33479341 0.45
665000 307.08179 -192.78965 -8554.9636 -11366.011 0.37228163 0.53554848 0.45
670000 298.81489 46.512873 -8651.3386 -11386.71 -0.34071772 1.7709545 0.45
675000 298.09695 -320.42123 -8744.4868 -11473.286 0.21787637 0.6938739 0.45
680000 291.73582 -346.08326 -8809.3602 -11479.93 0.35114775 0.55487414 0.45
685000 299.8583 -53.573198 -8742.9543 -11487.877 -0.032502983 1.056034 0.45
690000 299.56857 -129.53024 -8600.751 -11343.022 0.11604588 0.82311864 0.45
695000 287.63895 77.534045 -8889.5114 -11522.578 0.16150699 0.76268419 0.45
700000 294.71917 -187.77101 -8824.4116 -11522.291 0.33093056 0.57401387 0.45
705000 301.78978 -269.32554 -8594.7858 -11357.39 -0.098783804 1.1802185 0.45
710000 305.58313 -214.43945 -8518.1241 -11315.453 -0.03149037 1.0542418 0.45
715000 306.30354 -121.41526 -8617.5112 -11421.435 0.10640694 0.83653526 0.45
720000 304.94559 91.460869 -8587.9126 -11379.405 -0.4078455 1.982024 0.45
725000 295.36839 -505.69412 -8724.4826 -11428.305 0.71800645 0.29987744 0.45
730000 298.79826 -9.9970862 -8716.023 -11451.242 0.59730469 0.36717499 0.45
735000 300.95964 286.58072 -8641.7744 -11396.779 0.23910326 0.66960256 0.45
740000 298.32007 -198.81619 -8685.7142 -11416.556 0.16840724 0.75390743 0.45
745000 296.06461 157.22083 -8605.3591 -11315.555 0.3149783 0.58958082 0.45
750000 297.27956 -277.36948 -8673.9548 -11395.272 0.058965185 0.90582605 0.45
755000 296.79569 203.4854 -8671.4835 -11388.371 0.097863507 0.84860972 0.45
760000 296.34981 -296.05791 -8699.7009 -11412.507 0.34644945 0.55926433 0.45
765000 302.19536 -657.32604 -8674.9726 -11441.289 -0.25940717 1.5451618 0.45
770000 301.91884 -775.45423 -8695.1619 -11458.947 -0.12199652 1.227079 0.45
775000 299.9563 -211.10367 -8637.8471 -11383.667 0.3478892 0.55791532 0.45
780000 296.00862 -396.64708 -8721.8097 -11431.493 0.25358512 0.65353267 0.45
785000 295.12431 -24.44772 -8734.6065 -11436.194 -0.19904079 1.396362 0.45
790000 308.18585 -171.55104 -8659.2474 -11480.402 0.30853408 0.59598847 0.45
795000 296.45675 -137.73831 -8648.3419 -11362.127 -0.32469954 1.7240046 0.45
800000 301.11214 53.405034 -8663.3832 -11419.784 0.1323728 0.800882 0.45
805000 305.74305 -320.69662 -8642.7722 -11441.565 0.15136393 0.77577146 0.45
810000 305.37725 -264.53003 -8671.4307 -11466.875 0.3113551 0.59317494 0.45
815000 304.38239 -240.94118 -8474.7091 -11261.046 -0.080564405 1.1446952 0.45
820000 296.05915 -369.13085 -8698.3399 -11408.485 -0.028085872 1.0482385 0.45
825000 299.79549 123.66824 -8712.0882 -11456.436 -0.36082461 1.8317026 0.45
830000 296.0201 231.08408 -8726.975 -11436.763 -0.22224484 1.4517833 0.45
835000 294.90197 -293.4635 -8750.8202 -11450.373 -0.13935283 1.2633285 0.45
840000 301.79184 -18.424101 -8689.643 -11452.266 0.19065717 0.72628873 0.45
845000 303.63406 232.88156 -8607.7816 -11387.268 0.16521847 0.75795075 0.45
850000 300.78823 -301.92537 -8697.521 -11450.957 0.043047914 0.93033698 0.45
855000 300.26171 -407.09613 -8617.7866 -11366.403 0.30989277 0.59463173 0.45
860000 303.77064 192.13208 -8630.0944 -11410.831 0.44012319 0.47794432 0.45
865000 300.12867 323.6738 -8735.2213 -11482.619 0.098660075 0.8474766 0.45
870000 299.40232 -213.89349 -8642.3645 -11383.114 0.1478115 0.78040795 0.45
875000 300.46794 23.703316 -8624.9835 -11375.487 0.021260277 0.96496648 0.45
880000 298.40697 20.053507 -8834.9602 -11566.598 0.25906036 0.647558 0.45
885000 299.89193 -56.830889 -8726.8039 -11472.035 -0.14632707 1.2781945 0.45
890000 297.49341 -718.63083 -8683.0987 -11406.373 0.017721028 0.97071226 0.45
895000 293.34825 -483.14011 -8698.5638 -11383.894 -0.34844876 1.7940698 0.45
900000 303.8984 71.405143 -8703.2466 -11485.153 -0.0040127852 1.0067537 0.45
905000 296.96955 99.337161 -8644.502 -11362.981 0.29986926 0.60471403 0.45
910000 294.13396 -276.63831 -8661.5829 -11354.105 -0.24102928 1.4982558 0.45
915000 303.26417 -43.876545 -8575.252 -11351.353 0.013417579 0.97774479 0.45
920000 305.27911 -346.57544 -8582.8329 -11377.379 -0.20901843 1.4199288 0.45
925000 307.27639 482.10278 -8628.8226 -11441.652 -0.26779925 1.5670667 0.45
930000 305.11633 324.47709 -8579.3587 -11372.414 0.68253083 0.31826378 0.45
935000 300.11916 -9.8766723 -8780.2986 -11527.61 -0.13402188 1.2520821 0.45
940000 295.78408 -67.021801 -8735.3706 -11442.998 0.46658388 0.45719462 0.45
945000 300.211 161.55245 -8703.5002 -11451.652 0.062310593 0.90075717 0.45
950000 302.51856 -145.81508 -8539.9241 -11309.199 0.019344642 0.96807218 0.45
955000 297.23872 14.140867 -8682.9686 -11403.912 -0.30285941 1.6619893 0.45
960000 296.19195 158.66375 -8772.8876 -11484.249 0.3298895 0.57501712 0.45
965000 293.56726 -302.80176 -8807.9639 -11495.298 0.16057514 0.76387726 0.45
970000 307.76289 234.82705 -8569.0805 -11386.363 0.40582434 0.50624817 0.45
975000 302.4391 -372.66289 -8569.3448 -11337.893 1.1335506 0.14935733 0.45
980000 292.59861 191.50447 -8796.4307 -11474.898 0.82080866 0.25237947 0.45
985000 301.61407 97.625218 -8720.889 -11481.885 0.12835918 0.80629208 0.45
990000 303.38224 -380.86284 -8666.6015 -11443.783 0.29943962 0.60514999 0.45
995000 299.25364 -139.10643 -8631.5948 -11370.983 0.033070141 0.94603876 0.45
1000000 295.67561 -191.48596 -8566.021 -11272.656 0.34200535 0.56344895 0.45
1005000 304.80384 39.665031 -8603.3665 -11393.562 0.75244137 0.28304697 0.45
1010000 298.87735 -181.49155 -8699.7359 -11435.679 0.23524427 0.67395098 0.45
1015000 289.92007 -182.58369 -8652.9669 -11306.915 -0.61857139 2.8224052 0.45
1020000 300.13923 106.07213 -8618.1949 -11365.69 0.15241071 0.77441051 0.45
1025000 307.39589 -312.91975 -8613.3088 -11427.232 0.44069144 0.47748897 0.45
1030000 298.41225 441.04111 -8696.1929 -11427.879 -0.1456028 1.2766425 0.45
1035000 306.71758 -95.739338 -8471.0526 -11278.766 0.69089513 0.31382964 0.45
1040000 302.24132 -415.80447 -8608.0891 -11374.827 0.0090309238 0.98496572 0.45
1045000 305.58772 -150.58406 -8563.9959 -11361.367 0.062478239 0.90050391 0.45
1050000 303.60025 21.785837 -8623.6613 -11402.839 0.18503623 0.73316896 0.45
1055000 293.38734 613.83617 -8606.7635 -11292.451 -0.2195833 1.4453164 0.45
1060000 305.11418 -29.208186 -8589.4319 -11382.468 -0.095889014 1.1745016 0.45
1065000 294.13176 470.07703 -8724.8028 -11417.305 0.28934127 0.61548789 0.45
1070000 309.64471 -634.00961 -8534.3395 -11368.848 -0.048186981 1.0841851 0.45
1075000 300.56742 -209.29645 -8615.1904 -11366.605 -0.26336339 1.5554498 0.45
1080000 297.94855 218.48741 -8697.7569 -11425.198 -0.0401787 1.0697186 0.45
1085000 308.40523 -177.4101 -8681.0198 -11504.182 0.32537753 0.57938558 0.45
1090000 295.63403 117.27818 -8609.1285 -11315.382 0.27576906 0.62966079 0.45
1095000 300.09566 635.58958 -8552.5989 -11299.695 -0.056458656 1.0993329 0.45
1100000 300.68272 375.84619 -8709.6822 -11462.152 0.28519281 0.61978578 0.45
1105000 303.34279 -980.64631 -8585.6781 -11362.499 0.34352221 0.56201715 0.45
1110000 304.45088 84.082657 -8606.3018 -11393.266 0.019454666 0.96789353 0.45
1115000 296.03894 543.18998 -8568.9408 -11278.901 0.38977572 0.5200614 0.45
1120000 307.38628 -200.46817 -8619.8059 -11433.641 -0.21765351 1.4406454 0.45
1125000 303.36463 -96.322086 -8596.6485 -11373.669 -0.050201944 1.0878558 0.45
1130000 295.03081 19.554539 -8820.2191 -11520.951 0.24816885 0.65949722 0.45
1135000 297.2534 -452.18389 -8614.3296 -11335.407 0.47102824 0.45379893 0.45
1140000 298.03519 -102.40026 -8663.5539 -11391.788 0.42591169 0.48947459 0.45
1145000 295.38879 -444.99161 -8629.1445 -11333.153 0.39655669 0.51417955 0.45
1150000 303.8409 -236.98919 -8595.3972 -11376.777 0.64097267 0.34124136 0.45
1155000 306.07517 -215.50846 -8588.4969 -11390.33 0.036055871 0.94131261 0.45
1160000 294.9636 -931.69596 -8675.0022 -11375.119 0.19752892 0.71796511 0.45
1165000 294.72276 -192.71028 -8637.3451 -11335.257 -0.00048188528 1.0008086 0.45
1170000 301.23614 -213.88646 -8482.7135 -11240.25 0.71933969 0.29920755 0.45
1175000 300.44993 375.9896 -8633.2248 -11383.564 0.30232015 0.60223308 0.45
1180000 300.16377 118.10917 -8654.5233 -11402.243 0.12296714 0.81361774 0.45
1185000 293.70358 210.30955 -8646.4181 -11335.001 0.30210616 0.6024493 0.45
1190000 304.75915 -651.08053 -8575.2958 -11365.082 -0.02759447 1.0473748 0.45
1195000 297.70391 95.378065 -8731.319 -11456.521 0.52250206 0.41626089 0.45
1200000 293.90642 -733.78695 -8697.185 -11387.624 0.13079675 0.80300207 0.45
1205000 303.05224 -511.38179 -8632.6207 -11406.781 -0.20143249 1.4019752 0.45
1210000 293.80664 245.08881 -8756.1441 -11445.67 0.37969913 0.52892642 0.45
1215000 296.59811 308.46776 -8624.2865 -11339.366 0.14440905 0.78487467 0.45
1220000 303.74266 188.84272 -8605.9211 -11386.402 -0.092746405 1.1683266 0.45
1225000 299.9013 -466.73438 -8576.203 -11321.52 0.27417371 0.63134804 0.45
1230000 299.66611 -174.43092 -8604.5105 -11347.674 0.47991062 0.44708777 0.45
1235000 295.89844 394.40733 -8789.3714 -11498.046 0.088629157 0.86185673 0.45
1240000 298.78384 419.34789 -8688.5635 -11423.651 0.22218371 0.68887865 0.45
1245000 299.90866 183.59906 -8698.2559 -11443.64 1.1590193 0.143111 0.45
1250000 296.01051 196.22426 -8831.5506 -11541.251 -0.04226137 1.0734621 0.45
1255000 292.09199 -163.44863 -8711.8649 -11385.695 0.57648767 0.38022263 0.45
1260000 298.83471 -194.96215 -8646.8698 -11382.423 0.10966149 0.83198091 0.45
1265000 302.24158 163.34413 -8653.0984 -11419.838 0.51878502 0.41886437 0.45
1270000 298.29186 -765.77064 -8697.9423 -11428.526 -0.40185995 1.9622238 0.45
1275000 300.55952 -162.42423 -8614.8996 -11366.242 -0.43706076 2.0815736 0.45
1280000 294.52892 156.17026 -8718.8337 -11414.971 0.010263439 0.98293149 0.45
1285000 301.40565 -778.44393 -8670.527 -11429.615 0.025111338 0.95875312 0.45
1290000 294.20057 -918.07774 -8683.4672 -11376.599 0.046386022 0.92514227 0.45
1295000 301.09196 -665.75324 -8687.0149 -11443.231 0.11169829 0.82914327 0.45
1300000 294.16167 -297.06724 -8708.7055 -11401.481 0.11765896 0.82089447 0.45
1305000 303.07886 -538.32897 -8514.6586 -11289.063 -0.047420749 1.0827925 0.45
1310000 302.36674 -40.952458 -8536.8784 -11304.764 -0.42539639 2.0412418 0.45
1315000 302.05477 -60.391628 -8662.9591 -11427.989 0.13452485 0.79799615 0.45
1320000 303.48158 71.63406 -8661.3057 -11439.397 -0.039130791 1.0678399 0.45
1325000 296.35737 -261.05768 -8561.6568 -11274.532 0.44670407 0.47269742 0.45
1330000 296.29207 -147.71061 -8543.8084 -11256.086 0.2909439 0.61383553 0.45
1335000 301.48737 453.77169 -8648.236 -11408.072 0.078354877 0.87683873 0.45
1340000 300.90975 -596.76946 -8621.8298 -11376.378 0.49429189 0.43643168 0.45
1345000 295.08431 -540.90158 -8694.8895 -11396.111 0.17025999 0.75156807 0.45
1350000 296.63006 -197.97304 -8632.9441 -11348.316 -0.29504955 1.6403589 0.45
1355000 305.25857 -242.97453 -8473.9923 -11268.35 0.069838933 0.88945392 0.45
1360000 296.22833 -151.24398 -8660.529 -11372.223 -0.28031505 1.6003133 0.45
1365000 301.25457 -383.71973 -8610.3716 -11368.076 -0.18330657 1.3599906 0.45
1370000 300.8142 -179.49364 -8641.5538 -11395.227 0.23629239 0.67276715 0.45
1375000 307.62118 -82.315057 -8464.9289 -11280.914 0.024560511 0.95963938 0.45
1380000 303.12816 -335.58742 -8512.0211 -11286.877 0.30238814 0.60216441 0.45
1385000 304.36118 711.2159 -8577.0597 -11363.203 0.34444857 0.56114453 0.45
1390000 294.15072 406.74931 -8678.8526 -11371.528 0.29195829 0.61279196 0.45
1395000 300.50629 -164.22554 -8592.1543 -11343.009 0.098759052 0.84733591 0.45
1400000 297.37345 -98.001104 -8741.5121 -11463.689 0.27444766 0.63105799 0.45
1405000 294.17572 -86.526127 -8712.3447 -11405.249 0.4297415 0.48634023 0.45
1410000 310.48104 141.84417 -8647.4854 -11489.65 0.86645808 0.23377559 0.45
1415000 310.06801 -433.29574 -8486.7744 -11325.158 -0.21510676 1.4345042 0.45
1420000 303.98547 -69.701496 -8551.8036 -11334.507 0.16419779 0.75924955 0.45
1425000 301.40096 -115.67827 -8639.4818 -11398.527 0.20161321 0.71306316 0.45
1430000 299.1258 -79.769416 -8721.6844 -11459.902 0.36298014 0.54396978 0.45
1435000 298.45349 180.92871 -8700.7025 -11432.766 0.43843749 0.47929766 0.45
1440000 299.14006 146.72026 -8675.5643 -11413.913 0.50244279 0.43050527 0.45
1445000 299.98035 -404.81666 -8725.6961 -11471.737 0.49995597 0.43230482 0.45
1450000 295.10222 59.166328 -8728.5327 -11429.918 0.04154017 0.93269286 0.45
1455000 292.52514 144.30376 -8743.1245 -11420.919 0.04910241 0.92093649 0.45
1460000 303.68948 -264.34132 -8631.6334 -11411.627 0.23528019 0.67391039 0.45
1465000 302.97467 98.874471 -8689.2883 -11462.739 0.21805801 0.69366252 0.45
1470000 294.50716 133.30708 -8625.4721 -11321.411 0.98143982 0.19276882 0.45
1475000 302.04729 -120.74445 -8637.7677 -11402.729 0.4707242 0.45403042 0.45
1480000 305.16876 -436.598 -8614.8793 -11408.415 0.27111226 0.63459852 0.45
1485000 297.20205 -166.62152 -8598.691 -11319.299 -0.24681532 1.5128679 0.45
1490000 299.73617 -126.47006 -8649.4834 -11393.289 0.47833671 0.44826968 0.45
1495000 295.64416 481.3869 -8697.4378 -11403.784 0.1128182 0.82758717 0.45
1500000 301.34876 -64.948239 -8570.0291 -11328.596 0.10524924 0.83816132 0.45
1505000 297.45753 538.92423 -8678.9073 -11401.854 0.15764246 0.76764423 0.45
1510000 304.47978 -609.79308 -8491.9652 -11279.194 0.40940159 0.50321953 0.45
1515000 301.26466 -130.2245 -8572.0691 -11329.866 0.89811777 0.22168463 0.45
1520000 306.33064 472.83128 -8553.0557 -11357.227 -0.3949103 1.9394824 0.45
1525000 303.77309 446.96086 -8658.8797 -11439.639 0.23907939 0.66962936 0.45
1530000 305.94257 -462.96121 -8683.4501 -11484.069 -0.29365623 1.6365296 0.45
1535000 296.45268 -725.6647 -8564.4464 -11278.194 0.031785638 0.94807932 0.45
1540000 297.90338 -418.20316 -8566.3092 -11293.337 0.50491901 0.42872083 0.45
1545000 304.3796 -281.11491 -8571.3965 -11357.708 0.26286914 0.64343405 0.45
1550000 296.71481 -62.772449 -8680.9078 -11397.055 0.15669974 0.76885909 0.45
1555000 297.50225 148.74592 -8754.0913 -11477.447 0.14286636 0.78690833 0.45
1560000 300.52393 373.85791 -8638.4601 -11389.477 0.089292836 0.8608978 0.45
1565000 295.18741 -197.82529 -8603.6291 -11305.795 0.36113621 0.54565489 0.45
1570000 295.50662 -297.43989 -8727.7936 -11432.881 0.24895806 0.65862474 0.45
1575000 306.12787 745.92559 -8609.3706 -11411.686 0.42705392 0.48853767 0.45
1580000 300.84367 544.00229 -8635.6029 -11389.546 -0.20268104 1.4049145 0.45
1585000 293.01964 208.25986 -8624.1146 -11306.436 -0.013645123 1.0231522 0.45
1590000 304.09 110.80761 -8602.177 -11385.837 -0.39136115 1.9279703 0.45
1595000 289.74205 -521.57012 -8666.417 -11318.735 0.30601242 0.59851474 0.45
1600000 297.3494 368.04946 -8684.986 -11406.943 0.079346518 0.87538143 0.45
1605000 301.19957 -293.44562 -8521.9202 -11279.121 0.49408391 0.43658396 0.45
1610000 299.66627 -592.72965 -8750.1489 -11493.314 -0.20726596 1.415761 0.45
1615000 301.32181 329.96166 -8575.077 -11333.397 0.21514479 0.69706049 0.45
1620000 297.46259 -575.7077 -8604.3396 -11327.332 0.051950054 0.91654801 0.45
1625000 301.143 -578.27016 -8622.6936 -11379.377 0.33929754 0.566014 0.45
1630000 301.9449 119.02272 -8744.8752 -11508.899 0.25690123 0.64990753 0.45
1635000 292.31769 -256.96526 -8729.3974 -11405.293 0.2041501 0.71003527 0.45
1640000 305.17316 -224.04815 -8619.2426 -11412.818 0.61612842 0.35576261 0.45
1645000 299.82547 -453.0871 -8601.8345 -11346.457 0.44515417 0.47392794 0.45
1650000 300.70213 -184.15313 -8604.5269 -11357.175 0.40413562 0.50768423 0.45
1655000 298.34797 241.12842 -8736.9407 -11468.038 0.2219039 0.68920205 0.45
1660000 305.65546 522.2866 -8702.2765 -11500.267 -0.093142651 1.1691034 0.45
1665000 296.92311 -22.202256 -8648.9808 -11367.035 0.21695848 0.69494306 0.45
1670000 293.71721 -216.98365 -8726.8596 -11415.567 0.062675713 0.90020567 0.45
1675000 302.06866 69.039243 -8665.567 -11430.724 0.0012561112 0.99789522 0.45
1680000 292.51483 -764.83087 -8759.3069 -11437.007 0.0022259364 0.99627318 0.45
1685000 300.70748 -239.98915 -8682.5295 -11435.226 0.21854685 0.69309397 0.45
1690000 303.31754 36.443117 -8554.7105 -11331.3 0.18904617 0.72825402 0.45
1695000 300.96783 -365.40002 -8606.9996 -11362.08 0.21317894 0.69936284 0.45
1700000 301.78038 -460.56572 -8703.0763 -11465.594 -0.074311844 1.1327524 0.45
1705000 299.08328 224.74817 -8680.6969 -11418.526 0.14954235 0.77814547 0.45
1710000 303.24064 298.73582 -8637.4191 -11413.304 -0.11628651 1.2153822 0.45
1715000 299.1988 535.86954 -8722.2318 -11461.118 0.51289768 0.42302132 0.45
1720000 300.88716 -11.654893 -8624.0905 -11378.432 0.62281958 0.35179195 0.45
1725000 306.59581 -286.69581 -8574.7957 -11381.394 0.3964476 0.51427364 0.45
1730000 302.58784 590.55523 -8670.9964 -11440.906 -0.28655798 1.6171597 0.45
1735000 295.17235 -60.036989 -8631.671 -11333.699 0.72231294 0.29771902 0.45
1740000 290.06228 -254.79282 -8715.6619 -11370.912 0.35583392 0.55052961 0.45
1745000 306.47487 418.58552 -8590.4226 -11395.914 -0.04975774 1.0870455 0.45
1750000 296.74674 -73.367187 -8727.0183 -11443.458 -0.27066543 1.5746188 0.45
1755000 299.03541 551.77198 -8712.6905 -11450.081 -0.35865936 1.8250619 0.45
1760000 288.98684 -380.17132 -8775.8546 -11421.26 -0.17754854 1.3469184 0.45
1765000 300.76459 -662.80282 -8671.5414 -11424.761 0.078118597 0.87718632 0.45
1770000 301.47287 -498.34628 -8675.582 -11435.285 0.57886218 0.37871122 0.45
1775000 307.18565 -70.676548 -8554.9531 -11366.951 0.38766498 0.52190597 0.45
1780000 302.58164 -329.49774 -8638.9781 -11408.831 0.53149245 0.41003059 0.45
1785000 307.4086 294.59322 -8586.4793 -11400.518 0.34963097 0.55628768 0.45
1790000 295.81491 -366.57154 -8756.8143 -11464.724 0.61653346 0.35552098 0.45
1795000 296.46712 18.92361 -8640.9928 -11354.873 0.21158778 0.70123194 0.45
1800000 290.9851 -805.74081 -8636.1049 -11299.802 0.36361854 0.54338759 0.45
1805000 291.6313 -58.207903 -8707.0768 -11376.689 0.2659117 0.6401586 0.45
1810000 299.14324 327.45026 -8613.3385 -11351.716 0.58264334 0.37631684 0.45
1815000 295.3441 37.594139 -8747.5577 -11451.158 0.10312363 0.84115511 0.45
1820000 297.19616 596.87014 -8601.4315 -11321.985 0.11690702 0.82193051 0.45
1825000 305.23709 -229.45704 -8586.9328 -11381.094 -0.070794327 1.1260885 0.45
1830000 308.48265 -50.225625 -8595.8609 -11419.732 0.28577292 0.61918297 0.45
1835000 301.67215 30.600339 -8561.9509 -11323.478 0.67464985 0.32249901 0.45
1840000 297.44022 -46.915689 -8760.5329 -11483.321 0.20308399 0.71130615 0.45
1845000 294.56439 121.7989 -8819.2766 -11515.739 -0.13859762 1.2617292 0.45
1850000 303.92475 63.511256 -8655.7131 -11437.861 -0.064617898 1.1144821 0.45
1855000 302.36347 -403.0262 -8663.1963 -11431.052 0.63223295 0.34628081 0.45
1860000 292.88227 124.53259 -8622.4528 -11303.517 0.21782313 0.69393587 0.45
1865000 299.49141 1.3922328 -8592.8243 -11334.389 0.024359522 0.95996296 0.45
1870000 295.36403 -1.848842 -8534.7607 -11238.543 0.53331666 0.40877784 0.45
1875000 299.5254 -303.35635 -8642.4199 -11384.296 0.12049946 0.8169925 0.45
1880000 302.15027 -233.4192 -8607.1984 -11373.102 0.42967343 0.48639576 0.45
1885000 293.78387 -312.31798 -8576.6303 -11265.948 0.62050206 0.35316217 0.45
1890000 296.33987 227.42925 -8675.0988 -11387.814 -0.2387251 1.4924762 0.45
1895000 296.4116 -297.41585 -8695.6693 -11409.041 0.1899345 0.72716967 0.45
1900000 305.04631 -744.8928 -8495.6073 -11288.022 -0.092917858 1.1686627 0.45
1905000 299.13767 -233.05542 -8771.8955 -11510.222 -0.053515786 1.0939196 0.45
1910000 301.18529 391.32364 -8594.238 -11351.309 0.17761387 0.74235415 0.45
1915000 304.53139 -205.26743 -8615.1863 -11402.887 -0.65441918 2.9973254 0.45
1920000 304.46794 75.506851 -8696.0461 -11483.166 0.28757039 0.6173189 0.45
1925000 295.83229 -40.226799 -8677.0683 -11385.137 0.34338584 0.56214572 0.45
1930000 298.91694 72.305481 -8662.7622 -11399.068 -0.45255095 2.1363683 0.45
1935000 297.28693 -277.78411 -8678.223 -11399.608 0.32165864 0.58301111 0.45
1940000 295.22194 -153.48885 -8737.0529 -11439.534 0.47753767 0.4488709 0.45
1945000 298.41366 0.98105216 -8615.733 -11347.432 0.061208942 0.90242323 0.45
1950000 298.47932 -461.39566 -8587.8993 -11320.199 0.41883297 0.49532116 0.45
1955000 293.30456 -530.72887 -8712.242 -11397.172 -0.052983042 1.0929425 0.45
1960000 307.27812 -609.68084 -8563.1295 -11375.974 0.10863685 0.83341209 0.45
1965000 309.21876 -661.65884 -8619.5376 -11450.147 -0.00074060514 1.0012431 0.45
1970000 294.16474 130.9219 -8662.5966 -11355.4 -0.048761848 1.0852311 0.45
1975000 293.87023 -652.42226 -8587.2681 -11277.376 -0.42701916 2.0468057 0.45
1980000 302.66906 -396.94893 -8576.3291 -11346.982 0.55938449 0.39128874 0.45
1985000 304.00863 167.22102 -8525.9503 -11308.866 -0.12417188 1.2315647 0.45
1990000 299.53376 -234.11494 -8528.8821 -11270.834 0.58392743 0.37550715 0.45
1995000 296.20959 -99.022727 -8599.3854 -11310.908 0.10920765 0.83261451 0.45
2000000 307.40367 -179.44965 -8545.6064 -11359.6 0.485016 0.44327537 0.45
Loop time of 4787.7 on 1 procs for 2000000 steps with 3072 atoms
Performance: 36.092 ns/day, 0.665 hours/ns, 417.737 timesteps/s
95.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 | 1015.1 | 1015.1 | 1015.1 | 0.0 | 21.20
Bond | 121.19 | 121.19 | 121.19 | 0.0 | 2.53
Kspace | 3455.1 | 3455.1 | 3455.1 | 0.0 | 72.17
Neigh | 8.7475 | 8.7475 | 8.7475 | 0.0 | 0.18
Comm | 58.679 | 58.679 | 58.679 | 0.0 | 1.23
Output | 0.60209 | 0.60209 | 0.60209 | 0.0 | 0.01
Modify | 81.328 | 81.328 | 81.328 | 0.0 | 1.70
Other | | 46.88 | | | 0.98
Nlocal: 3072 ave 3072 max 3072 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 8395 ave 8395 max 8395 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 = -1
Ave neighs/atom = -0.00032552083
Ave special neighs/atom = 2
Neighbor list builds = 93794
Dangerous builds = 0
Total wall time: 1:31:34

View File

@ -0,0 +1,22 @@
# Time-averaged data for fix FEP
# TimeStep c_TA[1] c_TA[2] c_TA[3] v_gamma_v
100000 0.168677 0.863546 0.45 65.7437
200000 0.169722 0.861354 0.45 66.6859
300000 0.165507 0.868407 0.45 63.1899
400000 0.162311 0.875704 0.45 60.7859
500000 0.165468 0.872729 0.45 63.2053
600000 0.165267 0.873825 0.45 63.1828
700000 0.167824 0.869356 0.45 65.1722
800000 0.170332 0.866538 0.45 67.0749
900000 0.164396 0.875043 0.45 62.4639
1000000 0.164738 0.87663 0.45 62.5659
1100000 0.168395 0.870496 0.45 65.415
1200000 0.170147 0.867104 0.45 66.7132
1300000 0.170509 0.866709 0.45 66.9833
1400000 0.171152 0.865294 0.45 67.5598
1500000 0.172363 0.863433 0.45 68.547
1600000 0.171538 0.864062 0.45 67.8359
1700000 0.171662 0.864029 0.45 67.9145
1800000 0.170202 0.866069 0.45 66.7697
1900000 0.171403 0.864162 0.45 67.6313
2000000 0.170962 0.864753 0.45 67.2314

View File

@ -28,6 +28,11 @@ HIP_HOST_INCLUDE += -I./
# path to hipcub
HIP_HOST_INCLUDE += -I$(HIP_PATH)/../include
ifeq (amd,$(HIP_PLATFORM))
# newer version of ROCm (5.1+) require c++14 for rocprim
HIP_OPTS += -std=c++14
endif
# use mpi
HIP_HOST_OPTS += -DMPI_GERYON -DUCL_NO_EXIT
# this settings should match LAMMPS Makefile

View File

@ -5,7 +5,14 @@
import sysconfig
import ctypes
library = sysconfig.get_config_vars('INSTSONAME')[0]
pylib = ctypes.CDLL(library)
try:
pylib = ctypes.CDLL(library)
except OSError as e:
if pylib.endswith(".a"):
pylib.strip(".a") + ".so"
pylib = ctypes.CDLL(library)
else:
raise e
if not pylib.Py_IsInitialized():
raise RuntimeError("This interpreter is not compatible with python-based mliap for LAMMPS.")
del sysconfig, ctypes, library, pylib

View File

@ -19,10 +19,75 @@ import numpy as np
import torch
def calc_n_params(model):
"""
Returns the sum of two decimal numbers in binary digits.
Parameters:
model (torch.nn.Module): Network model that maps descriptors to a per atom attribute
Returns:
n_params (int): Number of NN model parameters
"""
return sum(p.nelement() for p in model.parameters())
class TorchWrapper(torch.nn.Module):
def __init__(self, model,n_descriptors,n_elements,n_params=None,device=None,dtype=torch.float64):
"""
A class to wrap Modules to ensure lammps mliap compatability.
...
Attributes
----------
model : torch.nn.Module
Network model that maps descriptors to a per atom attribute
device : torch.nn.Module (None)
Accelerator device
dtype : torch.dtype (torch.float64)
Dtype to use on device
n_params : torch.nn.Module (None)
Number of NN model parameters
n_descriptors : int
Max number of per atom descriptors
n_elements : int
Max number of elements
Methods
-------
forward(descriptors, elems):
Feeds descriptors to network model to produce per atom energies and forces.
"""
def __init__(self, model, n_descriptors, n_elements, n_params=None, device=None, dtype=torch.float64):
"""
Constructs all the necessary attributes for the network module.
Parameters
----------
model : torch.nn.Module
Network model that maps descriptors to a per atom attribute
n_descriptors : int
Max number of per atom descriptors
n_elements : int
Max number of elements
n_params : torch.nn.Module (None)
Number of NN model parameters
device : torch.nn.Module (None)
Accelerator device
dtype : torch.dtype (torch.float64)
Dtype to use on device
"""
super().__init__()
self.model = model
@ -40,26 +105,222 @@ class TorchWrapper(torch.nn.Module):
self.n_descriptors = n_descriptors
self.n_elements = n_elements
def forward(self, elems, bispectrum, beta, energy):
def forward(self, elems, descriptors, beta, energy):
"""
Takes element types and descriptors calculated via lammps and
calculates the per atom energies and forces.
bispectrum = torch.from_numpy(bispectrum).to(dtype=self.dtype, device=self.device).requires_grad_(True)
Parameters
----------
elems : numpy.array
Per atom element types
descriptors : numpy.array
Per atom descriptors
beta : numpy.array
Expired beta array to be filled with new betas
energy : numpy.array
Expired per atom energy array to be filled with new per atom energy
(Note: This is a pointer to the lammps per atom energies)
Returns
-------
None
"""
descriptors = torch.from_numpy(descriptors).to(dtype=self.dtype, device=self.device).requires_grad_(True)
elems = torch.from_numpy(elems).to(dtype=torch.long, device=self.device) - 1
with torch.autograd.enable_grad():
energy_nn = self.model(bispectrum, elems)
energy_nn = self.model(descriptors, elems)
if energy_nn.ndim > 1:
energy_nn = energy_nn.flatten()
beta_nn = torch.autograd.grad(energy_nn.sum(), bispectrum)[0]
beta_nn = torch.autograd.grad(energy_nn.sum(), descriptors)[0]
beta[:] = beta_nn.detach().cpu().numpy().astype(np.float64)
energy[:] = energy_nn.detach().cpu().numpy().astype(np.float64)
class IgnoreElems(torch.nn.Module):
def __init__(self,subnet):
"""
A class to represent a NN model agnostic of element typing.
...
Attributes
----------
subnet : torch.nn.Module
Network model that maps descriptors to a per atom attribute
Methods
-------
forward(descriptors, elems):
Feeds descriptors to network model
"""
def __init__(self, subnet):
"""
Constructs all the necessary attributes for the network module.
Parameters
----------
subnet : torch.nn.Module
Network model that maps descriptors to a per atom attribute
"""
super().__init__()
self.subnet = subnet
def forward(self,bispectrum,elems):
return self.subnet(bispectrum)
def forward(self, descriptors, elems):
"""
Feeds descriptors to network model
Parameters
----------
descriptors : torch.tensor
Per atom descriptors
elems : torch.tensor
Per atom element types
Returns
-------
self.subnet(descriptors) : torch.tensor
Per atom attribute computed by the network model
"""
return self.subnet(descriptors)
class UnpackElems(torch.nn.Module):
"""
A class to represent a NN model pseudo-agnostic of element typing for
systems with multiple element typings.
...
Attributes
----------
subnet : torch.nn.Module
Network model that maps descriptors to a per atom attribute
n_types : int
Number of atom types used in training the NN model.
Methods
-------
forward(descriptors, elems):
Feeds descriptors to network model after adding zeros into
descriptor columns relating to different atom types
"""
def __init__(self, subnet, n_types):
"""
Constructs all the necessary attributes for the network module.
Parameters
----------
subnet : torch.nn.Module
Network model that maps descriptors to a per atom attribute.
n_types : int
Number of atom types used in training the NN model.
"""
super().__init__()
self.subnet = subnet
self.n_types = n_types
def forward(self, descriptors, elems):
"""
Feeds descriptors to network model after adding zeros into
descriptor columns relating to different atom types
Parameters
----------
descriptors : torch.tensor
Per atom descriptors
elems : torch.tensor
Per atom element types
Returns
-------
self.subnet(descriptors) : torch.tensor
Per atom attribute computed by the network model
"""
unpacked_descriptors = torch.zeros(elems.shape[0], self.n_types, descriptors.shape[1], dtype=torch.float64)
for i, ind in enumerate(elems):
unpacked_descriptors[i, ind, :] = descriptors[i]
return self.subnet(torch.reshape(unpacked_descriptors, (elems.shape[0], -1)), elems)
class ElemwiseModels(torch.nn.Module):
"""
A class to represent a NN model dependent on element typing.
...
Attributes
----------
subnets : list of torch.nn.Modules
Per element type network models that maps per element type
descriptors to a per atom attribute.
n_types : int
Number of atom types used in training the NN model.
Methods
-------
forward(descriptors, elems):
Feeds descriptors to network model after adding zeros into
descriptor columns relating to different atom types
"""
def __init__(self, subnets, n_types):
"""
Constructs all the necessary attributes for the network module.
Parameters
----------
subnets : list of torch.nn.Modules
Per element type network models that maps per element
type descriptors to a per atom attribute.
n_types : int
Number of atom types used in training the NN model.
"""
super().__init__()
self.subnets = subnets
self.n_types = n_types
def forward(self, descriptors, elems):
"""
Feeds descriptors to network model after adding zeros into
descriptor columns relating to different atom types
Parameters
----------
descriptors : torch.tensor
Per atom descriptors
elems : torch.tensor
Per atom element types
Returns
-------
self.subnets(descriptors) : torch.tensor
Per atom attribute computed by the network model
"""
per_atom_attributes = torch.zeros(elems.size[0])
given_elems, elem_indices = torch.unique(elems, return_inverse=True)
for i, elem in enumerate(given_elems):
per_atom_attribute[elem_indices == i] = self.subnets[elem](descriptors[elem_indices == i])
return per_atom_attributes

2
src/.gitignore vendored
View File

@ -460,6 +460,8 @@
/compute_fabric.h
/compute_fep.cpp
/compute_fep.h
/compute_fep_ta.cpp
/compute_fep_ta.h
/compute_force_tally.cpp
/compute_force_tally.h
/compute_gyration_shape.cpp

View File

@ -46,6 +46,8 @@ PairDPD::PairDPD(LAMMPS *lmp) : Pair(lmp)
PairDPD::~PairDPD()
{
if (copymode) return;
if (allocated) {
memory->destroy(setflag);
memory->destroy(cutsq);

View File

@ -49,7 +49,7 @@ class PairDPD : public Pair {
double **sigma;
class RanMars *random;
void allocate();
virtual void allocate();
};
} // namespace LAMMPS_NS

View File

@ -47,6 +47,8 @@ PairDPDExt::PairDPDExt(LAMMPS *lmp) : Pair(lmp)
PairDPDExt::~PairDPDExt()
{
if (copymode) return;
if (allocated) {
memory->destroy(setflag);
memory->destroy(cutsq);

View File

@ -45,12 +45,12 @@ class PairDPDExt : public Pair {
double cut_global, temperature;
int seed;
double **cut;
double **a0, **gamma, **gammaII, **gammaT;
double **a0, **gamma, **gammaT;
double **sigma, **sigmaT;
double **ws, **wsT;
class RanMars *random;
void allocate();
virtual void allocate();
};
} // namespace LAMMPS_NS

View File

@ -73,6 +73,7 @@ fi
if (test $1 = "DPD-BASIC") then
depend GPU
depend KOKKOS
depend OPENMP
depend INTEL
fi

View File

@ -30,6 +30,8 @@ action () {
action compute_fep.cpp
action compute_fep.h
action compute_fep_ta.cpp
action compute_fep_ta.h
action fix_adapt_fep.cpp
action fix_adapt_fep.h
action pair_coul_cut_soft.cpp

517
src/FEP/compute_fep_ta.cpp Normal file
View File

@ -0,0 +1,517 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
https://www.lammps.org/, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing author: Shifeng Ke (Zhejiang University)
------------------------------------------------------------------------- */
#include "compute_fep_ta.h"
#include "angle.h"
#include "atom.h"
#include "bond.h"
#include "comm.h"
#include "dihedral.h"
#include "domain.h"
#include "error.h"
#include "fix.h"
#include "force.h"
#include "improper.h"
#include "kspace.h"
#include "memory.h"
#include "modify.h"
#include "neighbor.h"
#include "pair.h"
#include "timer.h"
#include "update.h"
#include <cmath>
#include <cstring>
using namespace LAMMPS_NS;
enum { X, Y, Z };
/* ---------------------------------------------------------------------- */
ComputeFEPTA::ComputeFEPTA(LAMMPS *lmp, int narg, char **arg) : Compute(lmp, narg, arg)
{
if (narg < 6) error->all(FLERR, "Illegal number of arguments in compute fep/ta");
scalar_flag = 0;
vector_flag = 1;
size_vector = 3;
extvector = 0;
vector = new double[size_vector];
fepinitflag = 0; // avoid init to run entirely when called by write_data
temp_fep = utils::numeric(FLERR, arg[3], false, lmp);
if (strcmp(arg[4], "xy") == 0) {
tan_axis1 = X;
tan_axis2 = Y;
norm_axis = Z;
} else if (strcmp(arg[4], "xz") == 0) {
tan_axis1 = X;
tan_axis2 = Z;
norm_axis = Y;
} else if (strcmp(arg[4], "yz") == 0) {
tan_axis1 = Y;
tan_axis2 = Z;
norm_axis = X;
} else
error->all(FLERR, "Illegal arguments in compute fep/ta");
scale_factor = utils::numeric(FLERR, arg[5], false, lmp);
// optional keywords
tailflag = 0;
int iarg = 6;
while (iarg < narg) {
if (strcmp(arg[iarg], "tail") == 0) {
if (iarg + 2 > narg) error->all(FLERR, "Illegal optional keyword in compute fep/ta");
tailflag = utils::logical(FLERR, arg[iarg + 1], false, lmp);
iarg += 2;
} else
error->all(FLERR, "Illegal optional keyword in compute fep/ta");
}
// allocate space for position, force, energy, virial arrays
x_orig = nullptr;
f_orig = nullptr;
peatom_orig = keatom_orig = nullptr;
pvatom_orig = kvatom_orig = nullptr;
allocate_storage();
fixgpu = nullptr;
}
/* ---------------------------------------------------------------------- */
ComputeFEPTA::~ComputeFEPTA()
{
delete[] vector;
deallocate_storage();
}
/* ---------------------------------------------------------------------- */
void ComputeFEPTA::init()
{
int i, j;
if (!fepinitflag) // avoid init to run entirely when called by write_data
fepinitflag = 1;
else
return;
// setup and error checks
if (domain->dimension == 2) { error->all(FLERR, "Cannot compute fep/ta in 2d simulation"); }
if (tailflag) {
if (force->pair->tail_flag == 0)
error->all(FLERR,
"Compute fep/ta tail when pair style does not "
"compute tail corrections");
}
// detect if package gpu is present
int ifixgpu = modify->find_fix("package_gpu");
if (ifixgpu >= 0) fixgpu = modify->fix[ifixgpu];
if (comm->me == 0) {
auto mesg = fmt::format("FEP/TA settings ...\n temperature = {:f}\n", temp_fep);
mesg += fmt::format(" scale factor = {:f}\n", scale_factor);
mesg += fmt::format(" tail {}\n", (tailflag ? "yes" : "no"));
utils::logmesg(lmp, mesg);
}
}
/* ---------------------------------------------------------------------- */
void ComputeFEPTA::compute_vector()
{
double pe0, pe1;
eflag = 1;
vflag = 0;
invoked_vector = update->ntimestep;
if (atom->nmax > nmax) { // reallocate working arrays if necessary
deallocate_storage();
allocate_storage();
}
backup_xfev(); // backup position, force, energy, virial array values
backup_box(); // backup box size
timer->stamp();
if (force->pair && force->pair->compute_flag) {
force->pair->compute(eflag, vflag);
timer->stamp(Timer::PAIR);
}
if (atom->molecular != Atom::ATOMIC) {
if (force->bond) force->bond->compute(eflag, vflag);
if (force->angle) force->angle->compute(eflag, vflag);
if (force->dihedral) force->dihedral->compute(eflag, vflag);
if (force->improper) force->improper->compute(eflag, vflag);
timer->stamp(Timer::BOND);
}
if (force->kspace && force->kspace->compute_flag) {
force->kspace->compute(eflag, vflag);
timer->stamp(Timer::KSPACE);
}
// accumulate force/energy/virial from /gpu pair styles
// this is required as to empty the answer queue,
// otherwise the force compute on the GPU in the next step would be incorrect
if (fixgpu) fixgpu->post_force(vflag);
pe0 = compute_pe();
change_box();
timer->stamp();
if (force->pair && force->pair->compute_flag) {
force->pair->compute(eflag, vflag);
timer->stamp(Timer::PAIR);
}
if (atom->molecular != Atom::ATOMIC) {
if (force->bond) force->bond->compute(eflag, vflag);
if (force->angle) force->angle->compute(eflag, vflag);
if (force->dihedral) force->dihedral->compute(eflag, vflag);
if (force->improper) force->improper->compute(eflag, vflag);
timer->stamp(Timer::BOND);
}
if (force->kspace && force->kspace->compute_flag) {
force->kspace->compute(eflag, vflag);
timer->stamp(Timer::KSPACE);
}
// accumulate force/energy/virial from /gpu pair styles
// this is required as to empty the answer queue,
// otherwise the force compute on the GPU in the next step would be incorrect
if (fixgpu) fixgpu->post_force(vflag);
pe1 = compute_pe();
restore_xfev(); // restore position, force, energy, virial array values
restore_box(); // restore box size
vector[0] = pe1 - pe0;
vector[1] = exp(-(pe1 - pe0) / (force->boltz * temp_fep));
vector[2] = area_orig * (scale_factor - 1.0);
}
/* ----------------------------------------------------------------------
obtain potential energy from lammps accumulators
------------------------------------------------------------------------- */
double ComputeFEPTA::compute_pe()
{
double eng, eng_potential;
eng = 0.0;
if (force->pair) eng = force->pair->eng_vdwl + force->pair->eng_coul;
if (atom->molecular != Atom::ATOMIC) {
if (force->bond) eng += force->bond->energy;
if (force->angle) eng += force->angle->energy;
if (force->dihedral) eng += force->dihedral->energy;
if (force->improper) eng += force->improper->energy;
}
MPI_Allreduce(&eng, &eng_potential, 1, MPI_DOUBLE, MPI_SUM, world);
if (tailflag) {
double volume = domain->xprd * domain->yprd * domain->zprd;
eng_potential += force->pair->etail / volume;
}
if (force->kspace) eng_potential += force->kspace->energy;
return eng_potential;
}
/* ----------------------------------------------------------------------
apply changes to box
------------------------------------------------------------------------- */
void ComputeFEPTA::change_box()
{
int i;
double **x = atom->x;
int natom = atom->nlocal + atom->nghost;
for (i = 0; i < natom; i++) domain->x2lamda(x[i], x[i]);
domain->boxhi[tan_axis1] *= sqrt(scale_factor);
domain->boxlo[tan_axis1] *= sqrt(scale_factor);
domain->boxhi[tan_axis2] *= sqrt(scale_factor);
domain->boxlo[tan_axis2] *= sqrt(scale_factor);
domain->boxhi[norm_axis] /= scale_factor;
domain->boxlo[norm_axis] /= scale_factor;
domain->set_global_box();
domain->set_local_box();
// remap atom position
for (i = 0; i < natom; i++) domain->lamda2x(x[i], x[i]);
if (force->kspace) force->kspace->setup();
}
/* ----------------------------------------------------------------------
backup box size
------------------------------------------------------------------------- */
void ComputeFEPTA::backup_box()
{
for (int i = 0; i < domain->dimension; i++) {
boxhi_orig[i] = domain->boxhi[i];
boxlo_orig[i] = domain->boxlo[i];
}
area_orig = domain->prd[tan_axis1] * domain->prd[tan_axis2];
}
/* ----------------------------------------------------------------------
restore box size to original values
------------------------------------------------------------------------- */
void ComputeFEPTA::restore_box()
{
for (int i = 0; i < domain->dimension; i++) {
domain->boxhi[i] = boxhi_orig[i];
domain->boxlo[i] = boxlo_orig[i];
}
domain->set_global_box();
domain->set_local_box();
if (force->kspace) force->kspace->setup();
}
/* ----------------------------------------------------------------------
manage storage for position, force, energy, virial arrays
------------------------------------------------------------------------- */
void ComputeFEPTA::allocate_storage()
{
nmax = atom->nmax;
memory->create(x_orig, nmax, 3, "fep:x_orig");
memory->create(f_orig, nmax, 3, "fep:f_orig");
memory->create(peatom_orig, nmax, "fep:peatom_orig");
memory->create(pvatom_orig, nmax, 6, "fep:pvatom_orig");
if (force->kspace) {
memory->create(keatom_orig, nmax, "fep:keatom_orig");
memory->create(kvatom_orig, nmax, 6, "fep:kvatom_orig");
}
}
/* ---------------------------------------------------------------------- */
void ComputeFEPTA::deallocate_storage()
{
memory->destroy(x_orig);
memory->destroy(f_orig);
memory->destroy(peatom_orig);
memory->destroy(pvatom_orig);
memory->destroy(keatom_orig);
memory->destroy(kvatom_orig);
x_orig = nullptr;
f_orig = nullptr;
peatom_orig = keatom_orig = nullptr;
pvatom_orig = kvatom_orig = nullptr;
}
/* ----------------------------------------------------------------------
backup and restore arrays with position, force, energy, virial
------------------------------------------------------------------------- */
void ComputeFEPTA::backup_xfev()
{
int i;
int natom = atom->nlocal + atom->nghost;
double **x = atom->x;
for (i = 0; i < natom; i++) {
x_orig[i][0] = x[i][0];
x_orig[i][1] = x[i][1];
x_orig[i][2] = x[i][2];
}
double **f = atom->f;
for (i = 0; i < natom; i++) {
f_orig[i][0] = f[i][0];
f_orig[i][1] = f[i][1];
f_orig[i][2] = f[i][2];
}
eng_vdwl_orig = force->pair->eng_vdwl;
eng_coul_orig = force->pair->eng_coul;
if (atom->molecular != Atom::ATOMIC) {
if (force->bond) eng_bond_orig = force->bond->energy;
if (force->angle) eng_angle_orig = force->angle->energy;
if (force->dihedral) eng_dihedral_orig = force->dihedral->energy;
if (force->improper) eng_improper_orig = force->improper->energy;
}
pvirial_orig[0] = force->pair->virial[0];
pvirial_orig[1] = force->pair->virial[1];
pvirial_orig[2] = force->pair->virial[2];
pvirial_orig[3] = force->pair->virial[3];
pvirial_orig[4] = force->pair->virial[4];
pvirial_orig[5] = force->pair->virial[5];
if (update->eflag_atom) {
double *peatom = force->pair->eatom;
for (i = 0; i < natom; i++) peatom_orig[i] = peatom[i];
}
if (update->vflag_atom) {
double **pvatom = force->pair->vatom;
for (i = 0; i < natom; i++) {
pvatom_orig[i][0] = pvatom[i][0];
pvatom_orig[i][1] = pvatom[i][1];
pvatom_orig[i][2] = pvatom[i][2];
pvatom_orig[i][3] = pvatom[i][3];
pvatom_orig[i][4] = pvatom[i][4];
pvatom_orig[i][5] = pvatom[i][5];
}
}
if (force->kspace) {
energy_orig = force->kspace->energy;
kvirial_orig[0] = force->kspace->virial[0];
kvirial_orig[1] = force->kspace->virial[1];
kvirial_orig[2] = force->kspace->virial[2];
kvirial_orig[3] = force->kspace->virial[3];
kvirial_orig[4] = force->kspace->virial[4];
kvirial_orig[5] = force->kspace->virial[5];
if (update->eflag_atom) {
double *keatom = force->kspace->eatom;
for (i = 0; i < natom; i++) keatom_orig[i] = keatom[i];
}
if (update->vflag_atom) {
double **kvatom = force->kspace->vatom;
for (i = 0; i < natom; i++) {
kvatom_orig[i][0] = kvatom[i][0];
kvatom_orig[i][1] = kvatom[i][1];
kvatom_orig[i][2] = kvatom[i][2];
kvatom_orig[i][3] = kvatom[i][3];
kvatom_orig[i][4] = kvatom[i][4];
kvatom_orig[i][5] = kvatom[i][5];
}
}
}
}
/* ---------------------------------------------------------------------- */
void ComputeFEPTA::restore_xfev()
{
int i;
int natom = atom->nlocal + atom->nghost;
double **x = atom->x;
for (i = 0; i < natom; i++) {
x[i][0] = x_orig[i][0];
x[i][1] = x_orig[i][1];
x[i][2] = x_orig[i][2];
}
double **f = atom->f;
for (i = 0; i < natom; i++) {
f[i][0] = f_orig[i][0];
f[i][1] = f_orig[i][1];
f[i][2] = f_orig[i][2];
}
force->pair->eng_vdwl = eng_vdwl_orig;
force->pair->eng_coul = eng_coul_orig;
if (atom->molecular != Atom::ATOMIC) {
if (force->bond) force->bond->energy = eng_bond_orig;
if (force->angle) force->angle->energy = eng_angle_orig;
if (force->dihedral) force->dihedral->energy = eng_dihedral_orig;
if (force->improper) force->improper->energy = eng_improper_orig;
}
force->pair->virial[0] = pvirial_orig[0];
force->pair->virial[1] = pvirial_orig[1];
force->pair->virial[2] = pvirial_orig[2];
force->pair->virial[3] = pvirial_orig[3];
force->pair->virial[4] = pvirial_orig[4];
force->pair->virial[5] = pvirial_orig[5];
if (update->eflag_atom) {
double *peatom = force->pair->eatom;
for (i = 0; i < natom; i++) peatom[i] = peatom_orig[i];
}
if (update->vflag_atom) {
double **pvatom = force->pair->vatom;
for (i = 0; i < natom; i++) {
pvatom[i][0] = pvatom_orig[i][0];
pvatom[i][1] = pvatom_orig[i][1];
pvatom[i][2] = pvatom_orig[i][2];
pvatom[i][3] = pvatom_orig[i][3];
pvatom[i][4] = pvatom_orig[i][4];
pvatom[i][5] = pvatom_orig[i][5];
}
}
if (force->kspace) {
force->kspace->energy = energy_orig;
force->kspace->virial[0] = kvirial_orig[0];
force->kspace->virial[1] = kvirial_orig[1];
force->kspace->virial[2] = kvirial_orig[2];
force->kspace->virial[3] = kvirial_orig[3];
force->kspace->virial[4] = kvirial_orig[4];
force->kspace->virial[5] = kvirial_orig[5];
if (update->eflag_atom) {
double *keatom = force->kspace->eatom;
for (i = 0; i < natom; i++) keatom[i] = keatom_orig[i];
}
if (update->vflag_atom) {
double **kvatom = force->kspace->vatom;
for (i = 0; i < natom; i++) {
kvatom[i][0] = kvatom_orig[i][0];
kvatom[i][1] = kvatom_orig[i][1];
kvatom[i][2] = kvatom_orig[i][2];
kvatom[i][3] = kvatom_orig[i][3];
kvatom[i][4] = kvatom_orig[i][4];
kvatom[i][5] = kvatom_orig[i][5];
}
}
}
}

89
src/FEP/compute_fep_ta.h Normal file
View File

@ -0,0 +1,89 @@
/* -*- c++ -*- ----------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
https://www.lammps.org/, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing author: Shifeng Ke (Zhejiang University)
------------------------------------------------------------------------- */
#ifdef COMPUTE_CLASS
// clang-format off
ComputeStyle(fep/ta,ComputeFEPTA);
// clang-format on
#else
#ifndef COMPUTE_FEP_TA_H
#define COMPUTE_FEP_TA_H
#include "compute.h"
namespace LAMMPS_NS {
class ComputeFEPTA : public Compute {
public:
ComputeFEPTA(class LAMMPS *, int, char **); // compute ID groupID fep/ta temp xy/xz/yz scale_factor
~ComputeFEPTA() override;
void init() override;
void compute_vector() override;
private:
int tailflag;
int fepinitflag;
int eflag, vflag;
double temp_fep;
double scale_factor;
int tan_axis1, tan_axis2, norm_axis;
double boxlo_orig[3], boxhi_orig[3];
double area_orig;
int nmax;
double **x_orig;
double **f_orig;
double eng_vdwl_orig, eng_coul_orig;
double eng_bond_orig, eng_angle_orig, eng_dihedral_orig, eng_improper_orig;
double pvirial_orig[6];
double *peatom_orig, **pvatom_orig;
double energy_orig;
double kvirial_orig[6];
double *keatom_orig, **kvatom_orig;
class Fix *fixgpu;
double compute_pe();
void change_box();
void backup_box();
void restore_box();
void allocate_storage();
void deallocate_storage();
void backup_xfev();
void restore_xfev();
};
} // namespace LAMMPS_NS
#endif
#endif
/* ERROR/WARNING messages:
E: Illegal ... command
Self-explanatory. Check the input script syntax and compare to the
documentation for the command. You can use -echo screen as a
command-line option when running LAMMPS to see the offending line.
E: Cannot compute fep/ta in 2d simulation
Self-explanatory.
*/

View File

@ -230,6 +230,14 @@ action pair_coul_long_kokkos.cpp pair_coul_long.cpp
action pair_coul_long_kokkos.h pair_coul_long.h
action pair_coul_wolf_kokkos.cpp
action pair_coul_wolf_kokkos.h
action pair_dpd_kokkos.h pair_dpd.h
action pair_dpd_kokkos.cpp pair_dpd.cpp
action pair_dpd_ext_kokkos.cpp pair_dpd_ext.cpp
action pair_dpd_ext_kokkos.h pair_dpd_ext.h
action pair_dpd_ext_tstat_kokkos.h pair_dpd_ext_tstat.h
action pair_dpd_ext_tstat_kokkos.cpp pair_dpd_ext_tstat.cpp
action pair_dpd_tstat_kokkos.h pair_dpd_tstat.h
action pair_dpd_tstat_kokkos.cpp pair_dpd_tstat.cpp
action pair_dpd_fdt_energy_kokkos.cpp pair_dpd_fdt_energy.cpp
action pair_dpd_fdt_energy_kokkos.h pair_dpd_fdt_energy.h
action pair_eam_kokkos.cpp pair_eam.cpp

View File

@ -205,7 +205,6 @@ void FixACKS2ReaxFFKokkos<DeviceType>::pre_force(int vflag)
type = atomKK->k_type.view<DeviceType>();
mask = atomKK->k_mask.view<DeviceType>();
nlocal = atomKK->nlocal;
nall = atom->nlocal + atom->nghost;
newton_pair = force->newton_pair;
k_params.template sync<DeviceType>();
@ -219,7 +218,7 @@ void FixACKS2ReaxFFKokkos<DeviceType>::pre_force(int vflag)
d_ilist = k_list->d_ilist;
nn = list->inum;
NN = list->inum + list->gnum;
NN = atom->nlocal + atom->nghost;
copymode = 1;
@ -526,7 +525,7 @@ void FixACKS2ReaxFFKokkos<DeviceType>::allocate_array()
if (efield) get_chi_field();
// init_storage
Kokkos::parallel_for(Kokkos::RangePolicy<DeviceType,TagACKS2Zero>(0,NN),*this);
Kokkos::parallel_for(Kokkos::RangePolicy<DeviceType,TagACKS2Zero>(0,nn),*this);
}
@ -1377,9 +1376,6 @@ int FixACKS2ReaxFFKokkos<DeviceType>::bicgstab_solve()
template<class DeviceType>
void FixACKS2ReaxFFKokkos<DeviceType>::calculate_Q()
{
Kokkos::parallel_for(Kokkos::RangePolicy<DeviceType,TagACKS2CalculateQ1>(0,nn),*this);
pack_flag = 2;
//comm->forward_comm( this ); //Dist_vector( s );
k_s.modify<DeviceType>();
@ -1388,8 +1384,7 @@ void FixACKS2ReaxFFKokkos<DeviceType>::calculate_Q()
k_s.modify<LMPHostType>();
k_s.sync<DeviceType>();
Kokkos::parallel_for(Kokkos::RangePolicy<DeviceType,TagACKS2CalculateQ2>(0,NN),*this);
Kokkos::parallel_for(Kokkos::RangePolicy<DeviceType,TagACKS2CalculateQ>(0,NN),*this);
}
/* ---------------------------------------------------------------------- */
@ -1822,22 +1817,25 @@ void FixACKS2ReaxFFKokkos<DeviceType>::operator() (TagACKS2Norm3, const int &ii,
template<class DeviceType>
KOKKOS_INLINE_FUNCTION
void FixACKS2ReaxFFKokkos<DeviceType>::operator() (TagACKS2CalculateQ1, const int &ii) const
void FixACKS2ReaxFFKokkos<DeviceType>::operator() (TagACKS2CalculateQ, const int &i) const
{
const int i = d_ilist[ii];
if (mask[i] & groupbit) {
/* backup s */
for (int k = nprev-1; k > 0; --k) {
d_s_hist(i,k) = d_s_hist(i,k-1);
d_s_hist_X(i,k) = d_s_hist_X(i,k-1);
q(i) = d_s(i);
if (i < nlocal) {
/* backup s */
for (int k = nprev-1; k > 0; --k) {
d_s_hist(i,k) = d_s_hist(i,k-1);
d_s_hist_X(i,k) = d_s_hist_X(i,k-1);
}
d_s_hist(i,0) = d_s[i];
d_s_hist_X(i,0) = d_s[NN+i];
}
d_s_hist(i,0) = d_s[i];
d_s_hist_X(i,0) = d_s[NN+i];
}
// last two rows
if (last_rows_flag && ii == 0) {
if (last_rows_flag && i == 0) {
for (int i = 0; i < 2; ++i) {
for (int k = nprev-1; k > 0; --k)
d_s_hist_last(i,k) = d_s_hist_last(i,k-1);
@ -1848,17 +1846,6 @@ void FixACKS2ReaxFFKokkos<DeviceType>::operator() (TagACKS2CalculateQ1, const in
/* ---------------------------------------------------------------------- */
template<class DeviceType>
KOKKOS_INLINE_FUNCTION
void FixACKS2ReaxFFKokkos<DeviceType>::operator() (TagACKS2CalculateQ2, const int &ii) const
{
const int i = d_ilist[ii];
if (mask[i] & groupbit)
q(i) = d_s(i);
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
void FixACKS2ReaxFFKokkos<DeviceType>::cleanup_copy()
{

View File

@ -54,8 +54,7 @@ struct TagACKS2Precon1B{};
struct TagACKS2Precon2{};
struct TagACKS2Add{};
struct TagACKS2ZeroQGhosts{};
struct TagACKS2CalculateQ1{};
struct TagACKS2CalculateQ2{};
struct TagACKS2CalculateQ{};
template<class DeviceType>
class FixACKS2ReaxFFKokkos : public FixACKS2ReaxFF {
@ -152,10 +151,7 @@ class FixACKS2ReaxFFKokkos : public FixACKS2ReaxFF {
void operator()(TagACKS2ZeroQGhosts, const int&) const;
KOKKOS_INLINE_FUNCTION
void operator()(TagACKS2CalculateQ1, const int&) const;
KOKKOS_INLINE_FUNCTION
void operator()(TagACKS2CalculateQ2, const int&) const;
void operator()(TagACKS2CalculateQ, const int&) const;
KOKKOS_INLINE_FUNCTION
double calculate_H_k(const F_FLOAT &r, const F_FLOAT &shld) const;

View File

@ -208,7 +208,6 @@ void FixQEqReaxFFKokkos<DeviceType>::pre_force(int /*vflag*/)
d_neighbors = k_list->d_neighbors;
d_ilist = k_list->d_ilist;
nn = list->inum;
NN = list->inum + list->gnum;
copymode = 1;
@ -375,7 +374,7 @@ void FixQEqReaxFFKokkos<DeviceType>::allocate_array()
if (efield) get_chi_field();
Kokkos::parallel_for(Kokkos::RangePolicy<DeviceType,TagQEqZero>(0,NN),*this);
Kokkos::parallel_for(Kokkos::RangePolicy<DeviceType,TagQEqZero>(0,nn),*this);
}
/* ---------------------------------------------------------------------- */
@ -872,7 +871,8 @@ void FixQEqReaxFFKokkos<DeviceType>::sparse_matvec_kokkos(typename AT::t_ffloat2
}
if (neighflag != FULL) {
Kokkos::parallel_for(Kokkos::RangePolicy<DeviceType,TagQEqZeroQGhosts>(nn,NN),*this);
int nall = nlocal + atomKK->nghost;
Kokkos::parallel_for(Kokkos::RangePolicy<DeviceType,TagQEqZeroQGhosts>(atom->nlocal,nall),*this);
if (need_dup)
dup_o.reset_except(d_o);

View File

@ -0,0 +1,463 @@
// clang-format off
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
https://www.lammps.org/, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing author: Matt Bettencourt (NVIDIA)
------------------------------------------------------------------------- */
#include "pair_dpd_ext_kokkos.h"
#include "atom.h"
#include "atom_kokkos.h"
#include "memory_kokkos.h"
#include "comm.h"
#include "error.h"
#include "force.h"
#include "memory.h"
#include "neigh_list.h"
#include "neigh_request.h"
#include "neighbor.h"
#include "random_mars.h"
#include "update.h"
#include "atom_masks.h"
#include "kokkos.h"
#include <cmath>
using namespace LAMMPS_NS;
#define EPSILON 1.0e-10
template<class DeviceType>
PairDPDExtKokkos<DeviceType>::PairDPDExtKokkos(class LAMMPS *lmp) :
PairDPDExt(lmp) ,
#ifdef DPD_USE_RAN_MARS
rand_pool(0 /* unused */, lmp)
#else
rand_pool()
#endif
{
kokkosable = 1;
atomKK = (AtomKokkos *) atom;
execution_space = ExecutionSpaceFromDevice<DeviceType>::space;
datamask_read = EMPTY_MASK;
datamask_modify = EMPTY_MASK;
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
PairDPDExtKokkos<DeviceType>::~PairDPDExtKokkos() {
if (copymode) return;
#ifdef DPD_USE_RAN_MARS
rand_pool.destroy();
#endif
memoryKK->destroy_kokkos(k_eatom,eatom);
memoryKK->destroy_kokkos(k_vatom,vatom);
memoryKK->destroy_kokkos(k_cutsq,cutsq);
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
void PairDPDExtKokkos<DeviceType>::init_style()
{
PairDPDExt::init_style();
#ifdef DPD_USE_RAN_MARS
rand_pool.init(random,seed);
#else
typedef Kokkos::Experimental::UniqueToken<
DeviceType, Kokkos::Experimental::UniqueTokenScope::Global> unique_token_type;
unique_token_type unique_token;
rand_pool.init(seed + comm->me,unique_token.size());
#endif
neighflag = lmp->kokkos->neighflag;
if (force->newton_pair == 0 || neighflag == FULL)
error->all(FLERR,"Must use half neighbor list style and newton on with pair dpd/ext/kk");
auto request = neighbor->find_request(this);
request->set_kokkos_host(std::is_same<DeviceType,LMPHostType>::value &&
!std::is_same<DeviceType,LMPDeviceType>::value);
request->set_kokkos_device(std::is_same<DeviceType,LMPDeviceType>::value);
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
void PairDPDExtKokkos<DeviceType>::compute(int eflagin, int vflagin)
{
eflag = eflagin; vflag = vflagin;
ev_init(eflag,vflag,0);
if (eflag_atom) {
memoryKK->destroy_kokkos(k_eatom,eatom);
memoryKK->create_kokkos(k_eatom,eatom,maxeatom,"pair:eatom");
d_eatom = k_eatom.template view<DeviceType>();
}
if (vflag_atom) {
memoryKK->destroy_kokkos(k_vatom,vatom);
memoryKK->create_kokkos(k_vatom,vatom,maxvatom,"pair:vatom");
d_vatom = k_vatom.template view<DeviceType>();
}
atomKK->sync(execution_space,X_MASK | V_MASK | F_MASK | TYPE_MASK | ENERGY_MASK | VIRIAL_MASK);
x = atomKK->k_x.view<DeviceType>();
v = atomKK->k_v.view<DeviceType>();
f = atomKK->k_f.view<DeviceType>();
type = atomKK->k_type.view<DeviceType>();
k_cutsq.template sync<DeviceType>();
k_params.template sync<DeviceType>();
special_lj[0] = force->special_lj[0];
special_lj[1] = force->special_lj[1];
special_lj[2] = force->special_lj[2];
special_lj[3] = force->special_lj[3];
nlocal = atom->nlocal;
dtinvsqrt = 1.0/sqrt(update->dt);
NeighListKokkos<DeviceType>* k_list = static_cast<NeighListKokkos<DeviceType>*>(list);
d_numneigh = k_list->d_numneigh;
d_neighbors = k_list->d_neighbors;
d_ilist = k_list->d_ilist;
need_dup = lmp->kokkos->need_dup<DeviceType>();
if (need_dup) {
dup_f = Kokkos::Experimental::create_scatter_view<Kokkos::Experimental::ScatterSum, Kokkos::Experimental::ScatterDuplicated>(f);
dup_eatom = Kokkos::Experimental::create_scatter_view<Kokkos::Experimental::ScatterSum, Kokkos::Experimental::ScatterDuplicated>(d_eatom);
dup_vatom = Kokkos::Experimental::create_scatter_view<Kokkos::Experimental::ScatterSum, Kokkos::Experimental::ScatterDuplicated>(d_vatom);
} else {
ndup_f = Kokkos::Experimental::create_scatter_view<Kokkos::Experimental::ScatterSum, Kokkos::Experimental::ScatterNonDuplicated>(f);
ndup_eatom = Kokkos::Experimental::create_scatter_view<Kokkos::Experimental::ScatterSum, Kokkos::Experimental::ScatterNonDuplicated>(d_eatom);
ndup_vatom = Kokkos::Experimental::create_scatter_view<Kokkos::Experimental::ScatterSum, Kokkos::Experimental::ScatterNonDuplicated>(d_vatom);
}
// loop over neighbors of my atoms
int inum = list->inum;
EV_FLOAT ev;
copymode = 1;
if (neighflag == HALF) {
if (evflag) Kokkos::parallel_reduce(Kokkos::RangePolicy<DeviceType, TagDPDExtKokkos<HALF,1> >(0,inum),*this,ev);
else Kokkos::parallel_for(Kokkos::RangePolicy<DeviceType, TagDPDExtKokkos<HALF,0> >(0,inum),*this);
} else if (neighflag == HALFTHREAD) {
if (evflag) Kokkos::parallel_reduce(Kokkos::RangePolicy<DeviceType, TagDPDExtKokkos<HALFTHREAD,1> >(0,inum),*this,ev);
else Kokkos::parallel_for(Kokkos::RangePolicy<DeviceType, TagDPDExtKokkos<HALFTHREAD,0> >(0,inum),*this);
}
if (need_dup)
Kokkos::Experimental::contribute(f, dup_f);
if (eflag_global) eng_vdwl += ev.evdwl;
if (vflag_global) {
virial[0] += ev.v[0];
virial[1] += ev.v[1];
virial[2] += ev.v[2];
virial[3] += ev.v[3];
virial[4] += ev.v[4];
virial[5] += ev.v[5];
}
if (vflag_fdotr) pair_virial_fdotr_compute(this);
if (eflag_atom) {
if (need_dup)
Kokkos::Experimental::contribute(d_eatom, dup_eatom);
k_eatom.template modify<DeviceType>();
k_eatom.template sync<LMPHostType>();
}
if (vflag_atom) {
if (need_dup)
Kokkos::Experimental::contribute(d_vatom, dup_vatom);
k_vatom.template modify<DeviceType>();
k_vatom.template sync<LMPHostType>();
}
copymode = 0;
if (evflag) atomKK->modified(execution_space,F_MASK | ENERGY_MASK | VIRIAL_MASK);
else atomKK->modified(execution_space,F_MASK);
// free duplicated memory
if (need_dup) {
dup_f = decltype(dup_f)();
dup_eatom = decltype(dup_eatom)();
dup_vatom = decltype(dup_vatom)();
}
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
template<int NEIGHFLAG, int EVFLAG>
KOKKOS_INLINE_FUNCTION
void PairDPDExtKokkos<DeviceType>::operator() (TagDPDExtKokkos<NEIGHFLAG,EVFLAG>, const int &ii) const {
EV_FLOAT ev;
this->template operator()<NEIGHFLAG,EVFLAG>(TagDPDExtKokkos<NEIGHFLAG,EVFLAG>(), ii, ev);
}
template<class DeviceType>
template<int NEIGHFLAG, int EVFLAG>
KOKKOS_INLINE_FUNCTION
void PairDPDExtKokkos<DeviceType>::operator() (TagDPDExtKokkos<NEIGHFLAG,EVFLAG>, const int &ii, EV_FLOAT &ev) const {
// The f array is duplicated for OpenMP, atomic for CUDA, and neither for Serial
auto v_f = ScatterViewHelper<NeedDup_v<NEIGHFLAG,DeviceType>,decltype(dup_f),decltype(ndup_f)>::get(dup_f,ndup_f);
auto a_f = v_f.template access<AtomicDup_v<NEIGHFLAG,DeviceType>>();
int i,j,jj,jnum,itype,jtype;
double xtmp,ytmp,ztmp,delx,dely,delz,fpairx,fpairy,fpairz,fpair;
double vxtmp,vytmp,vztmp,delvx,delvy,delvz;
double rsq,r,rinv,dot,wd,wdPar,wdPerp,randnum,randnumx,randnumy,randnumz,factor_dpd;
double fx = 0,fy = 0,fz = 0;
double evdwl = 0;
i = d_ilist[ii];
xtmp = x(i,0);
ytmp = x(i,1);
ztmp = x(i,2);
vxtmp = v(i,0);
vytmp = v(i,1);
vztmp = v(i,2);
itype = type(i);
jnum = d_numneigh[i];
rand_type rand_gen = rand_pool.get_state();
for (jj = 0; jj < jnum; jj++) {
double P[3][3];
j = d_neighbors(i,jj);
factor_dpd = special_lj[sbmask(j)];
j &= NEIGHMASK;
delx = xtmp - x(j,0);
dely = ytmp - x(j,1);
delz = ztmp - x(j,2);
rsq = delx*delx + dely*dely + delz*delz;
jtype = type(j);
if (rsq < d_cutsq(itype,jtype)) {
r = sqrt(rsq);
if (r < EPSILON) continue; // r can be 0.0 in DPD systems
rinv = 1.0/r;
delvx = vxtmp - v(j,0);
delvy = vytmp - v(j,1);
delvz = vztmp - v(j,2);
dot = delx*delvx + dely*delvy + delz*delvz;
P[0][0] = 1.0 - delx*delx*rinv*rinv;
P[0][1] = - delx*dely*rinv*rinv;
P[0][2] = - delx*delz*rinv*rinv;
P[1][0] = P[0][1];
P[1][1] = 1.0 - dely*dely*rinv*rinv;
P[1][2] = - dely*delz*rinv*rinv;
P[2][0] = P[0][2];
P[2][1] = P[1][2];
P[2][2] = 1.0 - delz*delz*rinv*rinv;
wd = 1.0 - r/params(itype,jtype).cut;
wdPar = pow(wd,params(itype,jtype).ws);
wdPerp = pow(wd,params(itype,jtype).wsT);
randnum = rand_gen.normal();
randnumx = rand_gen.normal();
randnumy = rand_gen.normal();
randnumz = rand_gen.normal();
// conservative force
fpair = params(itype,jtype).a0*wd;
// drag force - parallel
fpair -= params(itype,jtype).gamma*wdPar*wdPar*dot*rinv;
// random force - parallel
fpair += params(itype,jtype).sigma*wdPar*randnum*dtinvsqrt;
fpairx = fpair*rinv*delx;
fpairy = fpair*rinv*dely;
fpairz = fpair*rinv*delz;
// drag force - perpendicular
fpairx -= params(itype,jtype).gammaT*wdPerp*wdPerp*
(P[0][0]*delvx + P[0][1]*delvy + P[0][2]*delvz);
fpairy -= params(itype,jtype).gammaT*wdPerp*wdPerp*
(P[1][0]*delvx + P[1][1]*delvy + P[1][2]*delvz);
fpairz -= params(itype,jtype).gammaT*wdPerp*wdPerp*
(P[2][0]*delvx + P[2][1]*delvy + P[2][2]*delvz);
// random force - perpendicular
fpairx += params(itype,jtype).sigmaT*wdPerp*
(P[0][0]*randnumx + P[0][1]*randnumy + P[0][2]*randnumz)*dtinvsqrt;
fpairy += params(itype,jtype).sigmaT*wdPerp*
(P[1][0]*randnumx + P[1][1]*randnumy + P[1][2]*randnumz)*dtinvsqrt;
fpairz += params(itype,jtype).sigmaT*wdPerp*
(P[2][0]*randnumx + P[2][1]*randnumy + P[2][2]*randnumz)*dtinvsqrt;
fpairx *= factor_dpd;
fpairy *= factor_dpd;
fpairz *= factor_dpd;
fx += fpairx;
fy += fpairy;
fz += fpairz;
a_f(j,0) -= fpairx;
a_f(j,1) -= fpairy;
a_f(j,2) -= fpairz;
if (EVFLAG && eflag) {
// unshifted eng of conservative term:
// evdwl = -a0[itype][jtype]*r * (1.0-0.5*r/cut[itype][jtype]);
// eng shifted to 0.0 at cutoff
evdwl = 0.5*params(itype,jtype).a0*params(itype,jtype).cut* wd*wd;
evdwl *= factor_dpd;
if (EVFLAG && eflag_global)
ev.evdwl += evdwl;
}
if (EVFLAG && (eflag_atom || vflag_either))
this->template ev_tally_xyz<NEIGHFLAG>(ev,i,j,evdwl,fpairx,fpairy,fpairz,delx,dely,delz);
}
}
a_f(i,0) += fx;
a_f(i,1) += fy;
a_f(i,2) += fz;
rand_pool.free_state(rand_gen);
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
template<int NEIGHFLAG>
KOKKOS_INLINE_FUNCTION
void PairDPDExtKokkos<DeviceType>::ev_tally_xyz(EV_FLOAT &ev, const int &i, const int &j,
const F_FLOAT &epair,
const F_FLOAT &fx, const F_FLOAT &fy, const F_FLOAT &fz,
const F_FLOAT &delx, const F_FLOAT &dely, const F_FLOAT &delz) const
{
// The eatom and vatom arrays are duplicated for OpenMP, atomic for CUDA, and neither for Serial
auto v_eatom = ScatterViewHelper<NeedDup_v<NEIGHFLAG,DeviceType>,decltype(dup_eatom),decltype(ndup_eatom)>::get(dup_eatom,ndup_eatom);
auto a_eatom = v_eatom.template access<AtomicDup_v<NEIGHFLAG,DeviceType>>();
auto v_vatom = ScatterViewHelper<NeedDup_v<NEIGHFLAG,DeviceType>,decltype(dup_vatom),decltype(ndup_vatom)>::get(dup_vatom,ndup_vatom);
auto a_vatom = v_vatom.template access<AtomicDup_v<NEIGHFLAG,DeviceType>>();
if (eflag_atom) {
const E_FLOAT epairhalf = 0.5 * epair;
a_eatom[i] += epairhalf;
a_eatom[j] += epairhalf;
}
if (vflag_either) {
const E_FLOAT v0 = delx*fx;
const E_FLOAT v1 = dely*fy;
const E_FLOAT v2 = delz*fz;
const E_FLOAT v3 = delx*fy;
const E_FLOAT v4 = delx*fz;
const E_FLOAT v5 = dely*fz;
if (vflag_global) {
ev.v[0] += v0;
ev.v[1] += v1;
ev.v[2] += v2;
ev.v[3] += v3;
ev.v[4] += v4;
ev.v[5] += v5;
}
if (vflag_atom) {
a_vatom(i,0) += 0.5*v0;
a_vatom(i,1) += 0.5*v1;
a_vatom(i,2) += 0.5*v2;
a_vatom(i,3) += 0.5*v3;
a_vatom(i,4) += 0.5*v4;
a_vatom(i,5) += 0.5*v5;
a_vatom(j,0) += 0.5*v0;
a_vatom(j,1) += 0.5*v1;
a_vatom(j,2) += 0.5*v2;
a_vatom(j,3) += 0.5*v3;
a_vatom(j,4) += 0.5*v4;
a_vatom(j,5) += 0.5*v5;
}
}
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
void PairDPDExtKokkos<DeviceType>::allocate()
{
PairDPDExt::allocate();
int n = atom->ntypes;
memory->destroy(cutsq);
memoryKK->create_kokkos(k_cutsq,cutsq,n+1,n+1,"pair:cutsq");
d_cutsq = k_cutsq.template view<DeviceType>();
k_params = Kokkos::DualView<params_dpd**,Kokkos::LayoutRight,DeviceType>("PairDPDExt::params",n+1,n+1);
params = k_params.template view<DeviceType>();
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
KOKKOS_INLINE_FUNCTION
int PairDPDExtKokkos<DeviceType>::sbmask(const int& j) const {
return j >> SBBITS & 3;
}
/* ----------------------------------------------------------------------
init for one type pair i,j and corresponding j,i
------------------------------------------------------------------------- */
template<class DeviceType>
double PairDPDExtKokkos<DeviceType>::init_one(int i, int j)
{
double cutone = PairDPDExt::init_one(i,j);
k_params.h_view(i,j).cut = cut[i][j];
k_params.h_view(i,j).ws = ws[i][j];
k_params.h_view(i,j).wsT = wsT[i][j];
k_params.h_view(i,j).a0 = a0[i][j];
k_params.h_view(i,j).gamma = gamma[i][j];
k_params.h_view(i,j).sigma = sigma[i][j];
k_params.h_view(i,j).gammaT = gammaT[i][j];
k_params.h_view(i,j).sigmaT = sigmaT[i][j];
k_params.h_view(j,i) = k_params.h_view(i,j);
k_params.template modify<LMPHostType>();
k_cutsq.h_view(i,j) = cutone*cutone;
k_cutsq.h_view(j,i) = k_cutsq.h_view(i,j);
k_cutsq.template modify<LMPHostType>();
return cutone;
}
namespace LAMMPS_NS {
template class PairDPDExtKokkos<LMPDeviceType>;
#ifdef LMP_KOKKOS_GPU
template class PairDPDExtKokkos<LMPHostType>;
#endif
}

View File

@ -0,0 +1,143 @@
/* -*- c++ -*- ----------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
https://www.lammps.org/, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#ifdef PAIR_CLASS
// clang-format off
PairStyle(dpd/ext/kk,PairDPDExtKokkos<LMPDeviceType>);
PairStyle(dpd/ext/kk/device,PairDPDExtKokkos<LMPDeviceType>);
PairStyle(dpd/ext/kk/host,PairDPDExtKokkos<LMPHostType>);
// clang-format on
#else
#ifndef LMP_PAIR_DPD_EXT_KOKKOS_H
#define LMP_PAIR_DPD_EXT_KOKKOS_H
#include "pair_dpd_ext.h"
#include "pair_kokkos.h"
#include "kokkos_type.h"
#if !defined(DPD_USE_RAN_MARS) && !defined(DPD_USE_Random_XorShift64) && !defined(Random_XorShift1024)
#define DPD_USE_Random_XorShift64
#endif
#ifdef DPD_USE_RAN_MARS
#include "rand_pool_wrap_kokkos.h"
#else
#include "Kokkos_Random.hpp"
#endif
namespace LAMMPS_NS {
template<class DeviceType>
class PairDPDExtKokkos : public PairDPDExt {
public:
typedef DeviceType device_type;
typedef ArrayTypes<DeviceType> AT;
typedef EV_FLOAT value_type;
PairDPDExtKokkos(class LAMMPS*);
~PairDPDExtKokkos() override;
void allocate() override;
void init_style() override;
double init_one(int i, int j) override;
void compute(int, int) override;
struct params_dpd {
KOKKOS_INLINE_FUNCTION
params_dpd() {cut=ws=wsT=a0=gamma=sigma=gammaT=sigmaT=0;}
KOKKOS_INLINE_FUNCTION
params_dpd(int /*i*/) {cut=ws=wsT=a0=gamma=sigma=gammaT=sigmaT=0;}
F_FLOAT cut,ws,wsT,a0,gamma,sigma,gammaT,sigmaT;
};
template<int NEIGHFLAG, int EVFLAG>
struct TagDPDExtKokkos{};
template<int NEIGHFLAG, int EVFLAG>
KOKKOS_INLINE_FUNCTION
void operator () (TagDPDExtKokkos<NEIGHFLAG,EVFLAG>, const int &i) const;
template<int NEIGHFLAG, int EVFLAG>
KOKKOS_INLINE_FUNCTION
void operator () (TagDPDExtKokkos<NEIGHFLAG,EVFLAG>, const int &i, EV_FLOAT&) const;
template<int NEIGHFLAG>
KOKKOS_INLINE_FUNCTION
void ev_tally_xyz(EV_FLOAT &ev, const int &i, const int &j,
const F_FLOAT &epair,
const F_FLOAT &fx, const F_FLOAT &fy, const F_FLOAT &fz,
const F_FLOAT &delx, const F_FLOAT &dely, const F_FLOAT &delz) const;
private:
double special_lj[4];
int eflag,vflag;
int neighflag,nlocal;
double dtinvsqrt;
int need_dup;
using KKDeviceType = typename KKDevice<DeviceType>::value;
template<typename DataType, typename Layout>
using DupScatterView = KKScatterView<DataType, Layout, KKDeviceType, KKScatterSum, KKScatterDuplicated>;
template<typename DataType, typename Layout>
using NonDupScatterView = KKScatterView<DataType, Layout, KKDeviceType, KKScatterSum, KKScatterNonDuplicated>;
DupScatterView<F_FLOAT*[3], typename DAT::t_f_array::array_layout> dup_f;
DupScatterView<E_FLOAT*, typename DAT::t_efloat_1d::array_layout> dup_eatom;
DupScatterView<F_FLOAT*[6], typename DAT::t_virial_array::array_layout> dup_vatom;
NonDupScatterView<F_FLOAT*[3], typename DAT::t_f_array::array_layout> ndup_f;
NonDupScatterView<E_FLOAT*, typename DAT::t_efloat_1d::array_layout> ndup_eatom;
NonDupScatterView<F_FLOAT*[6], typename DAT::t_virial_array::array_layout> ndup_vatom;
#ifdef DPD_USE_RAN_MARS
RandPoolWrap rand_pool;
typedef RandWrap rand_type;
#elif defined(DPD_USE_Random_XorShift64)
Kokkos::Random_XorShift64_Pool<DeviceType> rand_pool;
typedef typename Kokkos::Random_XorShift64_Pool<DeviceType>::generator_type rand_type;
#elif defined(DPD_USE_Random_XorShift1024)
Kokkos::Random_XorShift1024_Pool<DeviceType> rand_pool;
typedef typename Kokkos::Random_XorShift1024_Pool<DeviceType>::generator_type rand_type;
#endif
typename AT::t_x_array_randomread x;
typename AT::t_x_array_randomread v;
typename AT::t_f_array f;
typename AT::t_int_1d_randomread type;
typename AT::t_neighbors_2d d_neighbors;
typename AT::t_int_1d_randomread d_ilist;
typename AT::t_int_1d_randomread d_numneigh;
typename AT::tdual_ffloat_2d k_cutsq;
typename AT::t_ffloat_2d d_cutsq;
Kokkos::DualView<params_dpd**,Kokkos::LayoutRight,DeviceType> k_params;
typename Kokkos::DualView<params_dpd**,
Kokkos::LayoutRight,DeviceType>::t_dev_const_um params;
DAT::tdual_efloat_1d k_eatom;
DAT::tdual_virial_array k_vatom;
typename AT::t_efloat_1d d_eatom;
typename AT::t_virial_array d_vatom;
KOKKOS_INLINE_FUNCTION
int sbmask(const int& j) const;
friend void pair_virial_fdotr_compute<PairDPDExtKokkos>(PairDPDExtKokkos*);
};
}
#endif
#endif

View File

@ -0,0 +1,444 @@
// clang-format off
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
https://www.lammps.org/, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing author: Matt Bettencourt (NVIDIA)
------------------------------------------------------------------------- */
#include "pair_dpd_ext_tstat_kokkos.h"
#include "atom.h"
#include "atom_kokkos.h"
#include "memory_kokkos.h"
#include "comm.h"
#include "error.h"
#include "force.h"
#include "memory.h"
#include "neigh_list.h"
#include "neigh_request.h"
#include "neighbor.h"
#include "random_mars.h"
#include "update.h"
#include "atom_masks.h"
#include "kokkos.h"
#include <cmath>
using namespace LAMMPS_NS;
#define EPSILON 1.0e-10
template<class DeviceType>
PairDPDExtTstatKokkos<DeviceType>::PairDPDExtTstatKokkos(class LAMMPS *lmp) :
PairDPDExtTstat(lmp) ,
#ifdef DPD_USE_RAN_MARS
rand_pool(0 /* unused */, lmp)
#else
rand_pool()
#endif
{
kokkosable = 1;
atomKK = (AtomKokkos *) atom;
execution_space = ExecutionSpaceFromDevice<DeviceType>::space;
datamask_read = EMPTY_MASK;
datamask_modify = EMPTY_MASK;
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
PairDPDExtTstatKokkos<DeviceType>::~PairDPDExtTstatKokkos() {
if (copymode) return;
#ifdef DPD_USE_RAN_MARS
rand_pool.destroy();
#endif
memoryKK->destroy_kokkos(k_vatom,vatom);
memoryKK->destroy_kokkos(k_cutsq,cutsq);
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
void PairDPDExtTstatKokkos<DeviceType>::init_style()
{
PairDPDExt::init_style();
#ifdef DPD_USE_RAN_MARS
rand_pool.init(random,seed);
#else
typedef Kokkos::Experimental::UniqueToken<
DeviceType, Kokkos::Experimental::UniqueTokenScope::Global> unique_token_type;
unique_token_type unique_token;
rand_pool.init(seed + comm->me,unique_token.size());
#endif
neighflag = lmp->kokkos->neighflag;
if (force->newton_pair == 0 || neighflag == FULL )
error->all(FLERR,"Must use half neighbor list style and newton on with pair dpd/ext/kk");
auto request = neighbor->find_request(this);
request->set_kokkos_host(std::is_same<DeviceType,LMPHostType>::value &&
!std::is_same<DeviceType,LMPDeviceType>::value);
request->set_kokkos_device(std::is_same<DeviceType,LMPDeviceType>::value);
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
void PairDPDExtTstatKokkos<DeviceType>::compute(int eflagin, int vflagin)
{
eflag = eflagin; vflag = vflagin;
ev_init(eflag,vflag,0);
// adjust sigma if target T is changing
if (t_start != t_stop) {
double delta = update->ntimestep - update->beginstep;
if (delta != 0.0) delta /= update->endstep - update->beginstep;
temperature = t_start + delta * (t_stop-t_start);
double boltz = force->boltz;
for (int i = 1; i <= atom->ntypes; i++)
for (int j = i; j <= atom->ntypes; j++) {
k_params.h_view(i,j).sigma = k_params.h_view(j,i).sigma =
sqrt(2.0*boltz*temperature*gamma[i][j]);
}
}
k_params.template modify<LMPHostType>();
if (eflag_atom) {
maxeatom = atom->nmax;
memory->destroy(eatom);
memory->create(eatom,maxeatom,"pair:eatom");
memset(&eatom[0], 0, maxeatom * sizeof(double));
}
if (vflag_atom) {
memoryKK->destroy_kokkos(k_vatom,vatom);
memoryKK->create_kokkos(k_vatom,vatom,maxvatom,"pair:vatom");
d_vatom = k_vatom.template view<DeviceType>();
}
atomKK->sync(execution_space,X_MASK | V_MASK | F_MASK | TYPE_MASK | ENERGY_MASK | VIRIAL_MASK);
x = atomKK->k_x.view<DeviceType>();
v = atomKK->k_v.view<DeviceType>();
f = atomKK->k_f.view<DeviceType>();
type = atomKK->k_type.view<DeviceType>();
k_cutsq.template sync<DeviceType>();
k_params.template sync<DeviceType>();
special_lj[0] = force->special_lj[0];
special_lj[1] = force->special_lj[1];
special_lj[2] = force->special_lj[2];
special_lj[3] = force->special_lj[3];
nlocal = atom->nlocal;
dtinvsqrt = 1.0/sqrt(update->dt);
NeighListKokkos<DeviceType>* k_list = static_cast<NeighListKokkos<DeviceType>*>(list);
d_numneigh = k_list->d_numneigh;
d_neighbors = k_list->d_neighbors;
d_ilist = k_list->d_ilist;
need_dup = lmp->kokkos->need_dup<DeviceType>();
if (need_dup) {
dup_f = Kokkos::Experimental::create_scatter_view<Kokkos::Experimental::ScatterSum, Kokkos::Experimental::ScatterDuplicated>(f);
dup_vatom = Kokkos::Experimental::create_scatter_view<Kokkos::Experimental::ScatterSum, Kokkos::Experimental::ScatterDuplicated>(d_vatom);
} else {
ndup_f = Kokkos::Experimental::create_scatter_view<Kokkos::Experimental::ScatterSum, Kokkos::Experimental::ScatterNonDuplicated>(f);
ndup_vatom = Kokkos::Experimental::create_scatter_view<Kokkos::Experimental::ScatterSum, Kokkos::Experimental::ScatterNonDuplicated>(d_vatom);
}
// loop over neighbors of my atoms
int inum = list->inum;
EV_FLOAT ev;
copymode = 1;
if (neighflag == HALF) {
if (vflag_either) Kokkos::parallel_reduce(Kokkos::RangePolicy<DeviceType, TagDPDExtTstatKokkos<HALF,1> >(0,inum),*this,ev);
else Kokkos::parallel_for(Kokkos::RangePolicy<DeviceType, TagDPDExtTstatKokkos<HALF,0> >(0,inum),*this);
} else if (neighflag == HALFTHREAD) {
if (vflag_either) Kokkos::parallel_reduce(Kokkos::RangePolicy<DeviceType, TagDPDExtTstatKokkos<HALFTHREAD,1> >(0,inum),*this,ev);
else Kokkos::parallel_for(Kokkos::RangePolicy<DeviceType, TagDPDExtTstatKokkos<HALFTHREAD,0> >(0,inum),*this);
}
if (need_dup)
Kokkos::Experimental::contribute(f, dup_f);
if (vflag_global) {
virial[0] += ev.v[0];
virial[1] += ev.v[1];
virial[2] += ev.v[2];
virial[3] += ev.v[3];
virial[4] += ev.v[4];
virial[5] += ev.v[5];
}
if (vflag_fdotr) pair_virial_fdotr_compute(this);
if (vflag_atom) {
if (need_dup)
Kokkos::Experimental::contribute(d_vatom, dup_vatom);
k_vatom.template modify<DeviceType>();
k_vatom.template sync<LMPHostType>();
}
copymode = 0;
if (evflag) atomKK->modified(execution_space,F_MASK | ENERGY_MASK | VIRIAL_MASK);
else atomKK->modified(execution_space,F_MASK);
// free duplicated memory
if (need_dup) {
dup_f = decltype(dup_f)();
dup_vatom = decltype(dup_vatom)();
}
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
template<int NEIGHFLAG, int VFLAG>
KOKKOS_INLINE_FUNCTION
void PairDPDExtTstatKokkos<DeviceType>::operator() (TagDPDExtTstatKokkos<NEIGHFLAG,VFLAG>, const int &ii) const {
EV_FLOAT ev;
this->template operator()<NEIGHFLAG,VFLAG>(TagDPDExtTstatKokkos<NEIGHFLAG,VFLAG>(), ii, ev);
}
template<class DeviceType>
template<int NEIGHFLAG, int VFLAG>
KOKKOS_INLINE_FUNCTION
void PairDPDExtTstatKokkos<DeviceType>::operator() (TagDPDExtTstatKokkos<NEIGHFLAG,VFLAG>, const int &ii, EV_FLOAT &ev) const {
// The f array is duplicated for OpenMP, atomic for CUDA, and neither for Serial
auto v_f = ScatterViewHelper<NeedDup_v<NEIGHFLAG,DeviceType>,decltype(dup_f),decltype(ndup_f)>::get(dup_f,ndup_f);
auto a_f = v_f.template access<AtomicDup_v<NEIGHFLAG,DeviceType>>();
int i,j,jj,jnum,itype,jtype;
double xtmp,ytmp,ztmp,delx,dely,delz,fpairx,fpairy,fpairz,fpair;
double vxtmp,vytmp,vztmp,delvx,delvy,delvz;
double rsq,r,rinv,dot,wd,wdPar,wdPerp,randnum,randnumx,randnumy,randnumz,factor_dpd;
double fx = 0,fy = 0,fz = 0;
i = d_ilist[ii];
xtmp = x(i,0);
ytmp = x(i,1);
ztmp = x(i,2);
vxtmp = v(i,0);
vytmp = v(i,1);
vztmp = v(i,2);
itype = type(i);
jnum = d_numneigh[i];
rand_type rand_gen = rand_pool.get_state();
for (jj = 0; jj < jnum; jj++) {
double P[3][3];
j = d_neighbors(i,jj);
factor_dpd = special_lj[sbmask(j)];
j &= NEIGHMASK;
delx = xtmp - x(j,0);
dely = ytmp - x(j,1);
delz = ztmp - x(j,2);
rsq = delx*delx + dely*dely + delz*delz;
jtype = type(j);
if (rsq < d_cutsq(itype,jtype)) {
r = sqrt(rsq);
if (r < EPSILON) continue; // r can be 0.0 in DPD systems
rinv = 1.0/r;
delvx = vxtmp - v(j,0);
delvy = vytmp - v(j,1);
delvz = vztmp - v(j,2);
dot = delx*delvx + dely*delvy + delz*delvz;
P[0][0] = 1.0 - delx*delx*rinv*rinv;
P[0][1] = - delx*dely*rinv*rinv;
P[0][2] = - delx*delz*rinv*rinv;
P[1][0] = P[0][1];
P[1][1] = 1.0 - dely*dely*rinv*rinv;
P[1][2] = - dely*delz*rinv*rinv;
P[2][0] = P[0][2];
P[2][1] = P[1][2];
P[2][2] = 1.0 - delz*delz*rinv*rinv;
wd = 1.0 - r/params(itype,jtype).cut;
wdPar = pow(wd,params(itype,jtype).ws);
wdPerp = pow(wd,params(itype,jtype).wsT);
randnum = rand_gen.normal();
randnumx = rand_gen.normal();
randnumy = rand_gen.normal();
randnumz = rand_gen.normal();
// drag force - parallel
fpair = -params(itype,jtype).gamma*wdPar*wdPar*dot*rinv;
// random force - parallel
fpair += params(itype,jtype).sigma*wdPar*randnum*dtinvsqrt;
fpairx = fpair*rinv*delx;
fpairy = fpair*rinv*dely;
fpairz = fpair*rinv*delz;
// drag force - perpendicular
fpairx -= params(itype,jtype).gammaT*wdPerp*wdPerp*
(P[0][0]*delvx + P[0][1]*delvy + P[0][2]*delvz);
fpairy -= params(itype,jtype).gammaT*wdPerp*wdPerp*
(P[1][0]*delvx + P[1][1]*delvy + P[1][2]*delvz);
fpairz -= params(itype,jtype).gammaT*wdPerp*wdPerp*
(P[2][0]*delvx + P[2][1]*delvy + P[2][2]*delvz);
// random force - perpendicular
fpairx += params(itype,jtype).sigmaT*wdPerp*
(P[0][0]*randnumx + P[0][1]*randnumy + P[0][2]*randnumz)*dtinvsqrt;
fpairy += params(itype,jtype).sigmaT*wdPerp*
(P[1][0]*randnumx + P[1][1]*randnumy + P[1][2]*randnumz)*dtinvsqrt;
fpairz += params(itype,jtype).sigmaT*wdPerp*
(P[2][0]*randnumx + P[2][1]*randnumy + P[2][2]*randnumz)*dtinvsqrt;
fpairx *= factor_dpd;
fpairy *= factor_dpd;
fpairz *= factor_dpd;
fx += fpairx;
fy += fpairy;
fz += fpairz;
a_f(j,0) -= fpairx;
a_f(j,1) -= fpairy;
a_f(j,2) -= fpairz;
if (VFLAG)
this->template v_tally_xyz<NEIGHFLAG>(ev,i,j,fpairx,fpairy,fpairz,delx,dely,delz);
}
}
a_f(i,0) += fx;
a_f(i,1) += fy;
a_f(i,2) += fz;
rand_pool.free_state(rand_gen);
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
template<int NEIGHFLAG>
KOKKOS_INLINE_FUNCTION
void PairDPDExtTstatKokkos<DeviceType>::v_tally_xyz(EV_FLOAT &ev, const int &i, const int &j,
const F_FLOAT &fx, const F_FLOAT &fy, const F_FLOAT &fz,
const F_FLOAT &delx, const F_FLOAT &dely, const F_FLOAT &delz) const
{
// The vatom array is duplicated for OpenMP, atomic for CUDA, and neither for Serial
auto v_vatom = ScatterViewHelper<NeedDup_v<NEIGHFLAG,DeviceType>,decltype(dup_vatom),decltype(ndup_vatom)>::get(dup_vatom,ndup_vatom);
auto a_vatom = v_vatom.template access<AtomicDup_v<NEIGHFLAG,DeviceType>>();
const E_FLOAT v0 = delx*fx;
const E_FLOAT v1 = dely*fy;
const E_FLOAT v2 = delz*fz;
const E_FLOAT v3 = delx*fy;
const E_FLOAT v4 = delx*fz;
const E_FLOAT v5 = dely*fz;
if (vflag_global) {
ev.v[0] += v0;
ev.v[1] += v1;
ev.v[2] += v2;
ev.v[3] += v3;
ev.v[4] += v4;
ev.v[5] += v5;
}
if (vflag_atom) {
a_vatom(i,0) += 0.5*v0;
a_vatom(i,1) += 0.5*v1;
a_vatom(i,2) += 0.5*v2;
a_vatom(i,3) += 0.5*v3;
a_vatom(i,4) += 0.5*v4;
a_vatom(i,5) += 0.5*v5;
a_vatom(j,0) += 0.5*v0;
a_vatom(j,1) += 0.5*v1;
a_vatom(j,2) += 0.5*v2;
a_vatom(j,3) += 0.5*v3;
a_vatom(j,4) += 0.5*v4;
a_vatom(j,5) += 0.5*v5;
}
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
void PairDPDExtTstatKokkos<DeviceType>::allocate()
{
PairDPDExt::allocate();
int n = atom->ntypes;
memory->destroy(cutsq);
memoryKK->create_kokkos(k_cutsq,cutsq,n+1,n+1,"pair:cutsq");
d_cutsq = k_cutsq.template view<DeviceType>();
k_params = Kokkos::DualView<params_dpd**,Kokkos::LayoutRight,DeviceType>("PairDPDExt::params",n+1,n+1);
params = k_params.template view<DeviceType>();
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
KOKKOS_INLINE_FUNCTION
int PairDPDExtTstatKokkos<DeviceType>::sbmask(const int& j) const {
return j >> SBBITS & 3;
}
/* ----------------------------------------------------------------------
init for one type pair i,j and corresponding j,i
------------------------------------------------------------------------- */
template<class DeviceType>
double PairDPDExtTstatKokkos<DeviceType>::init_one(int i, int j)
{
double cutone = PairDPDExt::init_one(i,j);
k_params.h_view(i,j).cut = cut[i][j];
k_params.h_view(i,j).ws = ws[i][j];
k_params.h_view(i,j).wsT = wsT[i][j];
k_params.h_view(i,j).gamma = gamma[i][j];
k_params.h_view(i,j).sigma = sigma[i][j];
k_params.h_view(i,j).gammaT = gammaT[i][j];
k_params.h_view(i,j).sigmaT = sigmaT[i][j];
k_params.h_view(j,i) = k_params.h_view(i,j);
k_params.template modify<LMPHostType>();
k_cutsq.h_view(i,j) = cutone*cutone;
k_cutsq.h_view(j,i) = k_cutsq.h_view(i,j);
k_cutsq.template modify<LMPHostType>();
return cutone;
}
namespace LAMMPS_NS {
template class PairDPDExtTstatKokkos<LMPDeviceType>;
#ifdef LMP_KOKKOS_GPU
template class PairDPDExtTstatKokkos<LMPHostType>;
#endif
}

View File

@ -0,0 +1,138 @@
/* -*- c++ -*- ----------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
https://www.lammps.org/, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#ifdef PAIR_CLASS
// clang-format off
PairStyle(dpd/ext/tstat/kk,PairDPDExtTstatKokkos<LMPDeviceType>);
PairStyle(dpd/ext/tstat/kk/device,PairDPDExtTstatKokkos<LMPDeviceType>);
PairStyle(dpd/ext/tstat/kk/host,PairDPDExtTstatKokkos<LMPHostType>);
// clang-format on
#else
#ifndef LMP_PAIR_DPD_EXT_TSTAT_KOKKOS_H
#define LMP_PAIR_DPD_EXT_TSTAT_KOKKOS_H
#include "pair_dpd_ext_tstat.h"
#include "pair_kokkos.h"
#include "kokkos_type.h"
#if !defined(DPD_USE_RAN_MARS) && !defined(DPD_USE_Random_XorShift64) && !defined(Random_XorShift1024)
#define DPD_USE_Random_XorShift64
#endif
#ifdef DPD_USE_RAN_MARS
#include "rand_pool_wrap_kokkos.h"
#else
#include "Kokkos_Random.hpp"
#endif
namespace LAMMPS_NS {
template<class DeviceType>
class PairDPDExtTstatKokkos : public PairDPDExtTstat {
public:
typedef DeviceType device_type;
typedef ArrayTypes<DeviceType> AT;
typedef EV_FLOAT value_type;
PairDPDExtTstatKokkos(class LAMMPS*);
~PairDPDExtTstatKokkos() override;
void allocate() override;
void init_style() override;
double init_one(int i, int j) override;
void compute(int, int) override;
struct params_dpd {
KOKKOS_INLINE_FUNCTION
params_dpd() {cut=ws=wsT=gamma=sigma=gammaT=sigmaT=0;}
KOKKOS_INLINE_FUNCTION
params_dpd(int /*i*/) {cut=ws=wsT=gamma=sigma=gammaT=sigmaT=0;}
F_FLOAT cut,ws,wsT,gamma,sigma,gammaT,sigmaT;
};
template<int NEIGHFLAG, int VFLAG>
struct TagDPDExtTstatKokkos{};
template<int NEIGHFLAG, int VFLAG>
KOKKOS_INLINE_FUNCTION
void operator () (TagDPDExtTstatKokkos<NEIGHFLAG,VFLAG>, const int &i) const;
template<int NEIGHFLAG, int VFLAG>
KOKKOS_INLINE_FUNCTION
void operator () (TagDPDExtTstatKokkos<NEIGHFLAG,VFLAG>, const int &i, EV_FLOAT&) const;
template<int NEIGHFLAG>
KOKKOS_INLINE_FUNCTION
void v_tally_xyz(EV_FLOAT &ev, const int &i, const int &j,
const F_FLOAT &fx,const F_FLOAT &fy, const F_FLOAT &fz,
const F_FLOAT &delx,const F_FLOAT &dely, const F_FLOAT &delz) const;
private:
double special_lj[4];
int eflag,vflag;
int neighflag,nlocal;
double dtinvsqrt;
int need_dup;
using KKDeviceType = typename KKDevice<DeviceType>::value;
template<typename DataType, typename Layout>
using DupScatterView = KKScatterView<DataType, Layout, KKDeviceType, KKScatterSum, KKScatterDuplicated>;
template<typename DataType, typename Layout>
using NonDupScatterView = KKScatterView<DataType, Layout, KKDeviceType, KKScatterSum, KKScatterNonDuplicated>;
DupScatterView<F_FLOAT*[3], typename DAT::t_f_array::array_layout> dup_f;
DupScatterView<F_FLOAT*[6], typename DAT::t_virial_array::array_layout> dup_vatom;
NonDupScatterView<F_FLOAT*[3], typename DAT::t_f_array::array_layout> ndup_f;
NonDupScatterView<F_FLOAT*[6], typename DAT::t_virial_array::array_layout> ndup_vatom;
#ifdef DPD_USE_RAN_MARS
RandPoolWrap rand_pool;
typedef RandWrap rand_type;
#elif defined(DPD_USE_Random_XorShift64)
Kokkos::Random_XorShift64_Pool<DeviceType> rand_pool;
typedef typename Kokkos::Random_XorShift64_Pool<DeviceType>::generator_type rand_type;
#elif defined(DPD_USE_Random_XorShift1024)
Kokkos::Random_XorShift1024_Pool<DeviceType> rand_pool;
typedef typename Kokkos::Random_XorShift1024_Pool<DeviceType>::generator_type rand_type;
#endif
typename AT::t_x_array_randomread x;
typename AT::t_x_array_randomread v;
typename AT::t_f_array f;
typename AT::t_int_1d_randomread type;
typename AT::t_neighbors_2d d_neighbors;
typename AT::t_int_1d_randomread d_ilist;
typename AT::t_int_1d_randomread d_numneigh;
typename AT::tdual_ffloat_2d k_cutsq;
typename AT::t_ffloat_2d d_cutsq;
Kokkos::DualView<params_dpd**,Kokkos::LayoutRight,DeviceType> k_params;
typename Kokkos::DualView<params_dpd**,
Kokkos::LayoutRight,DeviceType>::t_dev_const_um params;
DAT::tdual_virial_array k_vatom;
typename AT::t_virial_array d_vatom;
KOKKOS_INLINE_FUNCTION
int sbmask(const int& j) const;
friend void pair_virial_fdotr_compute<PairDPDExtTstatKokkos>(PairDPDExtTstatKokkos*);
};
}
#endif
#endif

View File

@ -729,21 +729,19 @@ void PairDPDfdtEnergyKokkos<DeviceType>::ev_tally(EV_FLOAT &ev, const int &i, co
if (vflag_atom) {
if (NEIGHFLAG!=FULL) {
if (NEWTON_PAIR || i < nlocal) {
v_vatom(i,0) += 0.5*v0;
v_vatom(i,1) += 0.5*v1;
v_vatom(i,2) += 0.5*v2;
v_vatom(i,3) += 0.5*v3;
v_vatom(i,4) += 0.5*v4;
v_vatom(i,5) += 0.5*v5;
}
v_vatom(i,0) += 0.5*v0;
v_vatom(i,1) += 0.5*v1;
v_vatom(i,2) += 0.5*v2;
v_vatom(i,3) += 0.5*v3;
v_vatom(i,4) += 0.5*v4;
v_vatom(i,5) += 0.5*v5;
if (NEWTON_PAIR || j < nlocal) {
v_vatom(j,0) += 0.5*v0;
v_vatom(j,1) += 0.5*v1;
v_vatom(j,2) += 0.5*v2;
v_vatom(j,3) += 0.5*v3;
v_vatom(j,4) += 0.5*v4;
v_vatom(j,5) += 0.5*v5;
v_vatom(j,0) += 0.5*v0;
v_vatom(j,1) += 0.5*v1;
v_vatom(j,2) += 0.5*v2;
v_vatom(j,3) += 0.5*v3;
v_vatom(j,4) += 0.5*v4;
v_vatom(j,5) += 0.5*v5;
}
} else {
v_vatom(i,0) += 0.5*v0;

View File

@ -0,0 +1,417 @@
// clang-format off
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
https://www.lammps.org/, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing author: Matt Bettencourt (NVIDIA)
------------------------------------------------------------------------- */
#include "pair_dpd_kokkos.h"
#include "atom.h"
#include "atom_kokkos.h"
#include "memory_kokkos.h"
#include "comm.h"
#include "error.h"
#include "force.h"
#include "memory.h"
#include "neigh_list.h"
#include "neigh_request.h"
#include "neighbor.h"
#include "random_mars.h"
#include "update.h"
#include "atom_masks.h"
#include "kokkos.h"
#include <cmath>
using namespace LAMMPS_NS;
#define EPSILON 1.0e-10
template<class DeviceType>
PairDPDKokkos<DeviceType>::PairDPDKokkos(class LAMMPS *lmp) :
PairDPD(lmp) ,
#ifdef DPD_USE_RAN_MARS
rand_pool(0 /* unused */, lmp)
#else
rand_pool()
#endif
{
kokkosable = 1;
atomKK = (AtomKokkos *) atom;
execution_space = ExecutionSpaceFromDevice<DeviceType>::space;
datamask_read = EMPTY_MASK;
datamask_modify = EMPTY_MASK;
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
PairDPDKokkos<DeviceType>::~PairDPDKokkos() {
if (copymode) return;
#ifdef DPD_USE_RAN_MARS
rand_pool.destroy();
#endif
memoryKK->destroy_kokkos(k_eatom,eatom);
memoryKK->destroy_kokkos(k_vatom,vatom);
memoryKK->destroy_kokkos(k_cutsq,cutsq);
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
void PairDPDKokkos<DeviceType>::init_style()
{
PairDPD::init_style();
#ifdef DPD_USE_RAN_MARS
rand_pool.init(random,seed);
#else
typedef Kokkos::Experimental::UniqueToken<
DeviceType, Kokkos::Experimental::UniqueTokenScope::Global> unique_token_type;
unique_token_type unique_token;
rand_pool.init(seed + comm->me,unique_token.size());
#endif
neighflag = lmp->kokkos->neighflag;
if (force->newton_pair == 0 || neighflag == FULL)
error->all(FLERR,"Must use half neighbor list style and newton on with pair dpd/kk");
auto request = neighbor->find_request(this);
request->set_kokkos_host(std::is_same<DeviceType,LMPHostType>::value &&
!std::is_same<DeviceType,LMPDeviceType>::value);
request->set_kokkos_device(std::is_same<DeviceType,LMPDeviceType>::value);
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
void PairDPDKokkos<DeviceType>::compute(int eflagin, int vflagin)
{
eflag = eflagin; vflag = vflagin;
ev_init(eflag,vflag,0);
if (eflag_atom) {
memoryKK->destroy_kokkos(k_eatom,eatom);
memoryKK->create_kokkos(k_eatom,eatom,maxeatom,"pair:eatom");
d_eatom = k_eatom.template view<DeviceType>();
}
if (vflag_atom) {
memoryKK->destroy_kokkos(k_vatom,vatom);
memoryKK->create_kokkos(k_vatom,vatom,maxvatom,"pair:vatom");
d_vatom = k_vatom.template view<DeviceType>();
}
atomKK->sync(execution_space,X_MASK | V_MASK | F_MASK | TYPE_MASK | ENERGY_MASK | VIRIAL_MASK);
x = atomKK->k_x.view<DeviceType>();
v = atomKK->k_v.view<DeviceType>();
f = atomKK->k_f.view<DeviceType>();
type = atomKK->k_type.view<DeviceType>();
k_cutsq.template sync<DeviceType>();
k_params.template sync<DeviceType>();
special_lj[0] = force->special_lj[0];
special_lj[1] = force->special_lj[1];
special_lj[2] = force->special_lj[2];
special_lj[3] = force->special_lj[3];
nlocal = atom->nlocal;
dtinvsqrt = 1.0/sqrt(update->dt);
NeighListKokkos<DeviceType>* k_list = static_cast<NeighListKokkos<DeviceType>*>(list);
d_numneigh = k_list->d_numneigh;
d_neighbors = k_list->d_neighbors;
d_ilist = k_list->d_ilist;
need_dup = lmp->kokkos->need_dup<DeviceType>();
if (need_dup) {
dup_f = Kokkos::Experimental::create_scatter_view<Kokkos::Experimental::ScatterSum, Kokkos::Experimental::ScatterDuplicated>(f);
dup_eatom = Kokkos::Experimental::create_scatter_view<Kokkos::Experimental::ScatterSum, Kokkos::Experimental::ScatterDuplicated>(d_eatom);
dup_vatom = Kokkos::Experimental::create_scatter_view<Kokkos::Experimental::ScatterSum, Kokkos::Experimental::ScatterDuplicated>(d_vatom);
} else {
ndup_f = Kokkos::Experimental::create_scatter_view<Kokkos::Experimental::ScatterSum, Kokkos::Experimental::ScatterNonDuplicated>(f);
ndup_eatom = Kokkos::Experimental::create_scatter_view<Kokkos::Experimental::ScatterSum, Kokkos::Experimental::ScatterNonDuplicated>(d_eatom);
ndup_vatom = Kokkos::Experimental::create_scatter_view<Kokkos::Experimental::ScatterSum, Kokkos::Experimental::ScatterNonDuplicated>(d_vatom);
}
// loop over neighbors of my atoms
int inum = list->inum;
EV_FLOAT ev;
copymode = 1;
if (neighflag == HALF) {
if (evflag) Kokkos::parallel_reduce(Kokkos::RangePolicy<DeviceType, TagDPDKokkos<HALF,1> >(0,inum),*this,ev);
else Kokkos::parallel_for(Kokkos::RangePolicy<DeviceType, TagDPDKokkos<HALF,0> >(0,inum),*this);
} else if (neighflag == HALFTHREAD) {
if (evflag) Kokkos::parallel_reduce(Kokkos::RangePolicy<DeviceType, TagDPDKokkos<HALFTHREAD,1> >(0,inum),*this,ev);
else Kokkos::parallel_for(Kokkos::RangePolicy<DeviceType, TagDPDKokkos<HALFTHREAD,0> >(0,inum),*this);
}
if (need_dup)
Kokkos::Experimental::contribute(f, dup_f);
if (eflag_global) eng_vdwl += ev.evdwl;
if (vflag_global) {
virial[0] += ev.v[0];
virial[1] += ev.v[1];
virial[2] += ev.v[2];
virial[3] += ev.v[3];
virial[4] += ev.v[4];
virial[5] += ev.v[5];
}
if (vflag_fdotr) pair_virial_fdotr_compute(this);
if (eflag_atom) {
if (need_dup)
Kokkos::Experimental::contribute(d_eatom, dup_eatom);
k_eatom.template modify<DeviceType>();
k_eatom.template sync<LMPHostType>();
}
if (vflag_atom) {
if (need_dup)
Kokkos::Experimental::contribute(d_vatom, dup_vatom);
k_vatom.template modify<DeviceType>();
k_vatom.template sync<LMPHostType>();
}
copymode = 0;
if (evflag) atomKK->modified(execution_space,F_MASK | ENERGY_MASK | VIRIAL_MASK);
else atomKK->modified(execution_space,F_MASK);
// free duplicated memory
if (need_dup) {
dup_f = decltype(dup_f)();
dup_eatom = decltype(dup_eatom)();
dup_vatom = decltype(dup_vatom)();
}
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
template<int NEIGHFLAG, int EVFLAG>
KOKKOS_INLINE_FUNCTION
void PairDPDKokkos<DeviceType>::operator() (TagDPDKokkos<NEIGHFLAG,EVFLAG>, const int &ii) const {
EV_FLOAT ev;
this->template operator()<NEIGHFLAG,EVFLAG>(TagDPDKokkos<NEIGHFLAG,EVFLAG>(), ii, ev);
}
template<class DeviceType>
template<int NEIGHFLAG, int EVFLAG>
KOKKOS_INLINE_FUNCTION
void PairDPDKokkos<DeviceType>::operator() (TagDPDKokkos<NEIGHFLAG,EVFLAG>, const int &ii, EV_FLOAT &ev) const {
// The f array is duplicated for OpenMP, atomic for CUDA, and neither for Serial
auto v_f = ScatterViewHelper<NeedDup_v<NEIGHFLAG,DeviceType>,decltype(dup_f),decltype(ndup_f)>::get(dup_f,ndup_f);
auto a_f = v_f.template access<AtomicDup_v<NEIGHFLAG,DeviceType>>();
int i,j,jj,jnum,itype,jtype;
double xtmp,ytmp,ztmp,delx,dely,delz,fpair;
double vxtmp,vytmp,vztmp,delvx,delvy,delvz;
double rsq,r,rinv,dot,wd,randnum,factor_dpd;
double fx = 0,fy = 0,fz = 0;
double evdwl = 0;
i = d_ilist[ii];
xtmp = x(i,0);
ytmp = x(i,1);
ztmp = x(i,2);
vxtmp = v(i,0);
vytmp = v(i,1);
vztmp = v(i,2);
itype = type(i);
jnum = d_numneigh[i];
rand_type rand_gen = rand_pool.get_state();
for (jj = 0; jj < jnum; jj++) {
j = d_neighbors(i,jj);
factor_dpd = special_lj[sbmask(j)];
j &= NEIGHMASK;
delx = xtmp - x(j,0);
dely = ytmp - x(j,1);
delz = ztmp - x(j,2);
rsq = delx*delx + dely*dely + delz*delz;
jtype = type(j);
if (rsq < d_cutsq(itype,jtype)) {
r = sqrt(rsq);
if (r < EPSILON) continue; // r can be 0.0 in DPD systems
rinv = 1.0/r;
delvx = vxtmp - v(j,0);
delvy = vytmp - v(j,1);
delvz = vztmp - v(j,2);
dot = delx*delvx + dely*delvy + delz*delvz;
wd = 1.0 - r/params(itype,jtype).cut;
randnum = rand_gen.normal();
// conservative force
fpair = params(itype,jtype).a0*wd;
// drag force - parallel
fpair -= params(itype,jtype).gamma*wd*wd*dot*rinv;
// random force - parallel
fpair += params(itype,jtype).sigma*wd*randnum*dtinvsqrt;
fpair *= factor_dpd*rinv;
fx += fpair*delx;
fy += fpair*dely;
fz += fpair*delz;
a_f(j,0) -= fpair*delx;
a_f(j,1) -= fpair*dely;
a_f(j,2) -= fpair*delz;
if (EVFLAG && eflag_global) {
// unshifted eng of conservative term:
// evdwl = -a0[itype][jtype]*r * (1.0-0.5*r/cut[itype][jtype]);
// eng shifted to 0.0 at cutoff
evdwl = 0.5*params(itype,jtype).a0*params(itype,jtype).cut* wd*wd;
evdwl *= factor_dpd;
ev.evdwl += evdwl;
}
if (EVFLAG && (eflag_atom || vflag_either))
this->template ev_tally<NEIGHFLAG>(ev,i,j,evdwl,fpair,delx,dely,delz);
}
}
a_f(i,0) += fx;
a_f(i,1) += fy;
a_f(i,2) += fz;
rand_pool.free_state(rand_gen);
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
template<int NEIGHFLAG>
KOKKOS_INLINE_FUNCTION
void PairDPDKokkos<DeviceType>::ev_tally(EV_FLOAT &ev, const int &i, const int &j,
const F_FLOAT &epair, const F_FLOAT &fpair, const F_FLOAT &delx,
const F_FLOAT &dely, const F_FLOAT &delz) const
{
// The eatom and vatom arrays are duplicated for OpenMP, atomic for CUDA, and neither for Serial
auto v_eatom = ScatterViewHelper<NeedDup_v<NEIGHFLAG,DeviceType>,decltype(dup_eatom),decltype(ndup_eatom)>::get(dup_eatom,ndup_eatom);
auto a_eatom = v_eatom.template access<AtomicDup_v<NEIGHFLAG,DeviceType>>();
auto v_vatom = ScatterViewHelper<NeedDup_v<NEIGHFLAG,DeviceType>,decltype(dup_vatom),decltype(ndup_vatom)>::get(dup_vatom,ndup_vatom);
auto a_vatom = v_vatom.template access<AtomicDup_v<NEIGHFLAG,DeviceType>>();
if (eflag_atom) {
const E_FLOAT epairhalf = 0.5 * epair;
a_eatom[i] += epairhalf;
a_eatom[j] += epairhalf;
}
if (vflag_either) {
const E_FLOAT v0 = delx*delx*fpair;
const E_FLOAT v1 = dely*dely*fpair;
const E_FLOAT v2 = delz*delz*fpair;
const E_FLOAT v3 = delx*dely*fpair;
const E_FLOAT v4 = delx*delz*fpair;
const E_FLOAT v5 = dely*delz*fpair;
if (vflag_global) {
ev.v[0] += v0;
ev.v[1] += v1;
ev.v[2] += v2;
ev.v[3] += v3;
ev.v[4] += v4;
ev.v[5] += v5;
}
if (vflag_atom) {
a_vatom(i,0) += 0.5*v0;
a_vatom(i,1) += 0.5*v1;
a_vatom(i,2) += 0.5*v2;
a_vatom(i,3) += 0.5*v3;
a_vatom(i,4) += 0.5*v4;
a_vatom(i,5) += 0.5*v5;
a_vatom(j,0) += 0.5*v0;
a_vatom(j,1) += 0.5*v1;
a_vatom(j,2) += 0.5*v2;
a_vatom(j,3) += 0.5*v3;
a_vatom(j,4) += 0.5*v4;
a_vatom(j,5) += 0.5*v5;
}
}
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
void PairDPDKokkos<DeviceType>::allocate()
{
PairDPD::allocate();
int n = atom->ntypes;
memory->destroy(cutsq);
memoryKK->create_kokkos(k_cutsq,cutsq,n+1,n+1,"pair:cutsq");
d_cutsq = k_cutsq.template view<DeviceType>();
k_params = Kokkos::DualView<params_dpd**,Kokkos::LayoutRight,DeviceType>("PairDPD::params",n+1,n+1);
params = k_params.template view<DeviceType>();
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
KOKKOS_INLINE_FUNCTION
int PairDPDKokkos<DeviceType>::sbmask(const int& j) const {
return j >> SBBITS & 3;
}
/* ----------------------------------------------------------------------
init for one type pair i,j and corresponding j,i
------------------------------------------------------------------------- */
template<class DeviceType>
double PairDPDKokkos<DeviceType>::init_one(int i, int j)
{
double cutone = PairDPD::init_one(i,j);
k_params.h_view(i,j).cut = cut[i][j];
k_params.h_view(i,j).a0 = a0[i][j];
k_params.h_view(i,j).gamma = gamma[i][j];
k_params.h_view(i,j).sigma = sigma[i][j];
k_params.h_view(j,i) = k_params.h_view(i,j);
k_params.template modify<LMPHostType>();
k_cutsq.h_view(i,j) = cutone*cutone;
k_cutsq.h_view(j,i) = k_cutsq.h_view(i,j);
k_cutsq.template modify<LMPHostType>();
return cutone;
}
namespace LAMMPS_NS {
template class PairDPDKokkos<LMPDeviceType>;
#ifdef LMP_KOKKOS_GPU
template class PairDPDKokkos<LMPHostType>;
#endif
}

View File

@ -0,0 +1,142 @@
/* -*- c++ -*- ----------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
https://www.lammps.org/, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#ifdef PAIR_CLASS
// clang-format off
PairStyle(dpd/kk,PairDPDKokkos<LMPDeviceType>);
PairStyle(dpd/kk/device,PairDPDKokkos<LMPDeviceType>);
PairStyle(dpd/kk/host,PairDPDKokkos<LMPHostType>);
// clang-format on
#else
#ifndef LMP_PAIR_DPD_KOKKOS_H
#define LMP_PAIR_DPD_KOKKOS_H
#include "pair_dpd.h"
#include "pair_kokkos.h"
#include "kokkos_type.h"
#if !defined(DPD_USE_RAN_MARS) && !defined(DPD_USE_Random_XorShift64) && !defined(Random_XorShift1024)
#define DPD_USE_Random_XorShift64
#endif
#ifdef DPD_USE_RAN_MARS
#include "rand_pool_wrap_kokkos.h"
#else
#include "Kokkos_Random.hpp"
#endif
namespace LAMMPS_NS {
template<class DeviceType>
class PairDPDKokkos : public PairDPD {
public:
typedef DeviceType device_type;
typedef ArrayTypes<DeviceType> AT;
typedef EV_FLOAT value_type;
PairDPDKokkos(class LAMMPS*);
~PairDPDKokkos() override;
void allocate() override;
void init_style() override;
double init_one(int i, int j) override;
void compute(int, int) override;
struct params_dpd {
KOKKOS_INLINE_FUNCTION
params_dpd() {cut=a0=gamma=sigma=0;}
KOKKOS_INLINE_FUNCTION
params_dpd(int /*i*/) {cut=a0=gamma=sigma=0;}
F_FLOAT cut,a0,gamma,sigma;
};
template<int NEIGHFLAG, int EVFLAG>
struct TagDPDKokkos{};
template<int NEIGHFLAG, int EVFLAG>
KOKKOS_INLINE_FUNCTION
void operator () (TagDPDKokkos<NEIGHFLAG,EVFLAG>, const int &i) const;
template<int NEIGHFLAG, int EVFLAG>
KOKKOS_INLINE_FUNCTION
void operator () (TagDPDKokkos<NEIGHFLAG,EVFLAG>, const int &i, EV_FLOAT&) const;
template<int NEIGHFLAG>
KOKKOS_INLINE_FUNCTION
void ev_tally(EV_FLOAT &ev, const int &i, const int &j,
const F_FLOAT &epair, const F_FLOAT &fpair, const F_FLOAT &delx,
const F_FLOAT &dely, const F_FLOAT &delz) const;
private:
double special_lj[4];
int eflag,vflag;
int neighflag,nlocal;
double dtinvsqrt;
int need_dup;
using KKDeviceType = typename KKDevice<DeviceType>::value;
template<typename DataType, typename Layout>
using DupScatterView = KKScatterView<DataType, Layout, KKDeviceType, KKScatterSum, KKScatterDuplicated>;
template<typename DataType, typename Layout>
using NonDupScatterView = KKScatterView<DataType, Layout, KKDeviceType, KKScatterSum, KKScatterNonDuplicated>;
DupScatterView<F_FLOAT*[3], typename DAT::t_f_array::array_layout> dup_f;
DupScatterView<E_FLOAT*, typename DAT::t_efloat_1d::array_layout> dup_eatom;
DupScatterView<F_FLOAT*[6], typename DAT::t_virial_array::array_layout> dup_vatom;
NonDupScatterView<F_FLOAT*[3], typename DAT::t_f_array::array_layout> ndup_f;
NonDupScatterView<E_FLOAT*, typename DAT::t_efloat_1d::array_layout> ndup_eatom;
NonDupScatterView<F_FLOAT*[6], typename DAT::t_virial_array::array_layout> ndup_vatom;
#ifdef DPD_USE_RAN_MARS
RandPoolWrap rand_pool;
typedef RandWrap rand_type;
#elif defined(DPD_USE_Random_XorShift64)
Kokkos::Random_XorShift64_Pool<DeviceType> rand_pool;
typedef typename Kokkos::Random_XorShift64_Pool<DeviceType>::generator_type rand_type;
#elif defined(DPD_USE_Random_XorShift1024)
Kokkos::Random_XorShift1024_Pool<DeviceType> rand_pool;
typedef typename Kokkos::Random_XorShift1024_Pool<DeviceType>::generator_type rand_type;
#endif
typename AT::t_x_array_randomread x;
typename AT::t_x_array_randomread v;
typename AT::t_f_array f;
typename AT::t_int_1d_randomread type;
typename AT::t_neighbors_2d d_neighbors;
typename AT::t_int_1d_randomread d_ilist;
typename AT::t_int_1d_randomread d_numneigh;
typename AT::tdual_ffloat_2d k_cutsq;
typename AT::t_ffloat_2d d_cutsq;
Kokkos::DualView<params_dpd**,Kokkos::LayoutRight,DeviceType> k_params;
typename Kokkos::DualView<params_dpd**,
Kokkos::LayoutRight,DeviceType>::t_dev_const_um params;
DAT::tdual_efloat_1d k_eatom;
DAT::tdual_virial_array k_vatom;
typename AT::t_efloat_1d d_eatom;
typename AT::t_virial_array d_vatom;
KOKKOS_INLINE_FUNCTION
int sbmask(const int& j) const;
friend void pair_virial_fdotr_compute<PairDPDKokkos>(PairDPDKokkos*);
};
}
#endif
#endif

View File

@ -0,0 +1,399 @@
// clang-format off
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
https://www.lammps.org/, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing author: Matt Bettencourt (NVIDIA)
------------------------------------------------------------------------- */
#include "pair_dpd_tstat_kokkos.h"
#include "atom.h"
#include "atom_kokkos.h"
#include "memory_kokkos.h"
#include "comm.h"
#include "error.h"
#include "force.h"
#include "memory.h"
#include "neigh_list.h"
#include "neigh_request.h"
#include "neighbor.h"
#include "random_mars.h"
#include "update.h"
#include "atom_masks.h"
#include "kokkos.h"
#include <cmath>
using namespace LAMMPS_NS;
#define EPSILON 1.0e-10
template<class DeviceType>
PairDPDTstatKokkos<DeviceType>::PairDPDTstatKokkos(class LAMMPS *lmp) :
PairDPDTstat(lmp) ,
#ifdef DPD_USE_RAN_MARS
rand_pool(0 /* unused */, lmp)
#else
rand_pool()
#endif
{
kokkosable = 1;
atomKK = (AtomKokkos *) atom;
execution_space = ExecutionSpaceFromDevice<DeviceType>::space;
datamask_read = EMPTY_MASK;
datamask_modify = EMPTY_MASK;
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
PairDPDTstatKokkos<DeviceType>::~PairDPDTstatKokkos() {
if (copymode) return;
#ifdef DPD_USE_RAN_MARS
rand_pool.destroy();
#endif
memoryKK->destroy_kokkos(k_vatom,vatom);
memoryKK->destroy_kokkos(k_cutsq,cutsq);
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
void PairDPDTstatKokkos<DeviceType>::init_style()
{
PairDPD::init_style();
#ifdef DPD_USE_RAN_MARS
rand_pool.init(random,seed);
#else
typedef Kokkos::Experimental::UniqueToken<
DeviceType, Kokkos::Experimental::UniqueTokenScope::Global> unique_token_type;
unique_token_type unique_token;
rand_pool.init(seed + comm->me,unique_token.size());
#endif
neighflag = lmp->kokkos->neighflag;
if (force->newton_pair == 0 || neighflag == FULL )
error->all(FLERR,"Must use half neighbor list style and newton on with pair dpd/kk");
auto request = neighbor->find_request(this);
request->set_kokkos_host(std::is_same<DeviceType,LMPHostType>::value &&
!std::is_same<DeviceType,LMPDeviceType>::value);
request->set_kokkos_device(std::is_same<DeviceType,LMPDeviceType>::value);
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
void PairDPDTstatKokkos<DeviceType>::compute(int eflagin, int vflagin)
{
eflag = eflagin; vflag = vflagin;
ev_init(eflag,vflag,0);
// adjust sigma if target T is changing
if (t_start != t_stop) {
double delta = update->ntimestep - update->beginstep;
if (delta != 0.0) delta /= update->endstep - update->beginstep;
temperature = t_start + delta * (t_stop-t_start);
double boltz = force->boltz;
for (int i = 1; i <= atom->ntypes; i++)
for (int j = i; j <= atom->ntypes; j++) {
k_params.h_view(i,j).sigma = k_params.h_view(j,i).sigma =
sqrt(2.0*boltz*temperature*gamma[i][j]);
}
}
k_params.template modify<LMPHostType>();
if (eflag_atom) {
maxeatom = atom->nmax;
memory->destroy(eatom);
memory->create(eatom,maxeatom,"pair:eatom");
memset(&eatom[0], 0, maxeatom * sizeof(double));
}
if (vflag_atom) {
memoryKK->destroy_kokkos(k_vatom,vatom);
memoryKK->create_kokkos(k_vatom,vatom,maxvatom,"pair:vatom");
d_vatom = k_vatom.template view<DeviceType>();
}
atomKK->sync(execution_space,X_MASK | V_MASK | F_MASK | TYPE_MASK | ENERGY_MASK | VIRIAL_MASK);
x = atomKK->k_x.view<DeviceType>();
v = atomKK->k_v.view<DeviceType>();
f = atomKK->k_f.view<DeviceType>();
type = atomKK->k_type.view<DeviceType>();
k_cutsq.template sync<DeviceType>();
k_params.template sync<DeviceType>();
special_lj[0] = force->special_lj[0];
special_lj[1] = force->special_lj[1];
special_lj[2] = force->special_lj[2];
special_lj[3] = force->special_lj[3];
nlocal = atom->nlocal;
dtinvsqrt = 1.0/sqrt(update->dt);
NeighListKokkos<DeviceType>* k_list = static_cast<NeighListKokkos<DeviceType>*>(list);
d_numneigh = k_list->d_numneigh;
d_neighbors = k_list->d_neighbors;
d_ilist = k_list->d_ilist;
need_dup = lmp->kokkos->need_dup<DeviceType>();
if (need_dup) {
dup_f = Kokkos::Experimental::create_scatter_view<Kokkos::Experimental::ScatterSum, Kokkos::Experimental::ScatterDuplicated>(f);
dup_vatom = Kokkos::Experimental::create_scatter_view<Kokkos::Experimental::ScatterSum, Kokkos::Experimental::ScatterDuplicated>(d_vatom);
} else {
ndup_f = Kokkos::Experimental::create_scatter_view<Kokkos::Experimental::ScatterSum, Kokkos::Experimental::ScatterNonDuplicated>(f);
ndup_vatom = Kokkos::Experimental::create_scatter_view<Kokkos::Experimental::ScatterSum, Kokkos::Experimental::ScatterNonDuplicated>(d_vatom);
}
// loop over neighbors of my atoms
int inum = list->inum;
EV_FLOAT ev;
copymode = 1;
if (neighflag == HALF) {
if (vflag_either) Kokkos::parallel_reduce(Kokkos::RangePolicy<DeviceType, TagDPDTstatKokkos<HALF,1> >(0,inum),*this,ev);
else Kokkos::parallel_for(Kokkos::RangePolicy<DeviceType, TagDPDTstatKokkos<HALF,0> >(0,inum),*this);
} else if (neighflag == HALFTHREAD) {
if (vflag_either) Kokkos::parallel_reduce(Kokkos::RangePolicy<DeviceType, TagDPDTstatKokkos<HALFTHREAD,1> >(0,inum),*this,ev);
else Kokkos::parallel_for(Kokkos::RangePolicy<DeviceType, TagDPDTstatKokkos<HALFTHREAD,0> >(0,inum),*this);
}
if (need_dup)
Kokkos::Experimental::contribute(f, dup_f);
if (vflag_global) {
virial[0] += ev.v[0];
virial[1] += ev.v[1];
virial[2] += ev.v[2];
virial[3] += ev.v[3];
virial[4] += ev.v[4];
virial[5] += ev.v[5];
}
if (vflag_fdotr) pair_virial_fdotr_compute(this);
if (vflag_atom) {
if (need_dup)
Kokkos::Experimental::contribute(d_vatom, dup_vatom);
k_vatom.template modify<DeviceType>();
k_vatom.template sync<LMPHostType>();
}
copymode = 0;
if (evflag) atomKK->modified(execution_space,F_MASK | ENERGY_MASK | VIRIAL_MASK);
else atomKK->modified(execution_space,F_MASK);
// free duplicated memory
if (need_dup) {
dup_f = decltype(dup_f)();
dup_vatom = decltype(dup_vatom)();
}
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
template<int NEIGHFLAG, int VFLAG>
KOKKOS_INLINE_FUNCTION
void PairDPDTstatKokkos<DeviceType>::operator() (TagDPDTstatKokkos<NEIGHFLAG,VFLAG>, const int &ii) const {
EV_FLOAT ev;
this->template operator()<NEIGHFLAG,VFLAG>(TagDPDTstatKokkos<NEIGHFLAG,VFLAG>(), ii, ev);
}
template<class DeviceType>
template<int NEIGHFLAG, int VFLAG>
KOKKOS_INLINE_FUNCTION
void PairDPDTstatKokkos<DeviceType>::operator() (TagDPDTstatKokkos<NEIGHFLAG,VFLAG>, const int &ii, EV_FLOAT &ev) const {
// The f array is duplicated for OpenMP, atomic for CUDA, and neither for Serial
auto v_f = ScatterViewHelper<NeedDup_v<NEIGHFLAG,DeviceType>,decltype(dup_f),decltype(ndup_f)>::get(dup_f,ndup_f);
auto a_f = v_f.template access<AtomicDup_v<NEIGHFLAG,DeviceType>>();
int i,j,jj,jnum,itype,jtype;
double xtmp,ytmp,ztmp,delx,dely,delz,fpair;
double vxtmp,vytmp,vztmp,delvx,delvy,delvz;
double rsq,r,rinv,dot,wd,randnum,factor_dpd;
double fx = 0,fy = 0,fz = 0;
i = d_ilist[ii];
xtmp = x(i,0);
ytmp = x(i,1);
ztmp = x(i,2);
vxtmp = v(i,0);
vytmp = v(i,1);
vztmp = v(i,2);
itype = type(i);
jnum = d_numneigh[i];
rand_type rand_gen = rand_pool.get_state();
for (jj = 0; jj < jnum; jj++) {
j = d_neighbors(i,jj);
factor_dpd = special_lj[sbmask(j)];
j &= NEIGHMASK;
delx = xtmp - x(j,0);
dely = ytmp - x(j,1);
delz = ztmp - x(j,2);
rsq = delx*delx + dely*dely + delz*delz;
jtype = type(j);
if (rsq < d_cutsq(itype,jtype)) {
r = sqrt(rsq);
if (r < EPSILON) continue; // r can be 0.0 in DPD systems
rinv = 1.0/r;
delvx = vxtmp - v(j,0);
delvy = vytmp - v(j,1);
delvz = vztmp - v(j,2);
dot = delx*delvx + dely*delvy + delz*delvz;
wd = 1.0 - r/params(itype,jtype).cut;
randnum = rand_gen.normal();
// drag force - parallel
fpair = -params(itype,jtype).gamma*wd*wd*dot*rinv;
// random force - parallel
fpair += params(itype,jtype).sigma*wd*randnum*dtinvsqrt;
fpair *= factor_dpd*rinv;
fx += fpair*delx;
fy += fpair*dely;
fz += fpair*delz;
a_f(j,0) -= fpair*delx;
a_f(j,1) -= fpair*dely;
a_f(j,2) -= fpair*delz;
if (VFLAG)
this->template v_tally<NEIGHFLAG>(ev,i,j,fpair,delx,dely,delz);
}
}
a_f(i,0) += fx;
a_f(i,1) += fy;
a_f(i,2) += fz;
rand_pool.free_state(rand_gen);
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
template<int NEIGHFLAG>
KOKKOS_INLINE_FUNCTION
void PairDPDTstatKokkos<DeviceType>::v_tally(EV_FLOAT &ev, const int &i, const int &j,
const F_FLOAT &fpair, const F_FLOAT &delx,
const F_FLOAT &dely, const F_FLOAT &delz) const
{
// The vatom array is duplicated for OpenMP, atomic for CUDA, and neither for Serial
auto v_vatom = ScatterViewHelper<NeedDup_v<NEIGHFLAG,DeviceType>,decltype(dup_vatom),decltype(ndup_vatom)>::get(dup_vatom,ndup_vatom);
auto a_vatom = v_vatom.template access<AtomicDup_v<NEIGHFLAG,DeviceType>>();
const E_FLOAT v0 = delx*delx*fpair;
const E_FLOAT v1 = dely*dely*fpair;
const E_FLOAT v2 = delz*delz*fpair;
const E_FLOAT v3 = delx*dely*fpair;
const E_FLOAT v4 = delx*delz*fpair;
const E_FLOAT v5 = dely*delz*fpair;
if (vflag_global) {
ev.v[0] += v0;
ev.v[1] += v1;
ev.v[2] += v2;
ev.v[3] += v3;
ev.v[4] += v4;
ev.v[5] += v5;
}
if (vflag_atom) {
a_vatom(i,0) += 0.5*v0;
a_vatom(i,1) += 0.5*v1;
a_vatom(i,2) += 0.5*v2;
a_vatom(i,3) += 0.5*v3;
a_vatom(i,4) += 0.5*v4;
a_vatom(i,5) += 0.5*v5;
a_vatom(j,0) += 0.5*v0;
a_vatom(j,1) += 0.5*v1;
a_vatom(j,2) += 0.5*v2;
a_vatom(j,3) += 0.5*v3;
a_vatom(j,4) += 0.5*v4;
a_vatom(j,5) += 0.5*v5;
}
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
void PairDPDTstatKokkos<DeviceType>::allocate()
{
PairDPD::allocate();
int n = atom->ntypes;
memory->destroy(cutsq);
memoryKK->create_kokkos(k_cutsq,cutsq,n+1,n+1,"pair:cutsq");
d_cutsq = k_cutsq.template view<DeviceType>();
k_params = Kokkos::DualView<params_dpd**,Kokkos::LayoutRight,DeviceType>("PairDPD::params",n+1,n+1);
params = k_params.template view<DeviceType>();
}
/* ---------------------------------------------------------------------- */
template<class DeviceType>
KOKKOS_INLINE_FUNCTION
int PairDPDTstatKokkos<DeviceType>::sbmask(const int& j) const {
return j >> SBBITS & 3;
}
/* ----------------------------------------------------------------------
init for one type pair i,j and corresponding j,i
------------------------------------------------------------------------- */
template<class DeviceType>
double PairDPDTstatKokkos<DeviceType>::init_one(int i, int j)
{
double cutone = PairDPD::init_one(i,j);
k_params.h_view(i,j).cut = cut[i][j];
k_params.h_view(i,j).gamma = gamma[i][j];
k_params.h_view(i,j).sigma = sigma[i][j];
k_params.h_view(j,i) = k_params.h_view(i,j);
k_params.template modify<LMPHostType>();
k_cutsq.h_view(i,j) = cutone*cutone;
k_cutsq.h_view(j,i) = k_cutsq.h_view(i,j);
k_cutsq.template modify<LMPHostType>();
return cutone;
}
namespace LAMMPS_NS {
template class PairDPDTstatKokkos<LMPDeviceType>;
#ifdef LMP_KOKKOS_GPU
template class PairDPDTstatKokkos<LMPHostType>;
#endif
}

View File

@ -0,0 +1,138 @@
/* -*- c++ -*- ----------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
https://www.lammps.org/, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
#ifdef PAIR_CLASS
// clang-format off
PairStyle(dpd/tstat/kk,PairDPDTstatKokkos<LMPDeviceType>);
PairStyle(dpd/tstat/kk/device,PairDPDTstatKokkos<LMPDeviceType>);
PairStyle(dpd/tstat/kk/host,PairDPDTstatKokkos<LMPHostType>);
// clang-format on
#else
#ifndef LMP_PAIR_DPD_TSTAT_KOKKOS_H
#define LMP_PAIR_DPD_TSTAT_KOKKOS_H
#include "pair_dpd_tstat.h"
#include "pair_kokkos.h"
#include "kokkos_type.h"
#if !defined(DPD_USE_RAN_MARS) && !defined(DPD_USE_Random_XorShift64) && !defined(Random_XorShift1024)
#define DPD_USE_Random_XorShift64
#endif
#ifdef DPD_USE_RAN_MARS
#include "rand_pool_wrap_kokkos.h"
#else
#include "Kokkos_Random.hpp"
#endif
namespace LAMMPS_NS {
template<class DeviceType>
class PairDPDTstatKokkos : public PairDPDTstat {
public:
typedef DeviceType device_type;
typedef ArrayTypes<DeviceType> AT;
typedef EV_FLOAT value_type;
PairDPDTstatKokkos(class LAMMPS*);
~PairDPDTstatKokkos() override;
void allocate() override;
void init_style() override;
double init_one(int i, int j) override;
void compute(int, int) override;
struct params_dpd {
KOKKOS_INLINE_FUNCTION
params_dpd() {cut=gamma=sigma=0;}
KOKKOS_INLINE_FUNCTION
params_dpd(int /*i*/) {cut=gamma=sigma=0;}
F_FLOAT cut,gamma,sigma;
};
template<int NEIGHFLAG, int VFLAG>
struct TagDPDTstatKokkos{};
template<int NEIGHFLAG, int VFLAG>
KOKKOS_INLINE_FUNCTION
void operator () (TagDPDTstatKokkos<NEIGHFLAG,VFLAG>, const int &i) const;
template<int NEIGHFLAG, int VFLAG>
KOKKOS_INLINE_FUNCTION
void operator () (TagDPDTstatKokkos<NEIGHFLAG,VFLAG>, const int &i, EV_FLOAT&) const;
template<int NEIGHFLAG>
KOKKOS_INLINE_FUNCTION
void v_tally(EV_FLOAT &ev, const int &i, const int &j,
const F_FLOAT &fpair, const F_FLOAT &delx,
const F_FLOAT &dely, const F_FLOAT &delz) const;
private:
double special_lj[4];
int eflag,vflag;
int neighflag,nlocal;
double dtinvsqrt;
int need_dup;
using KKDeviceType = typename KKDevice<DeviceType>::value;
template<typename DataType, typename Layout>
using DupScatterView = KKScatterView<DataType, Layout, KKDeviceType, KKScatterSum, KKScatterDuplicated>;
template<typename DataType, typename Layout>
using NonDupScatterView = KKScatterView<DataType, Layout, KKDeviceType, KKScatterSum, KKScatterNonDuplicated>;
DupScatterView<F_FLOAT*[3], typename DAT::t_f_array::array_layout> dup_f;
DupScatterView<F_FLOAT*[6], typename DAT::t_virial_array::array_layout> dup_vatom;
NonDupScatterView<F_FLOAT*[3], typename DAT::t_f_array::array_layout> ndup_f;
NonDupScatterView<F_FLOAT*[6], typename DAT::t_virial_array::array_layout> ndup_vatom;
#ifdef DPD_USE_RAN_MARS
RandPoolWrap rand_pool;
typedef RandWrap rand_type;
#elif defined(DPD_USE_Random_XorShift64)
Kokkos::Random_XorShift64_Pool<DeviceType> rand_pool;
typedef typename Kokkos::Random_XorShift64_Pool<DeviceType>::generator_type rand_type;
#elif defined(DPD_USE_Random_XorShift1024)
Kokkos::Random_XorShift1024_Pool<DeviceType> rand_pool;
typedef typename Kokkos::Random_XorShift1024_Pool<DeviceType>::generator_type rand_type;
#endif
typename AT::t_x_array_randomread x;
typename AT::t_x_array_randomread v;
typename AT::t_f_array f;
typename AT::t_int_1d_randomread type;
typename AT::t_neighbors_2d d_neighbors;
typename AT::t_int_1d_randomread d_ilist;
typename AT::t_int_1d_randomread d_numneigh;
typename AT::tdual_ffloat_2d k_cutsq;
typename AT::t_ffloat_2d d_cutsq;
Kokkos::DualView<params_dpd**,Kokkos::LayoutRight,DeviceType> k_params;
typename Kokkos::DualView<params_dpd**,
Kokkos::LayoutRight,DeviceType>::t_dev_const_um params;
DAT::tdual_virial_array k_vatom;
typename AT::t_virial_array d_vatom;
KOKKOS_INLINE_FUNCTION
int sbmask(const int& j) const;
friend void pair_virial_fdotr_compute<PairDPDTstatKokkos>(PairDPDTstatKokkos*);
};
}
#endif
#endif

View File

@ -694,7 +694,7 @@ void PairReaxFFKokkos<DeviceType>::compute(int eflag_in, int vflag_in)
eflag = eflag_in;
vflag = vflag_in;
ev_init(eflag,vflag);
ev_init(eflag,vflag,0);
atomKK->sync(execution_space,datamask_read);
k_params_sing.template sync<DeviceType>();
@ -715,7 +715,7 @@ void PairReaxFFKokkos<DeviceType>::compute(int eflag_in, int vflag_in)
newton_pair = force->newton_pair;
nn = list->inum;
NN = list->inum + list->gnum;
NN = atom->nlocal + atom->nghost;
const int inum = list->inum;
const int ignum = inum + list->gnum;
@ -958,9 +958,9 @@ void PairReaxFFKokkos<DeviceType>::compute(int eflag_in, int vflag_in)
count_angular = h_count_angular_torsion(0);
count_torsion = h_count_angular_torsion(1);
if (count_angular > d_angular_pack.extent(0))
if (count_angular > (int)d_angular_pack.extent(0))
d_angular_pack = t_reax_int4_2d("reaxff:angular_pack",(int)(count_angular * 1.1),2);
if (count_torsion > d_torsion_pack.extent(0))
if (count_torsion > (int)d_torsion_pack.extent(0))
d_torsion_pack = t_reax_int4_2d("reaxff:torsion_pack",(int)(count_torsion * 1.1),2);
// need to zero to re-count
@ -2584,8 +2584,6 @@ void PairReaxFFKokkos<DeviceType>::compute_angular_sbo(int i, int itype, int j_s
const F_FLOAT p_val8 = gp[33];
const F_FLOAT p_val9 = gp[16];
const F_FLOAT Delta_val = d_total_bo[i] - paramssing(itype).valency_val;
F_FLOAT SBOp = 0.0;
F_FLOAT prod_SBO = 1.0;
@ -2710,7 +2708,7 @@ int PairReaxFFKokkos<DeviceType>::preprocess_angular(int i, int itype, int j_sta
template<class DeviceType>
template<bool POPULATE>
KOKKOS_INLINE_FUNCTION
int PairReaxFFKokkos<DeviceType>::preprocess_torsion(int i, int itype, int itag,
int PairReaxFFKokkos<DeviceType>::preprocess_torsion(int i, int /*itype*/, int itag,
F_FLOAT xtmp, F_FLOAT ytmp, F_FLOAT ztmp, int j_start, int j_end, int location_torsion) const {
// in reaxff_torsion_angles: j = i, k = j, i = k;
@ -2721,7 +2719,6 @@ int PairReaxFFKokkos<DeviceType>::preprocess_torsion(int i, int itype, int itag,
int j = d_bo_list[jj];
j &= NEIGHMASK;
const tagint jtag = tag(j);
const int jtype = type(j);
const int j_index = jj - j_start;
// skip half of the interactions

View File

@ -237,7 +237,7 @@ void FixQEqReaxFFOMP::init_storage()
#if defined(_OPENMP)
#pragma omp parallel for schedule(static)
#endif
for (int i = 0; i < NN; i++) {
for (int i = 0; i < nn; i++) {
Hdia_inv[i] = 1. / eta[atom->type[i]];
b_s[i] = -chi[atom->type[i]];
if (efield) b_s[i] -= chi_field[i];
@ -254,17 +254,13 @@ void FixQEqReaxFFOMP::pre_force(int /* vflag */)
{
if (update->ntimestep % nevery) return;
int n = atom->nlocal;
if (reaxff) {
nn = reaxff->list->inum;
NN = reaxff->list->inum + reaxff->list->gnum;
ilist = reaxff->list->ilist;
numneigh = reaxff->list->numneigh;
firstneigh = reaxff->list->firstneigh;
} else {
nn = list->inum;
NN = list->inum + list->gnum;
ilist = list->ilist;
numneigh = list->numneigh;
firstneigh = list->firstneigh;
@ -274,7 +270,7 @@ void FixQEqReaxFFOMP::pre_force(int /* vflag */)
// need to be atom->nmax in length
if (atom->nmax > nmax) reallocate_storage();
if (n > n_cap*DANGER_ZONE || m_fill > m_cap*DANGER_ZONE)
if (atom->nlocal > n_cap*DANGER_ZONE || m_fill > m_cap*DANGER_ZONE)
reallocate_matrix();
if (efield) get_chi_field();
@ -487,6 +483,9 @@ void FixQEqReaxFFOMP::sparse_matvec(sparse_matrix *A, double *x, double *b)
{
int i, j, itr_j;
int ii;
int nlocal = atom->nlocal;
int nall = atom->nlocal + atom->nghost;
int nthreads = comm->nthreads;
#if defined(_OPENMP)
int tid = omp_get_thread_num();
@ -505,15 +504,14 @@ void FixQEqReaxFFOMP::sparse_matvec(sparse_matrix *A, double *x, double *b)
#if defined(_OPENMP)
#pragma omp for schedule(dynamic,50)
#endif
for (ii = nn; ii < NN; ++ii) {
i = ilist[ii];
for (i = nlocal; i < nall; ++i) {
if (atom->mask[i] & groupbit) b[i] = 0;
}
#if defined(_OPENMP)
#pragma omp for schedule(dynamic,50)
#endif
for (i = 0; i < NN; ++i)
for (i = 0; i < nall; ++i)
for (int t=0; t<nthreads; t++) b_temp[t][i] = 0.0;
// Wait for b accumulated and b_temp zeroed.
@ -538,7 +536,7 @@ void FixQEqReaxFFOMP::sparse_matvec(sparse_matrix *A, double *x, double *b)
#pragma omp barrier
#pragma omp for schedule(dynamic,50)
#endif
for (i = 0; i < NN; ++i)
for (i = 0; i < nall; ++i)
for (int t = 0; t < nthreads; ++t) b[i] += b_temp[t][i];
} //end omp parallel
@ -815,6 +813,8 @@ void FixQEqReaxFFOMP::dual_sparse_matvec(sparse_matrix *A, double *x1, double *x
int i, j, itr_j;
int ii;
int indxI, indxJ;
int nlocal = atom->nlocal;
int nall = atom->nlocal + atom->nghost;
int nthreads = comm->nthreads;
#if defined(_OPENMP)
@ -838,8 +838,7 @@ void FixQEqReaxFFOMP::dual_sparse_matvec(sparse_matrix *A, double *x1, double *x
#if defined(_OPENMP)
#pragma omp for schedule(dynamic,50)
#endif
for (ii = nn; ii < NN; ++ii) {
i = ilist[ii];
for (i = nlocal; i < nall; ++i) {
if (atom->mask[i] & groupbit) {
indxI = 2 * i;
b[indxI] = 0;
@ -850,7 +849,7 @@ void FixQEqReaxFFOMP::dual_sparse_matvec(sparse_matrix *A, double *x1, double *x
#if defined(_OPENMP)
#pragma omp for schedule(dynamic,50)
#endif
for (i = 0; i < NN; ++i) {
for (i = 0; i < nall; ++i) {
indxI = 2 * i;
for (int t=0; t<nthreads; t++) {
b_temp[t][indxI] = 0.0;
@ -884,7 +883,7 @@ void FixQEqReaxFFOMP::dual_sparse_matvec(sparse_matrix *A, double *x1, double *x
#pragma omp barrier
#pragma omp for schedule(dynamic,50)
#endif
for (i = 0; i < NN; ++i) {
for (i = 0; i < nall; ++i) {
indxI = 2 * i;
for (int t = 0; t < nthreads; ++t) {
b[indxI] += b_temp[t][indxI];
@ -906,6 +905,8 @@ void FixQEqReaxFFOMP::dual_sparse_matvec(sparse_matrix *A, double *x, double *b)
int i, j, itr_j;
int ii;
int indxI, indxJ;
int nlocal = atom->nlocal;
int nall = atom->nlocal + atom->nghost;
int nthreads = comm->nthreads;
#if defined(_OPENMP)
@ -929,8 +930,7 @@ void FixQEqReaxFFOMP::dual_sparse_matvec(sparse_matrix *A, double *x, double *b)
#if defined(_OPENMP)
#pragma omp for schedule(dynamic,50)
#endif
for (ii = nn; ii < NN; ++ii) {
i = ilist[ii];
for (i = nlocal; i < nall; ++i) {
if (atom->mask[i] & groupbit) {
indxI = 2 * i;
b[indxI] = 0;
@ -941,7 +941,7 @@ void FixQEqReaxFFOMP::dual_sparse_matvec(sparse_matrix *A, double *x, double *b)
#if defined(_OPENMP)
#pragma omp for schedule(dynamic,50)
#endif
for (i = 0; i < NN; ++i) {
for (i = 0; i < nall; ++i) {
indxI = 2 * i;
for (int t=0; t<nthreads; t++) {
b_temp[t][indxI] = 0.0;
@ -975,7 +975,7 @@ void FixQEqReaxFFOMP::dual_sparse_matvec(sparse_matrix *A, double *x, double *b)
#pragma omp barrier
#pragma omp for schedule(dynamic,50)
#endif
for (i = 0; i < NN; ++i) {
for (i = 0; i < nall; ++i) {
indxI = 2 * i;
for (int t = 0; t < nthreads; ++t) {
b[indxI] += b_temp[t][indxI];

View File

@ -356,7 +356,9 @@ void FixPOEMS::init()
for (auto ifix : modify->get_fix_list()) {
if (utils::strmatch(ifix->style, "^poems")) pflag = true;
if (pflag && (ifix->setmask() & POST_FORCE) && !ifix->rigid_flag)
if (comm->me == 0) error->warning(FLERR, "Fix {} alters forces after fix poems", ifix->id);
if (comm->me == 0)
error->warning(FLERR,"Fix {} with ID {} alters forces after fix poems",
ifix->style, ifix->id);
}
}

View File

@ -203,7 +203,8 @@ void FixACKS2ReaxFF::pertype_parameters(char *arg)
void FixACKS2ReaxFF::allocate_storage()
{
nmax = atom->nmax;
int size = nmax*2 + 2;
NN = atom->nlocal + atom->nghost;
const int size = nmax*2 + 2;
// 0 to nn-1: owned atoms related to H matrix
// nn to NN-1: ghost atoms related to H matrix
@ -329,17 +330,15 @@ void FixACKS2ReaxFF::pre_force(int /*vflag*/)
{
if (update->ntimestep % nevery) return;
int n = atom->nlocal;
NN = atom->nlocal + atom->nghost;
if (reaxff) {
nn = reaxff->list->inum;
NN = reaxff->list->inum + reaxff->list->gnum;
ilist = reaxff->list->ilist;
numneigh = reaxff->list->numneigh;
firstneigh = reaxff->list->firstneigh;
} else {
nn = list->inum;
NN = list->inum + list->gnum;
ilist = list->ilist;
numneigh = list->numneigh;
firstneigh = list->firstneigh;
@ -349,7 +348,7 @@ void FixACKS2ReaxFF::pre_force(int /*vflag*/)
// need to be atom->nmax in length
if (atom->nmax > nmax) reallocate_storage();
if (n > n_cap*DANGER_ZONE || m_fill > m_cap*DANGER_ZONE)
if (atom->nlocal > n_cap*DANGER_ZONE || m_fill > m_cap*DANGER_ZONE)
reallocate_matrix();
if (efield) get_chi_field();
@ -626,8 +625,7 @@ void FixACKS2ReaxFF::sparse_matvec_acks2(sparse_matrix *H, sparse_matrix *X, dou
}
}
for (ii = nn; ii < NN; ++ii) {
i = ilist[ii];
for (i = atom->nlocal; i < NN; ++i) {
if (atom->mask[i] & groupbit) {
b[i] = 0;
b[NN + i] = 0;
@ -674,38 +672,34 @@ void FixACKS2ReaxFF::sparse_matvec_acks2(sparse_matrix *H, sparse_matrix *X, dou
void FixACKS2ReaxFF::calculate_Q()
{
int i, k;
pack_flag = 2;
comm->forward_comm(this); //Dist_vector(s);
for (int ii = 0; ii < nn; ++ii) {
i = ilist[ii];
for (int i = 0; i < NN; ++i) {
if (atom->mask[i] & groupbit) {
/* backup s */
for (k = nprev-1; k > 0; --k) {
s_hist[i][k] = s_hist[i][k-1];
s_hist_X[i][k] = s_hist_X[i][k-1];
atom->q[i] = s[i];
if (i < atom->nlocal) {
/* backup s */
for (int k = nprev-1; k > 0; --k) {
s_hist[i][k] = s_hist[i][k-1];
s_hist_X[i][k] = s_hist_X[i][k-1];
}
s_hist[i][0] = s[i];
s_hist_X[i][0] = s[NN+i];
}
s_hist[i][0] = s[i];
s_hist_X[i][0] = s[NN+i];
}
}
// last two rows
if (last_rows_flag) {
for (int i = 0; i < 2; ++i) {
for (k = nprev-1; k > 0; --k)
for (int k = nprev-1; k > 0; --k)
s_hist_last[i][k] = s_hist_last[i][k-1];
s_hist_last[i][0] = s[2*NN+i];
}
}
pack_flag = 2;
comm->forward_comm(this); //Dist_vector(s);
for (int ii = 0; ii < NN; ++ii) {
i = ilist[ii];
if (atom->mask[i] & groupbit)
atom->q[i] = s[i];
}
}
/* ---------------------------------------------------------------------- */

View File

@ -37,7 +37,7 @@ class FixACKS2ReaxFF : public FixQEqReaxFF {
double *get_s() { return s; }
protected:
int last_rows_rank, last_rows_flag;
int NN, last_rows_rank, last_rows_flag;
double **s_hist_X, **s_hist_last;
double *bcut_acks2, bond_softness, **bcut; // acks2 parameters

View File

@ -104,7 +104,7 @@ FixQEqReaxFF::FixQEqReaxFF(LAMMPS *lmp, int narg, char **arg) :
shld = nullptr;
nn = n_cap = 0;
NN = nmax = 0;
nmax = 0;
m_fill = m_cap = 0;
pack_flag = 0;
s = nullptr;
@ -319,7 +319,7 @@ void FixQEqReaxFF::reallocate_storage()
void FixQEqReaxFF::allocate_matrix()
{
int i,ii,n,m;
int i,ii,m;
int mincap;
double safezone;
@ -332,8 +332,7 @@ void FixQEqReaxFF::allocate_matrix()
safezone = REAX_SAFE_ZONE;
}
n = atom->nlocal;
n_cap = MAX((int)(n * safezone), mincap);
n_cap = MAX((int)(atom->nlocal * safezone), mincap);
// determine the total space for the H matrix
@ -493,13 +492,11 @@ void FixQEqReaxFF::setup_pre_force(int vflag)
{
if (reaxff) {
nn = reaxff->list->inum;
NN = reaxff->list->inum + reaxff->list->gnum;
ilist = reaxff->list->ilist;
numneigh = reaxff->list->numneigh;
firstneigh = reaxff->list->firstneigh;
} else {
nn = list->inum;
NN = list->inum + list->gnum;
ilist = list->ilist;
numneigh = list->numneigh;
firstneigh = list->firstneigh;
@ -537,7 +534,7 @@ void FixQEqReaxFF::init_storage()
{
if (efield) get_chi_field();
for (int ii = 0; ii < NN; ii++) {
for (int ii = 0; ii < nn; ii++) {
int i = ilist[ii];
if (atom->mask[i] & groupbit) {
Hdia_inv[i] = 1. / eta[atom->type[i]];
@ -561,13 +558,11 @@ void FixQEqReaxFF::pre_force(int /*vflag*/)
if (reaxff) {
nn = reaxff->list->inum;
NN = reaxff->list->inum + reaxff->list->gnum;
ilist = reaxff->list->ilist;
numneigh = reaxff->list->numneigh;
firstneigh = reaxff->list->firstneigh;
} else {
nn = list->inum;
NN = list->inum + list->gnum;
ilist = list->ilist;
numneigh = list->numneigh;
firstneigh = list->firstneigh;
@ -791,11 +786,9 @@ void FixQEqReaxFF::sparse_matvec(sparse_matrix *A, double *x, double *b)
b[i] = eta[atom->type[i]] * x[i];
}
for (ii = nn; ii < NN; ++ii) {
i = ilist[ii];
if (atom->mask[i] & groupbit)
int nall = atom->nlocal + atom->nghost;
for (i = atom->nlocal; i < nall; ++i)
b[i] = 0;
}
for (ii = 0; ii < nn; ++ii) {
i = ilist[ii];

View File

@ -59,7 +59,7 @@ class FixQEqReaxFF : public Fix {
protected:
int nevery, reaxflag;
int matvecs;
int nn, NN, m_fill;
int nn, m_fill;
int n_cap, nmax, m_cap;
int pack_flag;
int nlevels_respa;

View File

@ -693,7 +693,8 @@ void FixRigid::init()
for (auto ifix : modify->get_fix_list()) {
if (ifix->rigid_flag) rflag = true;
if ((comm->me == 0) && rflag && (ifix->setmask() & POST_FORCE) && !ifix->rigid_flag)
error->warning(FLERR,"Fix {} alters forces after fix rigid", ifix->id);
error->warning(FLERR,"Fix {} with ID {} alters forces after fix rigid",
ifix->style, ifix->id);
}
}

View File

@ -538,7 +538,8 @@ void FixRigidSmall::init()
for (auto ifix : modify->get_fix_list()) {
if (ifix->rigid_flag) rflag = true;
if ((comm->me == 0) && rflag && (ifix->setmask() & POST_FORCE) && !ifix->rigid_flag)
error->warning(FLERR,"Fix {} alters forces after fix rigid", ifix->id);
error->warning(FLERR,"Fix {} with ID {} alters forces after fix rigid/small",
ifix->style, ifix->id);
}
}

View File

@ -1916,7 +1916,12 @@ void DumpVTK::identify_vectors()
name.count(vector3_starts[v3s]+2) )
{
std::string vectorName = name[vector3_starts[v3s]];
vectorName.erase(vectorName.find_first_of('x'));
std::string::size_type erase_start = vectorName.find_first_of('x');
if (erase_start == 0) {
vectorName.erase(0,1);
} else {
vectorName.erase(erase_start);
}
name[vector3_starts[v3s]] = vectorName;
vector_set.insert(vector3_starts[v3s]);
}

View File

@ -249,11 +249,11 @@ void Modify::init()
for (i = 0; i < nfix; i++)
if (!fix[i]->dynamic_group_allow && group->dynamic[fix[i]->igroup])
error->all(FLERR, "Fix {} does not allow use with a dynamic group", fix[i]->id);
error->all(FLERR, "Fix {} does not allow use with a dynamic group", fix[i]->style);
for (i = 0; i < ncompute; i++)
if (!compute[i]->dynamic_group_allow && group->dynamic[compute[i]->igroup])
error->all(FLERR, "Compute {} does not allow use with a dynamic group", compute[i]->id);
error->all(FLERR, "Compute {} does not allow use with a dynamic group", compute[i]->style);
// warn if any particle is time integrated more than once