Merge remote-tracking branch 'github/develop' into collected-small-changes
This commit is contained in:
2
.github/CODEOWNERS
vendored
2
.github/CODEOWNERS
vendored
@ -73,6 +73,8 @@ src/MC/fix_sgcmc.* @athomps
|
|||||||
src/REAXFF/compute_reaxff_atom.* @rbberger
|
src/REAXFF/compute_reaxff_atom.* @rbberger
|
||||||
src/KOKKOS/compute_reaxff_atom_kokkos.* @rbberger
|
src/KOKKOS/compute_reaxff_atom_kokkos.* @rbberger
|
||||||
src/REPLICA/fix_pimd_langevin.* @Yi-FanLi
|
src/REPLICA/fix_pimd_langevin.* @Yi-FanLi
|
||||||
|
src/DPD-BASIC/pair_dpd_coul_slater_long.* @Eddy-Barraud
|
||||||
|
src/GPU/pair_dpd_coul_slater_long.* @Eddy-Barraud
|
||||||
|
|
||||||
# core LAMMPS classes
|
# core LAMMPS classes
|
||||||
src/lammps.* @sjplimp
|
src/lammps.* @sjplimp
|
||||||
|
|||||||
@ -690,7 +690,7 @@ endif()
|
|||||||
# packages which selectively include variants based on enabled styles
|
# packages which selectively include variants based on enabled styles
|
||||||
# e.g. accelerator packages
|
# e.g. accelerator packages
|
||||||
######################################################################
|
######################################################################
|
||||||
foreach(PKG_WITH_INCL CORESHELL DPD-SMOOTH MC MISC PHONON QEQ OPENMP KOKKOS OPT INTEL GPU)
|
foreach(PKG_WITH_INCL CORESHELL DPD-BASIC DPD-SMOOTH MC MISC PHONON QEQ OPENMP KOKKOS OPT INTEL GPU)
|
||||||
if(PKG_${PKG_WITH_INCL})
|
if(PKG_${PKG_WITH_INCL})
|
||||||
include(Packages/${PKG_WITH_INCL})
|
include(Packages/${PKG_WITH_INCL})
|
||||||
endif()
|
endif()
|
||||||
|
|||||||
9
cmake/Modules/Packages/DPD-BASIC.cmake
Normal file
9
cmake/Modules/Packages/DPD-BASIC.cmake
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
# pair style dpd/coul/slater/long may only be installed if also KSPACE is installed
|
||||||
|
if(NOT PKG_KSPACE)
|
||||||
|
get_property(LAMMPS_PAIR_HEADERS GLOBAL PROPERTY PAIR)
|
||||||
|
list(REMOVE_ITEM LAMMPS_PAIR_HEADERS ${LAMMPS_SOURCE_DIR}/DPD-BASIC/pair_dpd_coul_slater_long.h)
|
||||||
|
set_property(GLOBAL PROPERTY PAIR "${LAMMPS_PAIR_HEADERS}")
|
||||||
|
get_target_property(LAMMPS_SOURCES lammps SOURCES)
|
||||||
|
list(REMOVE_ITEM LAMMPS_SOURCES ${LAMMPS_SOURCE_DIR}/DPD-BASIC/pair_dpd_coul_slater_long.cpp)
|
||||||
|
set_property(TARGET lammps PROPERTY SOURCES "${LAMMPS_SOURCES}")
|
||||||
|
endif()
|
||||||
@ -1,5 +1,9 @@
|
|||||||
# Plumed2 support for PLUMED package
|
# Plumed2 support for PLUMED package
|
||||||
|
|
||||||
|
# for supporting multiple concurrent plumed2 installations for debugging and testing
|
||||||
|
set(PLUMED_SUFFIX "" CACHE STRING "Suffix for Plumed2 library")
|
||||||
|
mark_as_advanced(PLUMED_SUFFIX)
|
||||||
|
|
||||||
if(BUILD_MPI)
|
if(BUILD_MPI)
|
||||||
set(PLUMED_CONFIG_MPI "--enable-mpi")
|
set(PLUMED_CONFIG_MPI "--enable-mpi")
|
||||||
set(PLUMED_CONFIG_CC ${CMAKE_MPI_C_COMPILER})
|
set(PLUMED_CONFIG_CC ${CMAKE_MPI_C_COMPILER})
|
||||||
@ -153,15 +157,15 @@ else()
|
|||||||
file(MAKE_DIRECTORY ${INSTALL_DIR}/include)
|
file(MAKE_DIRECTORY ${INSTALL_DIR}/include)
|
||||||
else()
|
else()
|
||||||
find_package(PkgConfig REQUIRED)
|
find_package(PkgConfig REQUIRED)
|
||||||
pkg_check_modules(PLUMED REQUIRED plumed)
|
pkg_check_modules(PLUMED REQUIRED plumed${PLUMED_SUFFIX})
|
||||||
add_library(LAMMPS::PLUMED INTERFACE IMPORTED)
|
add_library(LAMMPS::PLUMED INTERFACE IMPORTED)
|
||||||
if(PLUMED_MODE STREQUAL "STATIC")
|
if(PLUMED_MODE STREQUAL "STATIC")
|
||||||
include(${PLUMED_LIBDIR}/plumed/src/lib/Plumed.cmake.static)
|
include(${PLUMED_LIBDIR}/plumed${PLUMED_SUFFIX}/src/lib/Plumed.cmake.static)
|
||||||
elseif(PLUMED_MODE STREQUAL "SHARED")
|
elseif(PLUMED_MODE STREQUAL "SHARED")
|
||||||
include(${PLUMED_LIBDIR}/plumed/src/lib/Plumed.cmake.shared)
|
include(${PLUMED_LIBDIR}/plumed${PLUMED_SUFFIX}/src/lib/Plumed.cmake.shared)
|
||||||
elseif(PLUMED_MODE STREQUAL "RUNTIME")
|
elseif(PLUMED_MODE STREQUAL "RUNTIME")
|
||||||
set_target_properties(LAMMPS::PLUMED PROPERTIES INTERFACE_COMPILE_DEFINITIONS "__PLUMED_DEFAULT_KERNEL=${PLUMED_LIBDIR}/${CMAKE_SHARED_LIBRARY_PREFIX}plumedKernel${CMAKE_SHARED_LIBRARY_SUFFIX}")
|
set_target_properties(LAMMPS::PLUMED PROPERTIES INTERFACE_COMPILE_DEFINITIONS "__PLUMED_DEFAULT_KERNEL=${PLUMED_LIBDIR}/${CMAKE_SHARED_LIBRARY_PREFIX}plumed${PLUMED_SUFFIX}Kernel${CMAKE_SHARED_LIBRARY_SUFFIX}")
|
||||||
include(${PLUMED_LIBDIR}/plumed/src/lib/Plumed.cmake.runtime)
|
include(${PLUMED_LIBDIR}/plumed${PLUMED_SUFFIX}/src/lib/Plumed.cmake.runtime)
|
||||||
endif()
|
endif()
|
||||||
set_target_properties(LAMMPS::PLUMED PROPERTIES INTERFACE_LINK_LIBRARIES "${PLUMED_LOAD}")
|
set_target_properties(LAMMPS::PLUMED PROPERTIES INTERFACE_LINK_LIBRARIES "${PLUMED_LOAD}")
|
||||||
set_target_properties(LAMMPS::PLUMED PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${PLUMED_INCLUDE_DIRS}")
|
set_target_properties(LAMMPS::PLUMED PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${PLUMED_INCLUDE_DIRS}")
|
||||||
|
|||||||
@ -94,9 +94,10 @@ OPT.
|
|||||||
* :doc:`coul/wolf (ko) <pair_coul>`
|
* :doc:`coul/wolf (ko) <pair_coul>`
|
||||||
* :doc:`coul/wolf/cs <pair_cs>`
|
* :doc:`coul/wolf/cs <pair_cs>`
|
||||||
* :doc:`dpd (giko) <pair_dpd>`
|
* :doc:`dpd (giko) <pair_dpd>`
|
||||||
* :doc:`dpd/fdt <pair_dpd_fdt>`
|
* :doc:`dpd/coul/slater/long (g) <pair_dpd_coul_slater_long>`
|
||||||
* :doc:`dpd/ext (ko) <pair_dpd_ext>`
|
* :doc:`dpd/ext (ko) <pair_dpd_ext>`
|
||||||
* :doc:`dpd/ext/tstat (ko) <pair_dpd_ext>`
|
* :doc:`dpd/ext/tstat (ko) <pair_dpd_ext>`
|
||||||
|
* :doc:`dpd/fdt <pair_dpd_fdt>`
|
||||||
* :doc:`dpd/fdt/energy (k) <pair_dpd_fdt>`
|
* :doc:`dpd/fdt/energy (k) <pair_dpd_fdt>`
|
||||||
* :doc:`dpd/tstat (gko) <pair_dpd>`
|
* :doc:`dpd/tstat (gko) <pair_dpd>`
|
||||||
* :doc:`dsmc <pair_dsmc>`
|
* :doc:`dsmc <pair_dsmc>`
|
||||||
|
|||||||
@ -677,7 +677,12 @@ DPD-BASIC package
|
|||||||
Pair styles for the basic dissipative particle dynamics (DPD) method
|
Pair styles for the basic dissipative particle dynamics (DPD) method
|
||||||
and DPD thermostatting.
|
and DPD thermostatting.
|
||||||
|
|
||||||
**Author:** Kurt Smith (U Pittsburgh), Martin Svoboda, Martin Lisal (ICPF and UJEP)
|
Pair style :doc:`dpd/coul/slater/long <pair_dpd_coul_slater_long>` also
|
||||||
|
includes smeared charges for coulomb interactions and thus requires the
|
||||||
|
:ref:`KSPACE <PKG-KSPACE>` package to be installed to handle the long-range
|
||||||
|
Coulomb part of the interactions.
|
||||||
|
|
||||||
|
**Authors:** Kurt Smith (U Pittsburgh), Martin Svoboda, Martin Lisal (ICPF and UJEP), Eddy Barraud (IFPEN)
|
||||||
|
|
||||||
**Supporting info:**
|
**Supporting info:**
|
||||||
|
|
||||||
@ -686,6 +691,7 @@ and DPD thermostatting.
|
|||||||
* :doc:`pair_style dpd/tstat <pair_dpd>`
|
* :doc:`pair_style dpd/tstat <pair_dpd>`
|
||||||
* :doc:`pair_style dpd/ext <pair_dpd_ext>`
|
* :doc:`pair_style dpd/ext <pair_dpd_ext>`
|
||||||
* :doc:`pair_style dpd/ext/tstat <pair_dpd_ext>`
|
* :doc:`pair_style dpd/ext/tstat <pair_dpd_ext>`
|
||||||
|
* :doc:`pair_style dpd/coul/slater/long <pair_dpd_coul_slater_long>`
|
||||||
* examples/PACKAGES/dpd-basic
|
* examples/PACKAGES/dpd-basic
|
||||||
|
|
||||||
----------
|
----------
|
||||||
|
|||||||
177
doc/src/pair_dpd_coul_slater_long.rst
Normal file
177
doc/src/pair_dpd_coul_slater_long.rst
Normal file
@ -0,0 +1,177 @@
|
|||||||
|
.. index:: pair_style dpd/coul/slater/long
|
||||||
|
.. index:: pair_style dpd/coul/slater/long/gpu
|
||||||
|
|
||||||
|
pair_style dpd/coul/slater/long command
|
||||||
|
=======================================
|
||||||
|
|
||||||
|
Accelerator Variants: *dpd/coul/slater/long/gpu*
|
||||||
|
|
||||||
|
Syntax
|
||||||
|
""""""
|
||||||
|
|
||||||
|
.. code-block:: LAMMPS
|
||||||
|
|
||||||
|
pair_style dpd/coul/slater/long T cutoff_DPD seed lambda cutoff_coul
|
||||||
|
|
||||||
|
pair_coeff I J a_IJ Gamma is_charged
|
||||||
|
|
||||||
|
* T = temperature (temperature units) (dpd only)
|
||||||
|
* cutoff_DPD = global cutoff for DPD interactions (distance units)
|
||||||
|
* seed = random # seed (positive integer)
|
||||||
|
* lambda = decay length of the charge (distance units)
|
||||||
|
* cutoff_coul = real part cutoff for Coulombic interactions (distance units)
|
||||||
|
* I,J = numeric atom types, or type labels
|
||||||
|
* Gamma = DPD Gamma coefficient
|
||||||
|
* is_charged (boolean) set to yes if I and J are charged beads
|
||||||
|
|
||||||
|
Examples
|
||||||
|
""""""""
|
||||||
|
|
||||||
|
.. code-block:: LAMMPS
|
||||||
|
|
||||||
|
pair_style dpd/coul/slater/long 1.0 2.5 34387 0.25 3.0
|
||||||
|
pair_coeff 1 1 78.0 4.5 # not charged by default
|
||||||
|
pair_coeff 2 2 78.0 4.5 yes
|
||||||
|
|
||||||
|
|
||||||
|
Description
|
||||||
|
"""""""""""
|
||||||
|
|
||||||
|
Style *dpd/coul/slater/long* computes a force field for dissipative particle dynamics
|
||||||
|
(DPD) following the exposition in :ref:`(Groot) <Groot5>` with the addition of
|
||||||
|
electrostatic interactions. The coulombic forces in mesoscopic models
|
||||||
|
employ potentials without explicit excluded-volume interactions.
|
||||||
|
The goal is to prevent artificial ionic pair formation by including a charge
|
||||||
|
distribution in the Coulomb potential, following the formulation of
|
||||||
|
:ref:`(Melchor) <Melchor>`:
|
||||||
|
|
||||||
|
The force on bead I due to bead J is given as a sum
|
||||||
|
of 4 terms
|
||||||
|
|
||||||
|
.. math::
|
||||||
|
|
||||||
|
\vec{f} = & (F^C + F^D + F^R + F^E) \hat{r_{ij}} \\
|
||||||
|
F^C = & A w(r) \qquad \qquad \qquad \qquad \qquad r < r_c \\
|
||||||
|
F^D = & - \gamma w^2(r) (\hat{r_{ij}} \bullet \vec{v}_{ij}) \qquad \qquad r < r_c \\
|
||||||
|
F^R = & \sigma w(r) \alpha (\Delta t)^{-1/2} \qquad \qquad \qquad r < r_c \\
|
||||||
|
w(r) = & 1 - \frac{r}{r_c} \\
|
||||||
|
F^E = & \frac{Cq_iq_j}{\epsilon r^2} \left( 1- exp\left( \frac{2r_{ij}}{\lambda} \right) \left( 1 + \frac{2r_{ij}}{\lambda} \left( 1 + \frac{r_{ij}}{\lambda} \right)\right) \right)
|
||||||
|
|
||||||
|
where :math:`F^C` is a conservative force, :math:`F^D` is a dissipative
|
||||||
|
force, :math:`F^R` is a random force, and :math:`F^E` is an electrostatic force.
|
||||||
|
:math:`\hat{r_{ij}}` is a unit vector in the direction
|
||||||
|
:math:`r_i - r_j`, :math:`\vec{v}_{ij}` is
|
||||||
|
the vector difference in velocities of the two atoms :math:`\vec{v}_i -
|
||||||
|
\vec{v}_j`, :math:`\alpha` is a Gaussian random number with zero mean
|
||||||
|
and unit variance, *dt* is the timestep size, and :math:`w(r)` is a
|
||||||
|
weighting factor that varies between 0 and 1. :math:`r_c` is the
|
||||||
|
pairwise cutoff. :math:`\sigma` is set equal to :math:`\sqrt{2 k_B T
|
||||||
|
\gamma}`, where :math:`k_B` is the Boltzmann constant and *T* is the
|
||||||
|
temperature parameter in the pair_style command.
|
||||||
|
C is the same Coulomb conversion factor as in the pair_styles
|
||||||
|
coul/cut and coul/long. In this way the Coulomb
|
||||||
|
interaction between ions is corrected at small distances r, and
|
||||||
|
the long-range interactions are computed either by the Ewald or the PPPM technique.
|
||||||
|
|
||||||
|
|
||||||
|
The following parameters must be defined for each
|
||||||
|
pair of atoms types via the :doc:`pair_coeff <pair_coeff>` command as in
|
||||||
|
the examples above, or in the data file or restart files read by the
|
||||||
|
:doc:`read_data <read_data>` or :doc:`read_restart <read_restart>`
|
||||||
|
commands:
|
||||||
|
|
||||||
|
* A (force units)
|
||||||
|
* :math:`\gamma` (force/velocity units)
|
||||||
|
* is_charged (boolean)
|
||||||
|
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
This style is the combination of :doc:`pair_style dpd <pair_dpd>` and :doc:`pair_style coul/slater/long <pair_coul_slater>`.
|
||||||
|
|
||||||
|
----------
|
||||||
|
|
||||||
|
.. include:: accel_styles.rst
|
||||||
|
|
||||||
|
----------
|
||||||
|
|
||||||
|
Mixing, shift, table, tail correction, restart, rRESPA info
|
||||||
|
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||||
|
|
||||||
|
This pair style does not support mixing. Thus, coefficients for all
|
||||||
|
I,J pairs must be specified explicitly.
|
||||||
|
|
||||||
|
This pair style does not support the :doc:`pair_modify <pair_modify>`
|
||||||
|
shift option for the energy of the pair interaction.
|
||||||
|
|
||||||
|
The :doc:`pair_modify <pair_modify>` table option is not relevant
|
||||||
|
for this pair style.
|
||||||
|
|
||||||
|
This pair style does not support the :doc:`pair_modify <pair_modify>`
|
||||||
|
tail option for adding long-range tail corrections to energy and
|
||||||
|
pressure.
|
||||||
|
|
||||||
|
This pair style writes its information to :doc:`binary restart files
|
||||||
|
<restart>`, so pair_style and pair_coeff commands do not need to be
|
||||||
|
specified in an input script that reads a restart file. Note that the
|
||||||
|
user-specified random number seed is stored in the restart file, so when
|
||||||
|
a simulation is restarted, each processor will re-initialize its random
|
||||||
|
number generator the same way it did initially. This means the random
|
||||||
|
forces will be random, but will not be the same as they would have been
|
||||||
|
if the original simulation had continued past the restart time.
|
||||||
|
|
||||||
|
This pair style can only be used via the *pair* keyword of the
|
||||||
|
:doc:`run_style respa <run_style>` command. They do not support the
|
||||||
|
*inner*, *middle*, *outer* keywords.
|
||||||
|
|
||||||
|
|
||||||
|
----------
|
||||||
|
|
||||||
|
Restrictions
|
||||||
|
""""""""""""
|
||||||
|
|
||||||
|
This style is part of the DPD-BASIC package. It is only enabled if
|
||||||
|
LAMMPS was built with that package. See the :doc:`Build package
|
||||||
|
<Build_package>` page for more info.
|
||||||
|
|
||||||
|
The default frequency for rebuilding neighbor lists is every 10 steps
|
||||||
|
(see the :doc:`neigh_modify <neigh_modify>` command). This may be too
|
||||||
|
infrequent since particles move rapidly and
|
||||||
|
can overlap by large amounts. If this setting yields a non-zero number
|
||||||
|
of "dangerous" reneighborings (printed at the end of a simulation), you
|
||||||
|
should experiment with forcing reneighboring more often and see if
|
||||||
|
system energies/trajectories change.
|
||||||
|
|
||||||
|
This pair style requires you to use the :doc:`comm_modify vel yes
|
||||||
|
<comm_modify>` command so that velocities are stored by ghost atoms.
|
||||||
|
|
||||||
|
This pair style also requires the long-range solvers included in the KSPACE package.
|
||||||
|
|
||||||
|
|
||||||
|
This pair style will not restart exactly when using the
|
||||||
|
:doc:`read_restart <read_restart>` command, though they should provide
|
||||||
|
statistically similar results. This is because the forces they compute
|
||||||
|
depend on atom velocities. See the :doc:`read_restart <read_restart>`
|
||||||
|
command for more details.
|
||||||
|
|
||||||
|
Related commands
|
||||||
|
""""""""""""""""
|
||||||
|
|
||||||
|
:doc:`pair_style dpd <pair_dpd>`, :doc:`pair_style coul/slater/long <pair_coul_slater>`,
|
||||||
|
:doc:`pair_coeff <pair_coeff>`, :doc:`fix nvt <fix_nh>`, :doc:`fix langevin <fix_langevin>`,
|
||||||
|
:doc:`pair_style srp <pair_srp>`, :doc:`fix mvv/dpd <fix_mvv_dpd>`.
|
||||||
|
|
||||||
|
Default
|
||||||
|
"""""""
|
||||||
|
|
||||||
|
is_charged = no
|
||||||
|
|
||||||
|
----------
|
||||||
|
|
||||||
|
.. _Groot5:
|
||||||
|
|
||||||
|
**(Groot)** Groot and Warren, J Chem Phys, 107, 4423-35 (1997).
|
||||||
|
|
||||||
|
.. _Melchor:
|
||||||
|
|
||||||
|
**(Melchor)** Gonzalez-Melchor, Mayoral, Velazquez, and Alejandre, J Chem Phys, 125, 224107 (2006).
|
||||||
@ -172,6 +172,7 @@ accelerated styles exist.
|
|||||||
* :doc:`coul/wolf <pair_coul>` - Coulomb via Wolf potential
|
* :doc:`coul/wolf <pair_coul>` - Coulomb via Wolf potential
|
||||||
* :doc:`coul/wolf/cs <pair_cs>` - Coulomb via Wolf potential with core/shell adjustments
|
* :doc:`coul/wolf/cs <pair_cs>` - Coulomb via Wolf potential with core/shell adjustments
|
||||||
* :doc:`dpd <pair_dpd>` - dissipative particle dynamics (DPD)
|
* :doc:`dpd <pair_dpd>` - dissipative particle dynamics (DPD)
|
||||||
|
* :doc:`dpd/coul/slater/long <pair_dpd_coul_slater_long>` - dissipative particle dynamics (DPD) with electrostatic interactions
|
||||||
* :doc:`dpd/ext <pair_dpd_ext>` - generalized force field for DPD
|
* :doc:`dpd/ext <pair_dpd_ext>` - generalized force field for DPD
|
||||||
* :doc:`dpd/ext/tstat <pair_dpd_ext>` - pairwise DPD thermostatting with generalized force field
|
* :doc:`dpd/ext/tstat <pair_dpd_ext>` - pairwise DPD thermostatting with generalized force field
|
||||||
* :doc:`dpd/fdt <pair_dpd_fdt>` - DPD for constant temperature and pressure
|
* :doc:`dpd/fdt <pair_dpd_fdt>` - DPD for constant temperature and pressure
|
||||||
|
|||||||
@ -14,3 +14,5 @@ pair styles from the DPD-BASIC package.
|
|||||||
4) 'dpdext_tstat' - coarse-grained SPC/E water example for 'dpd/ext/tstat' pair style
|
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
|
(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.
|
(cg_spce_table.pot) obtained by bottom-up coarse-graining of the atomistic SPC/E water.
|
||||||
|
|
||||||
|
5) 'dpd_coul_slater_long' - simple example (DPD ionic fluid) for 'dpd/coul/slater/long' pair style (in.dpd_coul_slater_long).
|
||||||
|
|||||||
@ -0,0 +1,779 @@
|
|||||||
|
LAMMPS data file via write_data, version 17 Apr 2024, timestep = 1394, units = lj
|
||||||
|
|
||||||
|
375 atoms
|
||||||
|
3 atom types
|
||||||
|
|
||||||
|
0 5 xlo xhi
|
||||||
|
0 5 ylo yhi
|
||||||
|
0 5 zlo zhi
|
||||||
|
|
||||||
|
Masses
|
||||||
|
|
||||||
|
1 1
|
||||||
|
2 1
|
||||||
|
3 1
|
||||||
|
|
||||||
|
PairIJ Coeffs # dpd/coul/slater/long
|
||||||
|
|
||||||
|
1 1 78 4.5 yes 1
|
||||||
|
1 2 78 4.5 yes 1
|
||||||
|
1 3 78 4.5 yes 1
|
||||||
|
2 2 78 4.5 no 1
|
||||||
|
2 3 78 4.5 no 1
|
||||||
|
3 3 78 4.5 no 1
|
||||||
|
|
||||||
|
Atoms # full
|
||||||
|
|
||||||
|
189 0 1 0 0.8621554018960034 1.5213257556560191 0.4064444607843129 0 1 0
|
||||||
|
107 0 1 0 2.040249318291146 0.3862591116608294 1.8661957131854634 0 0 0
|
||||||
|
253 0 1 0 3.511834308089607 0.7338273870464224 0.801173549802059 0 1 1
|
||||||
|
163 0 1 0 2.303289649738226 0.6809493239075631 0.7383435796468727 0 1 0
|
||||||
|
26 0 1 0 0.03534770106704549 1.4889933012536283 1.4815498922617432 0 0 0
|
||||||
|
27 0 1 0 4.170525658289272 1.8438490221677797 2.1918634082517614 -1 0 0
|
||||||
|
56 0 1 0 2.9501314702448633 2.322938987390429 0.6158870411938201 0 0 0
|
||||||
|
167 0 1 0 1.948558457807243 0.1261294591496785 0.039492485708843984 0 1 0
|
||||||
|
364 0 3 -1 4.538825953029656 0.2655458359259118 2.131668601530241 0 1 0
|
||||||
|
61 0 1 0 4.645784299395809 0.3574274125207269 1.7056474795918568 -1 0 0
|
||||||
|
222 0 1 0 4.41481966340897 2.262979887349817 1.1679075968940398 0 0 0
|
||||||
|
332 0 2 1 3.853874714249102 0.1758912358513287 0.8799773810713412 0 1 0
|
||||||
|
1 0 1 0 4.608301143657016 1.4090100132224024 1.218887039455649 -1 0 0
|
||||||
|
319 0 2 1 3.732213186171727 0.981827023519373 2.3857377768158727 -1 0 0
|
||||||
|
53 0 1 0 2.380311878254328 0.953677113042391 1.8268738776443192 0 0 0
|
||||||
|
68 0 1 0 0.33279009298924916 1.0106375746131884 0.7038515854567269 0 0 0
|
||||||
|
220 0 1 0 1.1094848303775686 2.378414106514282 1.4793246435196352 1 0 0
|
||||||
|
44 0 1 0 0.12449238274832848 1.7475396894040345 0.5495194876290164 0 0 0
|
||||||
|
55 0 1 0 0.1451415441609303 2.337329820574407 0.940744164662616 0 0 0
|
||||||
|
362 0 3 -1 1.2987762452744613 1.8352325797868587 1.1809674941775483 0 0 0
|
||||||
|
165 0 1 0 0.6610209400465688 2.22554349560855 1.971912177574677 0 0 0
|
||||||
|
60 0 1 0 1.8643313870571518 0.6352678895179578 1.4416996493100478 0 0 0
|
||||||
|
202 0 1 0 0.007896731087640774 1.5385720917803027 0.18965671583085075 0 1 0
|
||||||
|
85 0 1 0 1.5630176980330266 1.1482985441214197 2.019916217302335 1 0 0
|
||||||
|
73 0 1 0 0.5556133646182337 1.6170466333456652 2.101792903006452 0 0 0
|
||||||
|
96 0 1 0 1.6611967219346682 0.07688637034882238 0.46572063062814617 0 0 1
|
||||||
|
30 0 1 0 0.46644353751713447 1.8254820637852556 1.2380479793915407 1 0 0
|
||||||
|
67 0 1 0 3.4270812515248483 2.350996339385886 1.77527952461483 0 0 0
|
||||||
|
349 0 3 -1 1.7935506583370944 1.7235931740659332 0.4478371869612185 1 0 0
|
||||||
|
132 0 1 0 4.951074988035153 1.5039089286454406 2.4219801232797398 -1 0 0
|
||||||
|
328 0 2 1 0.8958492991096989 1.2809413147557527 1.0440931858570435 0 0 1
|
||||||
|
161 0 1 0 4.798276598985588 0.9882558902185279 2.462987088497934 0 1 0
|
||||||
|
185 0 1 0 0.6126520391294695 0.04940161418784647 0.6135262263024062 0 1 0
|
||||||
|
219 0 1 0 1.647872968759676 2.305100092833184 2.0217182617222096 0 0 0
|
||||||
|
8 0 1 0 2.8077478718165207 0.7661158156519451 1.3602857540877684 0 0 0
|
||||||
|
69 0 1 0 2.8568644931819835 0.13340029053585767 2.106212637519767 0 0 0
|
||||||
|
3 0 1 0 1.908450187819087 2.298808713848062 0.4221817812562634 0 0 0
|
||||||
|
7 0 1 0 1.8799145446976495 0.9814789886011673 0.955308672406064 0 0 0
|
||||||
|
329 0 2 1 0.9727877144189607 0.8906662949552561 1.4472553696387669 0 1 0
|
||||||
|
174 0 1 0 3.9905681672951636 0.6401683928312465 1.0284041192891435 -1 1 0
|
||||||
|
20 0 1 0 3.392515194191721 2.0774851454870427 0.8812446323305514 0 0 0
|
||||||
|
57 0 1 0 4.874212056539195 0.13899230379169403 0.7199140773346149 0 0 0
|
||||||
|
325 0 2 1 1.362093021934204 2.3422237404192465 0.6655225660551776 0 0 1
|
||||||
|
40 0 1 0 4.306473534903154 1.7047871476017826 0.8560715024613603 0 0 0
|
||||||
|
51 0 1 0 2.297377802384159 0.11499650506694176 1.4731005354419167 0 0 0
|
||||||
|
54 0 1 0 2.971300335884777 1.8792385205105047 1.3973014092900102 0 0 0
|
||||||
|
186 0 1 0 3.583414064904102 1.7542346893771112 0.35130247738019466 0 0 0
|
||||||
|
289 0 1 0 2.5651653875350906 1.4858962835620086 0.6587351599193196 0 0 1
|
||||||
|
75 0 1 0 3.132107705055228 0.19794042232605677 0.44488993973642094 0 0 1
|
||||||
|
48 0 1 0 3.4384178020381717 0.7217742755424055 1.7304812232062636 0 0 0
|
||||||
|
66 0 1 0 3.191389133037332 1.1674191637093172 1.7413707516914332 0 0 0
|
||||||
|
52 0 1 0 1.856006413772654 1.871405713016935 1.5164995404363106 0 0 0
|
||||||
|
158 0 1 0 3.725559226243618 1.2320067990055215 0.4240371305587515 -1 1 0
|
||||||
|
330 0 2 1 0.4226192821951129 0.22648053650193767 0.04025715930862768 1 1 0
|
||||||
|
359 0 3 -1 4.4476116877707925 0.8271711042623823 1.1688054720798116 0 1 0
|
||||||
|
366 0 3 -1 0.13989896192253948 0.6502137062351493 0.845841913773404 1 1 0
|
||||||
|
196 0 1 0 0.21878194805964699 2.4139077401885523 1.602735237996178 1 0 0
|
||||||
|
128 0 1 0 2.474112780481313 1.5036993910540244 1.234391076605564 0 0 1
|
||||||
|
118 0 1 0 0.1703454662324439 0.9401878407982331 0.17224714060344348 0 0 1
|
||||||
|
43 0 1 0 3.708324777814944 2.4767443359210524 0.5791362456922102 0 0 0
|
||||||
|
184 0 1 0 0.4061592126934206 0.22209165285150972 1.3598048859115588 0 1 0
|
||||||
|
360 0 3 -1 1.225690366400486 0.4472136514952278 1.0864811555493794 0 1 0
|
||||||
|
64 0 1 0 2.6116937036965266 1.793563094424563 2.091822223631947 0 0 0
|
||||||
|
285 0 1 0 0.7747031518566616 0.24118573693540882 2.1434463705260494 0 1 0
|
||||||
|
58 0 1 0 1.598997109049339 1.2355543729347458 1.1437352681100093 0 0 0
|
||||||
|
257 0 1 0 0.02882436640692898 0.8179392413775496 1.6880006059524528 1 1 0
|
||||||
|
356 0 3 -1 2.0441963785801733 1.236982129976697 2.2147135788798726 0 0 0
|
||||||
|
100 0 1 0 3.653446945164378 0.3462603812889145 1.6428480228892703 0 0 0
|
||||||
|
121 0 1 0 3.3427026587713 1.3818800793465942 1.0715223415915789 0 0 1
|
||||||
|
130 0 1 0 3.3647959804349648 1.6468424783155522 2.142743574286686 0 0 1
|
||||||
|
238 0 1 0 1.3459228411155364 0.633596613028775 2.1301210835283637 0 1 0
|
||||||
|
211 0 1 0 0.6615598402766512 2.33271179551025 0.47581804017205676 1 0 0
|
||||||
|
208 0 1 0 2.962020456626749 0.2159270527386094 1.30534135402314 0 1 0
|
||||||
|
63 0 1 0 1.3612122125160733 0.010635376740000254 1.5982897032081793 0 0 0
|
||||||
|
22 0 1 0 4.210300352056279 0.36529901441609736 0.22595511161653342 0 0 0
|
||||||
|
355 0 3 -1 1.2042503283777344 1.597276477439138 1.9589099368399292 0 0 0
|
||||||
|
70 0 1 0 4.378695647703822 2.2211752925991073 0.5054248018357668 0 0 0
|
||||||
|
65 0 1 0 4.730200694542147 1.8860651406962996 1.9541188923646609 0 0 0
|
||||||
|
182 0 1 0 0.6006579892093956 1.0766698682185656 1.8982320873119558 0 1 0
|
||||||
|
188 0 1 0 3.968278800401347 2.2778420975676017 1.5855956915283134 -1 0 0
|
||||||
|
35 0 1 0 2.223480574739111 2.044750380955685 1.1501174861326973 0 0 0
|
||||||
|
6 0 1 0 4.393818207857278 0.9691596735067866 0.4973738964333318 0 0 0
|
||||||
|
346 0 3 -1 1.799292171051204 0.9378491451956622 0.32819450450408366 0 0 0
|
||||||
|
14 0 1 0 4.116276227278533 0.9144868046413738 1.9001996318293624 0 0 0
|
||||||
|
15 0 1 0 4.057083687324151 1.5512296337030849 1.8388944544921122 0 0 0
|
||||||
|
16 0 1 0 3.82411370026405 1.5506478336832812 1.2725337401183239 0 0 0
|
||||||
|
287 0 1 0 2.6387027215894454 1.893079917045916 0.49300315071401646 0 0 1
|
||||||
|
81 0 1 0 0.23374890251430025 0.34479122000015083 2.377074044522331 1 0 0
|
||||||
|
114 0 1 0 2.97788308248854 0.8029642133737654 0.43679357743492564 0 0 1
|
||||||
|
232 0 1 0 1.1637120121074183 0.7914170906883582 0.5169414304881136 1 1 1
|
||||||
|
50 0 1 0 1.3582030484899448 1.733969902734067 2.475757370252963 0 0 -1
|
||||||
|
79 0 1 0 4.002398001699839 2.453310546669259 2.3569732163529196 0 0 0
|
||||||
|
74 0 1 0 2.5693171940612936 0.3236751012125613 0.052755933881527994 0 0 1
|
||||||
|
194 0 1 0 2.8970695996535842 1.3203227830648074 2.4866087995688972 0 0 0
|
||||||
|
133 0 1 0 2.6178632265286743 1.0115830273791913 0.19081692003348572 0 0 1
|
||||||
|
311 0 1 0 3.3683313684704523 1.1471203834722834 0.04523595785096113 0 1 1
|
||||||
|
115 0 1 0 0.43505007353257874 2.385803272207332 0.02841287624716582 0 0 1
|
||||||
|
4 0 1 0 4.3073950086925725 2.400627067573385 4.56127636601268 -1 0 -1
|
||||||
|
151 0 1 0 0.6919123879927325 2.1849820555988084 3.5078472275384267 0 0 0
|
||||||
|
306 0 1 0 0.5589151617318056 0.058029533314856774 4.427085995859885 0 1 0
|
||||||
|
138 0 1 0 1.7147207261520883 1.4323880737092538 3.757478681577442 0 0 0
|
||||||
|
110 0 1 0 1.3876397037618702 1.3714565550984217 4.5219172301432895 0 0 0
|
||||||
|
251 0 1 0 2.788428291071368 2.3409448558940977 3.4381375025566263 0 0 0
|
||||||
|
331 0 2 1 2.838525921735314 0.09442598845901452 3.3146265769160324 0 1 0
|
||||||
|
243 0 1 0 4.489290143790526 2.26853729359999 3.7839844553823094 0 0 0
|
||||||
|
156 0 1 0 0.23302160032454478 1.3603287603692662 4.342729568698205 1 1 -1
|
||||||
|
32 0 1 0 2.081389395149717 0.4938421510915584 2.707994013583073 0 0 0
|
||||||
|
205 0 1 0 0.09940021857353744 2.408012210772126 3.2074615425616426 0 0 0
|
||||||
|
41 0 1 0 4.323708181823033 0.4958928465474822 2.525689303250374 0 0 0
|
||||||
|
28 0 1 0 4.717322170568759 1.0215969335342936 3.32138298357052 -1 0 -1
|
||||||
|
322 0 2 1 2.2029274368349303 2.0230576314539634 3.254975041225457 0 0 0
|
||||||
|
103 0 1 0 3.4039994449255992 0.5284405133705601 4.809880920488395 0 0 0
|
||||||
|
353 0 3 -1 1.1636351711418296 1.6849823280188108 3.628904996363181 0 0 0
|
||||||
|
295 0 1 0 2.015582444660267 2.152457218882018 4.802270482662931 0 0 0
|
||||||
|
365 0 3 -1 0.1355221924615853 0.6843479265638512 3.832358314244189 0 0 0
|
||||||
|
98 0 1 0 2.5146420394624114 1.4050031824562241 2.965312255745623 0 0 0
|
||||||
|
33 0 1 0 2.3626541269063335 0.301607887792709 4.126675184172655 0 0 0
|
||||||
|
39 0 1 0 1.0864796756700101 0.14884263883618853 3.538403788545902 0 0 -1
|
||||||
|
343 0 2 1 1.4514575528852092 0.7274022675751877 4.022000140293159 0 1 0
|
||||||
|
259 0 1 0 3.655779855306037 1.3576945405765304 3.834017837247726 0 0 0
|
||||||
|
77 0 1 0 0.8784812240014032 1.3079405939838267 3.865082861143354 1 0 0
|
||||||
|
140 0 1 0 0.8162940643502995 1.1305386542609035 4.8092097458556715 0 0 0
|
||||||
|
111 0 1 0 4.795245146003238 1.9956723305718642 3.9129401250192046 0 0 0
|
||||||
|
129 0 1 0 0.34843108982968385 0.5298485948666217 2.8292148084141364 0 0 0
|
||||||
|
317 0 2 1 4.124560425539725 0.9992026808502931 4.821938521772994 0 0 -1
|
||||||
|
25 0 1 0 2.8922318837378698 0.9335539802277806 4.287158919025898 -1 0 -1
|
||||||
|
21 0 1 0 4.585171090824654 1.3705322366558885 4.19496485298651 0 0 -1
|
||||||
|
276 0 1 0 2.403137350597824 1.5009012449757657 3.808385508050605 0 0 0
|
||||||
|
160 0 1 0 2.937633869764959 0.00248285164262807 4.155863012635541 0 1 -1
|
||||||
|
308 0 1 0 2.007117640798801 0.07533937286437335 3.949461187876648 0 1 0
|
||||||
|
313 0 1 0 3.138628385914381 0.06932121228333508 4.61254641181726 0 1 0
|
||||||
|
71 0 1 0 0.7604830442534299 1.8783527414570997 4.529066129071014 0 0 -1
|
||||||
|
42 0 1 0 0.8786351691021071 1.5220089570408293 2.909825736835378 0 0 0
|
||||||
|
83 0 1 0 2.268823589694475 0.8105925806076607 3.3728322715236114 0 0 0
|
||||||
|
123 0 1 0 1.7884920869805707 1.339956019375266 2.861286357841185 0 0 0
|
||||||
|
29 0 1 0 4.460413120634612 1.661186434187469 2.731131826280074 0 0 0
|
||||||
|
291 0 1 0 0.0035749317593865015 0.21166749654426853 3.275077495308186 1 1 0
|
||||||
|
299 0 1 0 0.6601895850752213 0.7060682406274252 3.722602054061811 0 1 0
|
||||||
|
87 0 1 0 3.635932620062484 1.4708618427874118 4.477899978536171 0 0 0
|
||||||
|
78 0 1 0 1.5540100281849198 2.289959113070306 3.8245622090496108 0 0 0
|
||||||
|
5 0 1 0 2.937548438619819 2.211877405174181 2.85571535820357 0 0 0
|
||||||
|
95 0 1 0 3.105981604150784 2.188298914603185 4.094702761761116 0 0 0
|
||||||
|
352 0 3 -1 0.11773003147587424 1.9458234584845089 4.811739126011424 0 0 0
|
||||||
|
281 0 1 0 1.1502488869841234 0.20873030537461357 4.295523149721441 1 1 0
|
||||||
|
206 0 1 0 3.330001486381421 1.53529174323865 3.1417824971878447 0 0 0
|
||||||
|
241 0 1 0 3.878317992103332 2.023909280872213 4.783549131197242 0 0 0
|
||||||
|
109 0 1 0 2.580544454574246 2.2025316047831676 4.264813345165653 0 0 0
|
||||||
|
126 0 1 0 2.6463397268489866 0.7745950386723881 3.699331340328284 0 0 0
|
||||||
|
62 0 1 0 0.10088965537315422 1.464964032622401 3.4200098453857786 0 0 -1
|
||||||
|
145 0 1 0 4.7108240170803874 2.1614660538205466 3.070399886653731 -1 0 0
|
||||||
|
354 0 3 -1 1.610893620580725 0.7512309895438358 3.571881076052697 0 0 0
|
||||||
|
248 0 1 0 2.3260578668858516 2.409053529199307 3.878500098271755 0 0 0
|
||||||
|
278 0 1 0 1.0565916295142963 0.21636101668521504 2.9280061580151355 1 1 0
|
||||||
|
334 0 2 1 3.3217760513533556 0.20221074730138347 3.857259461716569 0 0 0
|
||||||
|
344 0 2 1 2.145759202198284 0.8646312386735645 4.34482845102358 0 0 0
|
||||||
|
84 0 1 0 3.310133712882211 0.8325063678401754 3.1928917336760043 0 0 0
|
||||||
|
135 0 1 0 0.5746060669769325 0.007152134736939431 3.7081262585514363 1 0 0
|
||||||
|
124 0 1 0 1.5924837125088054 2.3295502621690507 3.1555629363203055 0 0 0
|
||||||
|
301 0 1 0 1.3559071869586012 2.104676990793624 4.2855408539569995 0 0 0
|
||||||
|
221 0 1 0 4.025760501970453 0.12181323773082332 4.427152392469986 0 1 -1
|
||||||
|
149 0 1 0 1.288517578213514 1.1078634671167045 3.0983488547366833 -1 1 -1
|
||||||
|
235 0 1 0 3.722079255584157 0.731147796276342 4.106075812812072 0 1 0
|
||||||
|
268 0 1 0 4.725777687386199 0.0696714424235374 3.965580233489741 -1 1 0
|
||||||
|
229 0 1 0 4.9205143154909035 0.5378937212478773 4.686090920391123 0 1 -1
|
||||||
|
144 0 1 0 4.391887063016131 1.3427912572926557 3.770425380327373 0 0 0
|
||||||
|
142 0 1 0 1.8346060623646443 0.7517320991384026 4.677813188511546 0 0 0
|
||||||
|
119 0 1 0 3.2188591291035764 1.8480317120563596 4.70754013191232 0 0 0
|
||||||
|
218 0 1 0 4.590989187547614 0.7832518807186819 4.248448878177557 -1 1 -1
|
||||||
|
269 0 1 0 3.83528197952535 2.2671443874151396 3.9458234070905074 0 0 0
|
||||||
|
171 0 1 0 1.1367690782529518 0.30653599490724565 4.981237832751898 0 1 -1
|
||||||
|
347 0 3 -1 2.730105013349213 1.5732651978450825 4.737616332834529 0 0 -1
|
||||||
|
117 0 1 0 2.893231454879688 1.6327429583278301 3.809375824669355 0 0 0
|
||||||
|
244 0 1 0 1.903054222598179 1.4266071609686257 4.248317450667845 1 0 0
|
||||||
|
46 0 1 0 0.6110511992687845 0.9392825733011035 4.4718586456826115 1 0 -1
|
||||||
|
97 0 1 0 3.9786678543088594 1.7659872954929934 3.352752402727882 0 0 0
|
||||||
|
155 0 1 0 3.5064237015545134 2.2748461716495725 3.3907408576276095 0 0 0
|
||||||
|
190 0 1 0 3.6257913177213887 1.8596172005909988 2.624582193387495 0 0 0
|
||||||
|
141 0 1 0 4.133819851057611 1.125460792510254 2.8214638820568316 0 0 0
|
||||||
|
261 0 1 0 0.48116423022710325 1.98166727716818 4.003063462271802 1 1 0
|
||||||
|
92 0 1 0 3.749162681150054 0.5480152103582329 3.44882074629632 0 0 0
|
||||||
|
327 0 2 1 4.261412399401647 0.5826170932678485 3.573292268629846 0 0 0
|
||||||
|
337 0 2 1 1.6827282642347854 0.2789473832751784 2.9589468652224666 0 1 0
|
||||||
|
45 0 1 0 0.31403607701825803 1.3800214560597042 2.9837533879244087 1 0 0
|
||||||
|
200 0 1 0 1.995256276504289 1.4516800278315318 4.898899074068972 0 1 -1
|
||||||
|
19 0 1 0 1.2925196386926214 2.321053353209675 4.936516373289165 0 0 -1
|
||||||
|
137 0 1 0 0.8617630289962365 2.28834525235633 2.787630960107895 0 0 0
|
||||||
|
127 0 1 0 0.19137038400231676 2.1505994041298755 2.5584316139464898 1 0 0
|
||||||
|
9 0 1 0 4.475150825165361 1.5978909296640629 4.832730899627523 -1 0 -1
|
||||||
|
122 0 1 0 0.6525439970988997 0.9547926616198447 2.731781719219051 0 0 1
|
||||||
|
213 0 1 0 4.260400034205448 0.19910770741166325 2.9310219053551076 0 1 0
|
||||||
|
136 0 1 0 2.2005511013729873 1.8455801462092951 2.556685426816697 0 0 0
|
||||||
|
37 0 1 0 3.4251867503322573 0.6527991402153643 2.527078438582748 0 0 0
|
||||||
|
34 0 1 0 2.9175944797670583 0.13654347040781536 2.8820983415866803 0 0 0
|
||||||
|
217 0 1 0 2.6954995241935262 0.7710325900782893 2.5236360609937285 0 0 0
|
||||||
|
250 0 1 0 3.6726666633431457 4.6018232175750455 1.320473043522378 0 0 1
|
||||||
|
166 0 1 0 4.7009740947187035 3.7966019637038317 2.3031579729427096 0 0 0
|
||||||
|
150 0 1 0 0.04748930775599636 4.455597613980116 1.8427292493854273 0 0 0
|
||||||
|
368 0 3 -1 2.4584991330272654 3.7591217299647854 0.426379021376866 0 0 1
|
||||||
|
339 0 2 1 4.156459282343587 3.061985537069849 1.9932515879322967 0 0 0
|
||||||
|
340 0 2 1 1.9850368150824245 4.230758829154677 0.5294221302127794 0 0 1
|
||||||
|
338 0 2 1 0.9865267877252728 4.5330122869142055 1.0314881718061573 0 0 0
|
||||||
|
201 0 1 0 3.4754534022764494 3.0217470705506297 1.6935508350107573 0 0 0
|
||||||
|
101 0 1 0 2.4842203411723074 4.89685402639858 2.0242798213421707 0 -1 0
|
||||||
|
209 0 1 0 0.013989467358051372 4.330201393745349 0.7846247571577325 0 0 0
|
||||||
|
168 0 1 0 3.6350006680732463 4.754122434939927 0.3223377232438807 0 0 0
|
||||||
|
216 0 1 0 2.9114246475391328 3.433945937453107 1.8710068661397548 0 0 0
|
||||||
|
203 0 1 0 1.3574269717949698 4.456732218277533 1.5387489126454328 0 0 0
|
||||||
|
179 0 1 0 0.522179118267259 2.8689808625572804 0.9077030710981577 0 0 0
|
||||||
|
181 0 1 0 3.6672727729190364 3.878549463830204 1.3381224951621222 0 0 0
|
||||||
|
236 0 1 0 4.185529129045369 4.161219716693221 2.3595808103262947 0 0 0
|
||||||
|
18 0 1 0 1.9980056628841183 4.320068243150856 1.6822915445402666 0 -1 0
|
||||||
|
363 0 3 -1 2.235554720706489 2.906908244875693 1.036143254738836 0 0 0
|
||||||
|
198 0 1 0 0.5887731317025171 3.6812050133593415 0.29825916210104214 1 0 0
|
||||||
|
146 0 1 0 4.960647912886466 3.5092208739797943 1.7004652621516252 0 -1 0
|
||||||
|
284 0 1 0 0.7836145638659848 4.548012471030345 0.34455457204719553 0 0 1
|
||||||
|
207 0 1 0 0.7814740880134713 3.3714021164537535 1.118310228903454 0 0 0
|
||||||
|
183 0 1 0 1.7161486342210968 3.5481236466130888 1.4041933001601494 0 0 0
|
||||||
|
90 0 1 0 3.016201247291213 2.9587290353837226 0.5684151813116627 0 0 1
|
||||||
|
159 0 1 0 2.232365423522552 2.6465053064946784 0.3759996466051841 0 0 0
|
||||||
|
274 0 1 0 0.5881709093591322 4.080889794199071 2.280264861574092 0 0 0
|
||||||
|
303 0 1 0 3.246061664307446 4.37314477200102 0.7856213092562913 0 0 1
|
||||||
|
315 0 1 0 0.35327667038742755 3.029146608728807 0.0791450986650732 0 0 1
|
||||||
|
11 0 1 0 1.8285612986193809 3.353968071719668 0.5643737651851671 0 0 0
|
||||||
|
176 0 1 0 0.2508944492255997 3.000972330471306 2.0071913487423076 0 0 0
|
||||||
|
304 0 1 0 3.0726902044877265 4.647914126011872 0.9996827940171641 0 0 1
|
||||||
|
143 0 1 0 3.9352261868949907 3.898490778762382 0.7840306203684324 -1 0 1
|
||||||
|
275 0 1 0 3.0573248045448427 3.8840876505181687 1.5573196095677335 0 0 0
|
||||||
|
242 0 1 0 0.4226727582609528 4.737822957131883 1.387223661593226 1 0 0
|
||||||
|
169 0 1 0 0.620846920150785 3.1839828246731394 2.426601824718326 0 0 0
|
||||||
|
86 0 1 0 1.5665987066447504 4.978509835006031 2.1415023910919806 0 -1 0
|
||||||
|
333 0 2 1 2.445920926535492 4.47766917410732 1.1358754296155358 0 0 0
|
||||||
|
294 0 1 0 1.1981531521673625 2.8049885346916006 2.111987077826676 1 0 0
|
||||||
|
310 0 1 0 1.9298476539189637 4.937913932158907 1.030730042471827 0 0 1
|
||||||
|
192 0 1 0 4.108736026656326 4.6378045277922135 1.671217346737129 0 0 0
|
||||||
|
280 0 1 0 1.8281315737488533 2.7749825164949944 1.6554178103691615 0 0 0
|
||||||
|
164 0 1 0 1.3010575917308485 4.494402162669739 0.041752472824225825 0 0 0
|
||||||
|
170 0 1 0 3.650388228932189 2.9899308003889966 1.067251647123858 0 0 0
|
||||||
|
256 0 1 0 0.3339581189133178 3.843411762565409 0.9273636798830823 1 0 1
|
||||||
|
305 0 1 0 1.025180078056553 3.006380787860488 0.2873424831400842 0 0 1
|
||||||
|
321 0 2 1 1.3189364418815286 3.4276539374299775 2.089591655927524 0 0 0
|
||||||
|
147 0 1 0 1.1461014570579835 3.8511084209677513 0.7525062047220421 0 0 0
|
||||||
|
204 0 1 0 1.5112706244387488 2.8188173134434136 0.974908694884752 0 0 0
|
||||||
|
215 0 1 0 2.343066001179666 3.1978495580526083 1.8659131264876065 0 0 0
|
||||||
|
307 0 1 0 0.6571664267721125 3.1829219496620875 1.6123833084425085 0 0 0
|
||||||
|
230 0 1 0 1.691826706532908 4.328533707881519 0.9338934645265112 0 0 0
|
||||||
|
357 0 3 -1 0.9424908379877175 4.354374546920949 1.9334517447934154 1 -1 0
|
||||||
|
273 0 1 0 2.7367589344269287 4.456539476093516 0.09405577094510116 0 0 1
|
||||||
|
104 0 1 0 4.8224729965828805 2.532966442497679 2.359616149253149 -1 -1 0
|
||||||
|
326 0 2 1 3.205170108738211 3.657764190269539 0.6059860569327459 0 0 1
|
||||||
|
153 0 1 0 2.492658010069284 2.5549338497141174 2.359226108751561 0 0 0
|
||||||
|
10 0 1 0 3.8691461518549306 3.358206982770836 0.5857517185532839 0 0 0
|
||||||
|
17 0 1 0 1.4938724652414974 3.6267684500076256 0.6528239210562307 0 0 0
|
||||||
|
172 0 1 0 2.222730505934896 3.9294618789141045 1.857472216603435 0 0 0
|
||||||
|
187 0 1 0 4.12882439435804 4.373709089764649 0.7735950113473502 0 0 0
|
||||||
|
246 0 1 0 2.819371376884619 2.580827865657106 1.2982493640886932 0 0 0
|
||||||
|
175 0 1 0 3.6037043838950598 3.9741874494279883 2.1537260234843565 0 0 0
|
||||||
|
233 0 1 0 2.4936360109190447 3.7461714899270047 1.0175156445748128 0 0 1
|
||||||
|
197 0 1 0 4.513537428106752 3.877838158564245 0.23454380025260257 0 0 0
|
||||||
|
36 0 1 0 4.75739982448861 2.993089291142829 1.2955298606828172 0 0 0
|
||||||
|
157 0 1 0 4.577486719825762 2.5548383034837867 0.24912616922292966 -1 0 0
|
||||||
|
212 0 1 0 3.0478551135031786 3.2498317267851125 1.1259910025155964 0 0 0
|
||||||
|
369 0 3 -1 1.3808431418191394 3.7792710503646454 1.4792791648287753 0 0 0
|
||||||
|
225 0 1 0 0.5765924415162327 3.9233350563958895 1.5040765765770432 0 0 0
|
||||||
|
88 0 1 0 1.7263407212681612 4.0160590932504725 2.4625624343301684 0 -1 0
|
||||||
|
180 0 1 0 2.957032676177556 4.366369702631684 1.8084697653437938 0 0 0
|
||||||
|
228 0 1 0 4.007414662615488 3.641531116903689 1.6104136392925874 0 0 0
|
||||||
|
296 0 1 0 4.449577191326246 2.7185852714293324 1.5770958226540965 0 0 1
|
||||||
|
309 0 1 0 4.193664393097815 3.195309236798277 0.013138071944119596 0 0 1
|
||||||
|
316 0 2 1 4.8850975785077875 3.1181643275208497 0.4988834454683537 0 0 0
|
||||||
|
282 0 1 0 4.547534798722087 4.098196657638136 1.3514482711905391 -1 0 0
|
||||||
|
223 0 1 0 4.070573701500224 3.0161107941779735 1.0525783618149982 0 0 0
|
||||||
|
112 0 1 0 0.40619378501741044 4.581496953329872 2.4303817659862164 1 -1 0
|
||||||
|
89 0 1 0 1.1309601445791022 2.8935782083274892 1.0807782088379005 0 0 0
|
||||||
|
191 0 1 0 3.307024885373677 4.7782882192530485 2.015572284198738 0 0 0
|
||||||
|
237 0 1 0 4.748120043170084 3.725460808317568 0.9522577175239182 0 0 0
|
||||||
|
226 0 1 0 3.818166049029603 4.848449417426425 2.3600959505179793 0 0 0
|
||||||
|
231 0 1 0 3.0678050795347436 2.5699968710786734 2.0631097277316033 0 0 0
|
||||||
|
49 0 1 0 2.4740584898343307 4.766019947430475 0.6261200658844492 0 -1 0
|
||||||
|
375 0 3 -1 3.3298272958028243 2.9611113328638377 0.026915061404104934 0 0 1
|
||||||
|
265 0 1 0 1.84918915840028 3.334712440161601 2.324387380119898 0 0 0
|
||||||
|
193 0 1 0 0.2324107132082972 4.337276389235211 0.15737812733136072 0 0 0
|
||||||
|
318 0 2 1 4.741026775461015 4.950744240431997 0.09991000779517484 0 -1 0
|
||||||
|
38 0 1 0 4.567313389179671 4.564683120735231 2.2383375090123745 0 -1 0
|
||||||
|
195 0 1 0 4.276432197666434 4.550778719775141 0.01705180460738089 -1 0 0
|
||||||
|
224 0 1 0 4.512998770219293 4.930686914076221 1.3263777979979738 0 0 0
|
||||||
|
139 0 1 0 2.3611855680314053 2.5238664431540845 1.7400861072101907 0 0 0
|
||||||
|
102 0 1 0 1.3179823049817583 4.634953041690075 2.4318467808197792 0 -1 0
|
||||||
|
263 0 1 0 1.7520030887065592 2.504606951431736 2.4950818538423345 0 0 0
|
||||||
|
361 0 3 -1 4.0568544056493225 3.3144731773008287 2.4514614954683602 -1 0 0
|
||||||
|
298 0 1 0 2.2362905839125626 4.407255609537625 2.480448696532583 0 0 0
|
||||||
|
106 0 1 0 0.017457347778004895 4.764685683823287 3.185502158549636 1 -1 0
|
||||||
|
288 0 1 0 1.4779816621680442 4.314571361320767 3.1205014313954074 0 0 0
|
||||||
|
320 0 2 1 0.07352439249274566 2.7314754874268874 4.438222837395544 0 0 0
|
||||||
|
12 0 1 0 0.8318394760130385 3.0151110605041334 4.63155060662692 0 0 -1
|
||||||
|
350 0 3 -1 3.745719265020869 3.633969589456328 4.863558280777614 0 0 -1
|
||||||
|
255 0 1 0 3.7208321476425765 2.5430981712665512 4.92336590272389 0 0 0
|
||||||
|
264 0 1 0 0.6187322774863372 4.591988430718435 2.99409822364528 0 0 0
|
||||||
|
131 0 1 0 1.2363781535890241 3.269322268996143 2.994313299793769 0 -1 0
|
||||||
|
271 0 1 0 1.547729125698992 3.0254742510247556 3.7969510998815252 0 0 0
|
||||||
|
239 0 1 0 2.9727140078350547 4.458728462772902 2.589816182926471 0 0 0
|
||||||
|
247 0 1 0 4.723447954180547 4.559587825067703 4.2844794465287395 -1 0 0
|
||||||
|
336 0 2 1 4.30377897745755 3.6083219532870245 3.0751026181087915 -1 0 0
|
||||||
|
80 0 1 0 3.9139985069210037 4.2026902501983585 3.687780496901057 0 -1 0
|
||||||
|
351 0 3 -1 2.3310951879832125 4.1532874672431905 3.1481350248436812 0 -1 0
|
||||||
|
345 0 2 1 2.1434754823364397 3.630858480566402 4.76111427884395 0 0 0
|
||||||
|
23 0 1 0 0.1116865464821783 3.425858998459883 3.8315121362406237 1 0 -1
|
||||||
|
372 0 3 -1 0.2013553605339663 4.542002104842189 4.709301425799447 0 0 0
|
||||||
|
374 0 3 -1 4.681869085817003 3.6012197326454385 3.5343842160338768 -1 0 0
|
||||||
|
99 0 1 0 2.0103450534211995 4.916636042614968 2.7722290840703248 0 -1 0
|
||||||
|
134 0 1 0 1.2868072532982127 3.6027664980659657 4.834686879117821 0 0 0
|
||||||
|
94 0 1 0 3.4969553288958197 4.191479164754045 3.257611668733077 0 -1 0
|
||||||
|
108 0 1 0 1.069116967523645 3.8915098801681096 3.4741345909171617 0 -1 0
|
||||||
|
116 0 1 0 1.7110071948939123 3.003308695307758 4.880957418376936 0 0 0
|
||||||
|
47 0 1 0 0.6144957209089892 4.086034990124086 3.6421216730599935 0 -1 0
|
||||||
|
177 0 1 0 1.9967818019099437 4.223293250522419 4.123286584622672 0 0 -1
|
||||||
|
154 0 1 0 2.9241663178555766 3.006235461853767 2.736488872218668 0 0 0
|
||||||
|
272 0 1 0 3.6421402582975864 3.397998711089007 3.420005877158591 0 0 0
|
||||||
|
292 0 1 0 0.9456777627899714 2.854242407065964 3.6713102734015375 0 0 0
|
||||||
|
348 0 3 -1 3.602827568682842 4.841299797785864 3.0727220886411226 0 -1 0
|
||||||
|
113 0 1 0 4.09715162476059 4.796283984467532 3.6675472388615478 0 -1 0
|
||||||
|
76 0 1 0 3.0081758606102404 4.473089701483304 3.4619137215698026 0 -1 0
|
||||||
|
178 0 1 0 0.1695480127810721 4.181202627391224 3.659798577645965 1 0 -1
|
||||||
|
82 0 1 0 4.308822049710188 2.5505905907422872 2.8631988472742047 0 -1 0
|
||||||
|
358 0 3 -1 3.000038253202886 3.679700145601949 3.1009139360007207 0 -1 0
|
||||||
|
302 0 1 0 0.8272609584103479 4.003958148100786 4.445729848848656 0 0 0
|
||||||
|
13 0 1 0 3.9722298533039946 4.5610720224823025 4.234031447999139 -1 -1 -1
|
||||||
|
72 0 1 0 4.772965920074378 3.1606932108115786 2.6365859592135936 -1 -1 0
|
||||||
|
245 0 1 0 2.197144845045862 4.9556893549684515 3.4030216646163236 0 0 0
|
||||||
|
234 0 1 0 1.6678259516197003 2.9505643678051627 4.390951365364965 0 0 0
|
||||||
|
300 0 1 0 1.6328211445692586 4.819932075478693 4.586452176846693 0 0 0
|
||||||
|
105 0 1 0 1.892439317939264 4.041167636776589 4.848755937425436 0 -1 0
|
||||||
|
254 0 1 0 1.9694419982366302 2.9792140111735144 3.3447749736668477 0 0 0
|
||||||
|
371 0 3 -1 0.7643208588903881 2.802514146046753 4.3289561641866845 1 0 0
|
||||||
|
262 0 1 0 3.7153807374055208 2.9342246849719764 3.2753284900477935 0 0 0
|
||||||
|
266 0 1 0 1.0036319050407299 3.924029109027026 2.765363860481497 0 0 0
|
||||||
|
31 0 1 0 3.2842646038163683 3.4104333522804806 4.272304684998637 -1 0 -1
|
||||||
|
267 0 1 0 0.3478333275641798 3.7705819143047163 4.485021488086793 1 0 0
|
||||||
|
290 0 1 0 3.1115982282440853 2.9295831819273586 3.5626146396041767 0 0 0
|
||||||
|
324 0 2 1 2.771587476254712 3.9414271647783257 4.230821042895357 0 -1 0
|
||||||
|
293 0 1 0 4.214234541195906 3.262981149206049 4.090936501706094 0 0 0
|
||||||
|
323 0 2 1 2.8122245885603756 2.580830565080179 4.80431964625616 0 0 0
|
||||||
|
335 0 2 1 1.4810951840990771 4.639126972487052 3.6567291514204365 0 0 0
|
||||||
|
270 0 1 0 4.9358344334018485 3.549094534023696 4.864412320210946 0 0 0
|
||||||
|
173 0 1 0 3.117530919934732 3.684181958243471 4.8516982526619845 0 0 -1
|
||||||
|
2 0 1 0 0.3021690885489914 2.659446894836416 4.0367641920770465 1 0 0
|
||||||
|
210 0 1 0 1.1142397715035879 4.4046148625915365 4.3150622960514795 0 0 -1
|
||||||
|
125 0 1 0 2.7530308932307075 2.8955411122664563 4.086365750770761 0 0 0
|
||||||
|
214 0 1 0 2.447949785773993 3.4411883728706667 3.42533264878368 0 0 0
|
||||||
|
258 0 1 0 2.4686303390297684 4.538868481224538 4.639944166832721 0 0 0
|
||||||
|
93 0 1 0 3.788036472073458 2.8805091146305495 4.207262328768323 0 0 0
|
||||||
|
24 0 1 0 1.1758426635439467 2.95987521811849 2.7491364787864434 0 -1 -1
|
||||||
|
152 0 1 0 2.4635622448768637 3.071194152656136 4.899091259343484 0 0 -1
|
||||||
|
367 0 3 -1 3.1644043863749083 3.8654934982056908 3.8521845414359994 0 0 -1
|
||||||
|
249 0 1 0 0.8478947214959758 3.5141550038968123 4.043189817151755 1 0 0
|
||||||
|
252 0 1 0 3.6043032286195786 2.7211428234421744 2.6278508560867944 0 0 0
|
||||||
|
227 0 1 0 2.617074822292329 4.356852917720359 3.706994190844186 0 0 0
|
||||||
|
120 0 1 0 4.569034188524726 2.9098756991392434 3.6702905357629025 -1 0 0
|
||||||
|
342 0 2 1 0.04291508283574702 3.9189332996339656 3.0034347187387493 1 0 0
|
||||||
|
370 0 3 -1 2.5035109101131465 3.367965526536857 4.050360185006087 0 0 0
|
||||||
|
283 0 1 0 4.572823838429256 4.030918642578753 4.393803855463066 0 0 0
|
||||||
|
279 0 1 0 4.173810766411638 3.812475242565163 4.301379932392817 0 0 0
|
||||||
|
314 0 1 0 4.4933290428810615 4.490246675016839 3.151051409399978 0 0 0
|
||||||
|
297 0 1 0 4.726982536341496 3.1414792583129945 4.429739330385717 0 0 0
|
||||||
|
341 0 2 1 1.8003373130876947 3.4781354307892713 2.899858395353646 0 0 0
|
||||||
|
312 0 1 0 2.303209904055366 2.9656095134210108 2.8204198689888864 0 0 0
|
||||||
|
373 0 3 -1 3.565365933175215 4.286825401805136 4.955585318174815 0 0 0
|
||||||
|
91 0 1 0 1.9018724274489394 3.9228474975062673 3.538137694177671 1 0 0
|
||||||
|
260 0 1 0 3.349946104166285 4.305285613626282 4.371436905009239 0 0 0
|
||||||
|
286 0 1 0 3.4730325337603043 3.45134046911952 2.570996040716748 0 0 0
|
||||||
|
277 0 1 0 3.893007381012101 4.253386877442837 2.9065935101973173 0 0 0
|
||||||
|
162 0 1 0 1.6103352066101007 3.6182097268745603 4.028619192357339 0 0 -1
|
||||||
|
148 0 1 0 0.47140654288437406 3.361602614222439 3.2833125638624368 0 0 0
|
||||||
|
199 0 1 0 0.45641137753428773 2.8928189398052093 3.055011726454653 0 0 0
|
||||||
|
59 0 1 0 2.603235557919487 3.7590996377530255 2.60080520480327 0 -1 0
|
||||||
|
240 0 1 0 0.03755253175857831 3.8996655727813736 2.694428316121082 0 0 0
|
||||||
|
|
||||||
|
Velocities
|
||||||
|
|
||||||
|
189 -0.32037987935911505 -1.8545793275796412 -0.3389478887810303
|
||||||
|
107 0.3468735347167663 -0.2955882500703209 0.7493971092549213
|
||||||
|
253 -0.48452738488616026 0.9567078415781696 -0.25617231541775964
|
||||||
|
163 0.05392635484651058 1.4098736248940131 -0.9551003900232069
|
||||||
|
26 -1.617929859419785 -1.7202842142734436 0.11135553428439426
|
||||||
|
27 -0.29551994504699913 1.1370741945626326 0.41194386832776464
|
||||||
|
56 0.16870751745665893 0.5465328233065259 -1.6661100877128618
|
||||||
|
167 -0.697267953141008 -1.9033337525745169 -0.31395781199009537
|
||||||
|
364 -1.400949260052127 0.7984877976989593 1.9724238551125475
|
||||||
|
61 -0.07154629291712847 0.7516744652931485 1.9678922707455193
|
||||||
|
222 0.23902932306419583 0.792970583016431 0.1021330637484922
|
||||||
|
332 2.0928445946235548 0.5309926353418448 1.5604773439112944
|
||||||
|
1 -0.28287953739229227 -0.029534368909520013 1.0355343887239448
|
||||||
|
319 -1.0849228432051101 -0.23080330071554434 1.1791104359270128
|
||||||
|
53 0.9157229929216929 -2.3903991179046433 -1.5736773702897364
|
||||||
|
68 0.17385350731976662 -0.30161653041932146 -0.39368426363389786
|
||||||
|
220 2.5382960064880953 0.2591819621699902 -0.624753681550235
|
||||||
|
44 -1.6451203378616364 -0.9239543258332603 1.132412983542016
|
||||||
|
55 -0.08195646053083308 0.37533078137864123 -0.36860166560573604
|
||||||
|
362 -0.4446005218467803 -0.13521669762509536 -0.3021189485210508
|
||||||
|
165 -0.3037978228853421 0.48479699556498196 -0.14302405851335173
|
||||||
|
60 -0.544505644947158 0.17484779434446918 0.5635832746819489
|
||||||
|
202 0.40080169998085574 0.6655121110868133 0.4354226901236873
|
||||||
|
85 -0.08059699858936498 -0.02186022407318814 -1.2385638610310603
|
||||||
|
73 1.183399433007768 -0.5106063831888463 1.1937543804310102
|
||||||
|
96 1.2595243589106713 -0.013906208472664688 0.4458849845729422
|
||||||
|
30 0.5511059698244886 -0.6732784212785152 -1.0116331060036698
|
||||||
|
67 -1.9023068008435087 1.0951572746798406 -2.0479882413103634
|
||||||
|
349 1.4237209300898004 0.30323664052562727 0.19232435921291324
|
||||||
|
132 -0.48867767658730155 0.09532364712318463 -0.42068909019073003
|
||||||
|
328 -0.5663127928136679 0.37616782849718877 0.4297794152083855
|
||||||
|
161 0.7703317540205181 0.6774326958924123 -0.3026855763654866
|
||||||
|
185 -0.023401903290328513 0.2511657303041649 -1.3088367457780965
|
||||||
|
219 1.2737339284351616 1.028957623073161 -1.0554246534519245
|
||||||
|
8 -0.06863366403807239 -1.6556315386699292 -0.23974376153400073
|
||||||
|
69 0.1565812662607089 -1.2971845847251846 2.613897358932758
|
||||||
|
3 0.8019572100951472 0.849648794229192 0.11213159968547601
|
||||||
|
7 0.25284839489562 1.491377162402211 -0.0841367270980815
|
||||||
|
329 0.6351810405065701 0.25238586135592256 0.8556983715790075
|
||||||
|
174 -0.5484640782672199 -0.14739645457730516 -0.17643270798617747
|
||||||
|
20 -0.7181391568279812 -0.22546080581710778 -0.48698419533440007
|
||||||
|
57 -1.6318504400975429 1.5493172313080645 0.4266085421953033
|
||||||
|
325 0.061765643056371416 -0.0060236030310999444 -1.8483177209317203
|
||||||
|
40 -0.6621905409370356 -1.2253334788867594 -1.2773646990414835
|
||||||
|
51 -1.1432987328508335 -0.3034502864840843 -0.09847735528475197
|
||||||
|
54 -0.8020221565243566 -0.0015208681811410135 -0.6007775452455262
|
||||||
|
186 -0.33099994137011096 -1.131278148973123 -0.7879194313488349
|
||||||
|
289 -0.9130924589993602 -2.639634662624726 0.09890031992023729
|
||||||
|
75 -0.8396764454636105 0.15798357570063332 -0.8477685915025622
|
||||||
|
48 -1.154914948896169 0.8466957349051685 0.8313924234437813
|
||||||
|
66 0.654607723623097 -0.41464584514495073 0.3609107252534362
|
||||||
|
52 -1.0586581647402704 0.5087601698575234 0.021025900110182197
|
||||||
|
158 1.3322996283718878 0.9345320009185999 -1.0328661925117097
|
||||||
|
330 2.4383540085998128 0.9866744795842981 -0.275795472471459
|
||||||
|
359 -1.057214010787649 -0.4364851954003303 0.2310265064750756
|
||||||
|
366 2.636570585206883 -0.3884825767632163 -0.7217671918096393
|
||||||
|
196 0.657853761584953 2.3775812813720982 -0.5436441623798505
|
||||||
|
128 1.7541843513017408 0.7453187167218113 1.2179212772328478
|
||||||
|
118 -1.59209911141696 -0.07364502396325014 0.7936184535797746
|
||||||
|
43 0.6237868379926791 -0.5784415822689247 -0.5803521937322204
|
||||||
|
184 -0.05277645327535091 0.45761568472864167 1.6427093411481584
|
||||||
|
360 -0.5648148491925004 0.5433424409581341 -0.49847380874912023
|
||||||
|
64 -1.8023545518136344 1.2913349276666013 0.12717943337914392
|
||||||
|
285 0.5736914459809833 0.5401354659943393 -0.28034343867615685
|
||||||
|
58 -0.36569579675665037 0.07239846277520536 -1.1013654261669847
|
||||||
|
257 1.552014566999722 -0.27948696231751907 -0.19503371520168367
|
||||||
|
356 0.7682896155635832 0.8280820699807006 1.3752233131249456
|
||||||
|
100 -1.0184796009907435 0.4605961843295614 -0.704442145669238
|
||||||
|
121 -0.38173838277886674 0.1959729194377248 -0.339617988229434
|
||||||
|
130 0.22178015355919917 -0.8675864036237741 1.1703244653493718
|
||||||
|
238 0.8237981930471431 -1.5493771904591997 -0.24060309819018327
|
||||||
|
211 -0.9664235140040581 1.0444826618189473 -0.7001322318514289
|
||||||
|
208 -1.1981085340301125 -0.7027352973576034 0.5185067521926653
|
||||||
|
63 0.08370101334493428 0.12218456306348915 0.049185735912721115
|
||||||
|
22 0.30188358915891 -1.3418299707096835 1.1148332854869305
|
||||||
|
355 -1.6654429777296822 -0.6945382472719116 -3.1744183147606044
|
||||||
|
70 -0.08375793026685956 0.8125324795960583 0.6134941598297233
|
||||||
|
65 -1.1244245803291022 -0.9361082187681131 1.1324057744996805
|
||||||
|
182 2.412056789726208 1.2486258334638396 0.20473073207056972
|
||||||
|
188 -0.37468794463000277 -1.2934293589793593 0.9691264102882897
|
||||||
|
35 0.6406020314671873 0.49864731329733636 -1.7724168624616223
|
||||||
|
6 -1.3537464971191604 -0.20927181650199864 -1.5167116889460597
|
||||||
|
346 0.30631209820842736 -0.7471003495751499 -1.6323676491850723
|
||||||
|
14 -0.7975238331233878 -0.2181017429474187 -0.632027008590476
|
||||||
|
15 -0.32436974395845447 0.3065062429708726 0.4060390267782001
|
||||||
|
16 0.07956951912756546 -1.0048987407630834 -0.36004318524122436
|
||||||
|
287 -0.5959260893373665 -0.1854042515514421 1.0130704394383132
|
||||||
|
81 0.9472416915759921 -0.6006345374524827 -0.24694710732081407
|
||||||
|
114 1.525743657374327 0.04312008580379893 -0.7588343858546425
|
||||||
|
232 -2.2017540835769154 -0.886310786043688 0.20387430412267815
|
||||||
|
50 0.8784604270190535 0.0011080801156705886 0.5856470163400485
|
||||||
|
79 -1.071058278656874 -0.006257268621159592 -1.4196804350916041
|
||||||
|
74 -0.7639977049209028 -2.6659874189534594 1.1890689974611952
|
||||||
|
194 0.865474812438892 -0.5155997613354885 -1.9207758859429034
|
||||||
|
133 0.38706903000333437 -0.9520916056321852 0.8541781745856745
|
||||||
|
311 0.5008213609458084 -0.07623241918788479 0.5610893061215554
|
||||||
|
115 0.15935870900356716 -0.882694140477557 0.6905790810816846
|
||||||
|
4 -0.9205904536679229 -0.7764649294266535 1.1104783428010845
|
||||||
|
151 0.6813124939707291 2.326468648189791 2.249632338275329
|
||||||
|
306 -0.18710153508281002 -0.3863205254514582 0.5475210927789089
|
||||||
|
138 -1.6956647006569652 -1.151952653064399 -0.554024796221634
|
||||||
|
110 -0.39629567812811123 -0.4259264444322932 0.44254068082874265
|
||||||
|
251 1.5245566481568409 -0.04190307638919144 1.0804352846040617
|
||||||
|
331 -0.9795637705792982 -0.02610365622846786 2.5830426945375367
|
||||||
|
243 0.45087912305781325 -1.355797680211566 0.4004209604371337
|
||||||
|
156 0.651222966601892 0.4174674307414501 -1.1666370354607374
|
||||||
|
32 -0.5950276948154204 -0.8393986824943023 -0.7189711727165591
|
||||||
|
205 0.3776877212460598 2.3109152071487427 0.6245197680183613
|
||||||
|
41 -0.9842633414094011 -0.8809111823971685 -1.2837012228899978
|
||||||
|
28 0.18078855219728557 -0.13909035935407538 -0.19886968753018486
|
||||||
|
322 1.1176391816577027 -0.8011078770573403 0.21746550449618066
|
||||||
|
103 1.2549030850211156 -0.8081818878065185 -0.27748891746378196
|
||||||
|
353 -1.5194865665198567 -0.5579729356084093 -2.0775398105335463
|
||||||
|
295 0.22655387403623733 2.9916385717293763 -0.43349783976321543
|
||||||
|
365 0.16554102729886308 -0.4745928131492317 -0.03803439542786842
|
||||||
|
98 -0.4618022678057757 -0.6029234473896345 0.6725224603911311
|
||||||
|
33 -1.7236841295071144 -0.3068526804764886 -0.20580599603270883
|
||||||
|
39 1.2772591923409662 2.1497013660971303 -2.56219215061276
|
||||||
|
343 -0.2927424336003138 0.9775658544657785 0.2011269771824622
|
||||||
|
259 0.24216001573068768 1.8155597582018805 -1.0537870123381061
|
||||||
|
77 -0.1324758963152601 0.38342267896154975 -0.04929261328552273
|
||||||
|
140 0.38183354460675634 0.6132141691538076 0.442562890919203
|
||||||
|
111 -0.8964279708048736 -0.8793266310917598 0.00861098502364186
|
||||||
|
129 -1.1765926408865686 -1.0237122510048935 -0.27213291220171076
|
||||||
|
317 0.8853758404732577 -1.1912915511525315 -0.2565808529702654
|
||||||
|
25 -0.41258107389034077 1.5982277861548693 1.2605935861477815
|
||||||
|
21 -0.9069821227261771 -0.4677412632169774 0.6873716589735867
|
||||||
|
276 0.25907509449423294 -0.11278777358289174 -1.2598969980105488
|
||||||
|
160 1.1310609970707983 -0.7180501046994335 -0.5753626368090448
|
||||||
|
308 -0.5407967057189286 0.6940578777081593 -0.37557998557357736
|
||||||
|
313 -0.7130409942586629 -1.681937934547073 0.1358119949043896
|
||||||
|
71 0.667183519460017 0.3282177658608256 -2.7413950424049682
|
||||||
|
42 1.1047543258650714 -0.8068929160871195 -1.2899950214337368
|
||||||
|
83 1.7828282628616605 -2.004816043371422 1.2952692225001963
|
||||||
|
123 -2.9004360498301707 0.9646317600839549 0.18131057792974167
|
||||||
|
29 -1.3652408424575189 -1.009704628734932 0.43892722829821035
|
||||||
|
291 1.0627401897900626 0.43489566519198664 -0.18784491971683132
|
||||||
|
299 -0.26688361561559937 -1.6102635970374153 0.5079799986210346
|
||||||
|
87 1.4011023956088358 0.32714083881834366 -0.7531211236916443
|
||||||
|
78 0.1425369548627805 2.6493781694133145 -2.22950555437911
|
||||||
|
5 1.3052777281483532 -0.9535145036740771 0.2654363506534612
|
||||||
|
95 0.30567181776721686 1.1163897147224524 -0.5532613677186452
|
||||||
|
352 0.8465877298612667 2.2107064094824453 -0.17116328451251087
|
||||||
|
281 -0.07871622308682222 1.0856250342504348 1.1051209599756335
|
||||||
|
206 1.0416994819210157 0.5672831409877002 1.6724372809390164
|
||||||
|
241 -2.2941651916087253 1.9444171652571998 -1.2578222836508794
|
||||||
|
109 -0.050748691911046466 1.0000918986528329 0.2015940504869988
|
||||||
|
126 -0.8786798841416771 0.8497095311402493 1.3946275611382846
|
||||||
|
62 -0.2164244387038406 0.8723775902261287 0.26553621918966663
|
||||||
|
145 0.46930481759942066 0.7693145659657128 -0.037339037750325446
|
||||||
|
354 -0.2098961088460406 -0.953758291681559 -0.403997005612617
|
||||||
|
248 0.8565801706475304 0.8235709205269733 0.2955326303618714
|
||||||
|
278 2.048784561206607 0.9072129491727593 -0.7581517712639704
|
||||||
|
334 0.456898611136665 -0.02509977329095233 -0.9459879096811896
|
||||||
|
344 0.8456571762985342 0.4633497822367495 0.8285234460659753
|
||||||
|
84 0.40873630171375086 -0.18526388419408432 -0.06542872798585272
|
||||||
|
135 2.013756885383165 -0.15612654092659334 0.5349019283627415
|
||||||
|
124 -0.5212908614174182 0.7685855427870887 -0.12228979391994671
|
||||||
|
301 0.48855352634840166 -1.2406754622002991 -0.08431072249939792
|
||||||
|
221 -1.2260526209132598 0.7697110508869727 -0.5542459265345273
|
||||||
|
149 -0.2107348825202514 0.22490448892353535 -0.5734046758064464
|
||||||
|
235 -1.4630566299287793 0.5127970335856704 -0.6004850345593133
|
||||||
|
268 0.5661524540264498 0.8991784804895261 -0.005988273242503317
|
||||||
|
229 -0.8584020647535824 -0.25056183768697937 0.6902063254564769
|
||||||
|
144 -0.46291169716408886 0.5111551390891086 1.1711664705383293
|
||||||
|
142 -0.41757592752156836 0.21324275041440427 -1.2569024662297255
|
||||||
|
119 0.5340652441413375 0.3164807148267359 -1.4743337919796309
|
||||||
|
218 -1.0392995481658593 0.26241789884459166 0.7357941801129729
|
||||||
|
269 0.7678562785093035 -1.9170146057209667 0.7772238925448399
|
||||||
|
171 -0.4969590584187104 -0.596095006981118 -0.10809390580507182
|
||||||
|
347 0.8436056567675704 -0.5476600028413069 -1.3395269452969696
|
||||||
|
117 0.8095357513993098 0.14859594003753698 0.9460359145433276
|
||||||
|
244 0.09898637700604154 1.9714533954146634 -1.2087777946497995
|
||||||
|
46 -0.3820366350713078 0.32336042217403327 -0.9227515950377472
|
||||||
|
97 -1.7189935642347989 -1.5765158910467392 0.8063603306333886
|
||||||
|
155 0.36326503759730183 0.6548052876982512 1.620348248115881
|
||||||
|
190 0.7808450444577382 0.6656743687730368 0.7660461630595695
|
||||||
|
141 0.8693957537631642 1.3523683215558047 1.2211970208170133
|
||||||
|
261 0.28442666039427394 -0.32073173144758543 1.583985092925248
|
||||||
|
92 -0.7345577665025577 0.016229401856888797 0.3571609110744681
|
||||||
|
327 1.500595660011905 2.328516151626208 -1.0480316997941985
|
||||||
|
337 -2.026559556886336 -1.0216544907269516 -1.6983898702416695
|
||||||
|
45 0.7296312803407121 -1.3823715012836595 -0.001888700820258285
|
||||||
|
200 -1.5125957105846846 0.21807330099838138 1.0211540585201806
|
||||||
|
19 0.20095464395150656 0.876426388172185 1.1335083283234622
|
||||||
|
137 -0.6544379260019478 0.3996572012861071 1.5228974656760543
|
||||||
|
127 -1.1436027430113194 0.5730519130732912 0.008333961575108378
|
||||||
|
9 -0.42750265926865316 -0.5165855700703796 -1.0737944161142243
|
||||||
|
122 -0.3470793076769018 -0.34708198826094805 1.1255388427785304
|
||||||
|
213 1.835703281018243 0.8847420691344063 1.6530535667302775
|
||||||
|
136 0.43589519224927076 -0.020299972081583365 0.747684835626366
|
||||||
|
37 -1.148425632972328 -0.00642821348241146 0.9184878168029185
|
||||||
|
34 -1.4186726525732596 0.4531027449345908 3.0048537054226916
|
||||||
|
217 1.915040996479654 -1.732542284842007 0.44651597348176714
|
||||||
|
250 0.5621559470017148 0.4079874575005626 1.303044522453095
|
||||||
|
166 0.7893755845011986 0.43466399248524873 1.160997706352551
|
||||||
|
150 -0.37696033158301806 1.0863822179294413 -2.078278052131126
|
||||||
|
368 2.210878478411088 0.38296799766548134 1.0444089386311377
|
||||||
|
339 1.4973183477847594 -0.7580085092724449 0.11364576051168895
|
||||||
|
340 -0.3257916484956234 0.0813898939784988 -1.1040698774178863
|
||||||
|
338 -1.0699596370620241 -1.0120808096694316 1.833778928251108
|
||||||
|
201 -0.23917814210651525 -0.03394921352802534 -0.9718396302546122
|
||||||
|
101 0.02844691201485288 -0.6506751616189366 -0.03984644326365714
|
||||||
|
209 -0.9153220207336246 -1.5186563759968537 -1.0205115163511242
|
||||||
|
168 0.8206949111387913 -0.4245501681797143 -0.7447438734980448
|
||||||
|
216 -0.43707878972381015 -0.5291981706606685 1.1132283784486239
|
||||||
|
203 -0.8017105024810447 0.33314329697566913 -0.5162714638483775
|
||||||
|
179 -1.8007654528739871 -0.4670778758036332 0.23458485261416823
|
||||||
|
181 0.5555468330191876 0.25910041403756756 -0.3316347961383419
|
||||||
|
236 -0.8012681820545456 -0.5344531291884258 -0.08163768189012148
|
||||||
|
18 1.9065170422999271 1.3540018286545739 1.1100685009732258
|
||||||
|
363 0.2827677278721721 -0.3503610814118505 -1.1797786001961337
|
||||||
|
198 -0.41882935960212925 0.8056124759016018 1.8622528356092367
|
||||||
|
146 0.1474073717281029 1.699648861146042 1.0589630664233587
|
||||||
|
284 -0.407232387684036 -0.11824885032252892 1.360138277573833
|
||||||
|
207 -0.3298855435595792 -0.006765921450541862 0.2769759320227882
|
||||||
|
183 0.06337061105143588 -0.48367890148177073 0.5050176946201105
|
||||||
|
90 0.3184428577661019 0.9432678954749032 0.8928827031242041
|
||||||
|
159 -0.5105050211567479 1.9463424976868646 0.32689317369973153
|
||||||
|
274 1.3982542011798467 -0.27549013447341186 0.8666525994391387
|
||||||
|
303 0.4978908819019676 1.2437279316470162 -0.10162615038846663
|
||||||
|
315 -1.0164590430058362 -0.03269995674634833 0.6833370972687541
|
||||||
|
11 0.3622774648719034 1.2005608993134556 -0.7399401748200916
|
||||||
|
176 0.12717484954669636 -0.1874453653833894 -0.5308623715664049
|
||||||
|
304 0.06155270894330727 0.03603614146908593 0.1329179976636057
|
||||||
|
143 0.26847678011717396 -0.3583390732477076 1.7051362686528129
|
||||||
|
275 0.33838601766084075 0.2950617938645766 -0.09418120915803613
|
||||||
|
242 0.3073988441018431 -1.8086100776648917 -0.42916540436389544
|
||||||
|
169 0.14874973578643622 -1.3199432376066533 0.7087936697125053
|
||||||
|
86 -0.5239538553467294 1.3403598560019885 -0.2254748591815899
|
||||||
|
333 -0.21788548307133926 -0.7324156012520107 0.1425582466646254
|
||||||
|
294 0.6218138152225486 0.21868791299154444 0.8803681463521291
|
||||||
|
310 -0.5282668664359558 -0.46220541267842175 -1.0627944759334662
|
||||||
|
192 0.8557275799833504 1.4638168802662663 -0.6584377242390569
|
||||||
|
280 -0.09918465909102868 -1.0727882372767648 0.1410570176454262
|
||||||
|
164 -0.008014496582185324 0.5157698128135756 0.46160123613104664
|
||||||
|
170 1.4950197089701442 3.424612541884591 -1.314342167688277
|
||||||
|
256 0.06221965545636296 -0.8559730346941176 1.8154628407737485
|
||||||
|
305 0.30469481973038853 -0.03817030163277567 -1.2365844444400544
|
||||||
|
321 -0.3202998744384521 1.2283112281779653 1.823191101425018
|
||||||
|
147 0.5820565680991441 0.36342122556604795 -0.2612619382618049
|
||||||
|
204 -0.008409550806661968 1.171175221811852 -0.2917927123166712
|
||||||
|
215 0.46773636429619847 -0.41233509768776383 -0.3263056272548713
|
||||||
|
307 -0.07908782350310187 2.164168859748066 -0.9789469165714956
|
||||||
|
230 0.8852323551048787 1.3865626751983875 0.5628005219581595
|
||||||
|
357 -1.2576148747792928 0.03308240972261274 -1.5084612011551441
|
||||||
|
273 0.5606862174415299 0.5124906231131765 -1.3826770688817982
|
||||||
|
104 -0.10795450062494798 -2.791328634167407 1.1620113801205978
|
||||||
|
326 0.2071603034556735 -0.40909146487793213 -0.896060232043604
|
||||||
|
153 -0.45260595455551345 -0.3277317537659357 -0.13439736779275077
|
||||||
|
10 2.7196279602592033 0.48777338008418347 0.18107892198434122
|
||||||
|
17 -0.8413852713221374 -1.1275004082730866 -1.4487171872195708
|
||||||
|
172 1.2930259795119698 0.14131239886642913 0.5257996818615889
|
||||||
|
187 -1.8173970648752318 -0.28759466349432383 -1.7755081990758885
|
||||||
|
246 -1.0149452724155728 -1.300181341724771 -0.976220324472834
|
||||||
|
175 1.0435736653798136 -0.6355996329080813 -0.6337776368224881
|
||||||
|
233 1.2293937984927237 -0.905059289715439 0.8454304677995911
|
||||||
|
197 -0.22773405357421111 -0.7410347767485816 1.126629391166937
|
||||||
|
36 -0.9705558369369324 0.33702279037561017 -1.064377132550976
|
||||||
|
157 -0.05834073541273116 1.2094227269795201 1.0222926092654627
|
||||||
|
212 0.013232248632983099 0.9236140505707409 1.261304943429413
|
||||||
|
369 0.3957125732954573 -0.5984876528890495 -0.6144811927659548
|
||||||
|
225 0.6396689699095744 -0.38272720995061654 -0.691909782028554
|
||||||
|
88 -0.4143004926247838 -1.2942068299775036 -0.546740943598064
|
||||||
|
180 0.04523325776155317 -0.05945543703566272 0.47333576015888584
|
||||||
|
228 0.8374889207264015 -0.5976967042166498 0.026290439671542307
|
||||||
|
296 0.7603590023814826 1.798573173748085 0.09638254026567694
|
||||||
|
309 0.26044897388340504 -0.6796155915915322 -0.5500226485278027
|
||||||
|
316 0.7809829226880511 -0.9911482041657326 -0.5982510531417577
|
||||||
|
282 2.813391256963532 -0.7389301719245412 -1.317705839191937
|
||||||
|
223 0.42512280312483486 0.39540872471182203 0.1359105288746332
|
||||||
|
112 0.3204862890962222 -0.5808767554272332 -0.7511556946241044
|
||||||
|
89 0.30853654184225165 1.4220670510027051 -2.1642949762748867
|
||||||
|
191 0.20906754014854564 0.026904283363689382 0.39272994979179504
|
||||||
|
237 0.8114113274128864 -1.2134195876500447 -1.2542604312044792
|
||||||
|
226 0.05086738376609842 1.9155895254467763 0.5909889856323195
|
||||||
|
231 0.12002855122048815 0.02004736909508279 0.11081960871345642
|
||||||
|
49 0.03966621608393742 -0.8770492944397817 0.8690111691798925
|
||||||
|
375 0.9491508595606913 0.58883338187899 -0.3157968091718698
|
||||||
|
265 -1.202404469596496 -1.5086124324682335 0.25807518315254696
|
||||||
|
193 0.4146818842856516 0.2647601963673656 0.730972113530503
|
||||||
|
318 -1.8694737066425302 -0.761959044368273 -0.7096835210855107
|
||||||
|
38 1.4229802153283508 -1.36140802862721 -0.8467736118278119
|
||||||
|
195 -0.8905011743693773 0.7285788649892662 -1.1668737157134021
|
||||||
|
224 0.27425001045805447 -1.4123472657200646 -1.3276958804580687
|
||||||
|
139 0.17701044314199935 1.2384991288614933 0.707649077312958
|
||||||
|
102 -0.49170524562266826 0.9342585115109375 0.4160956308860243
|
||||||
|
263 -0.7682667946507794 0.5411620297128601 -0.14243425461628567
|
||||||
|
361 0.4874350807265555 -1.118941056651683 0.4602449779293269
|
||||||
|
298 0.04321754250044474 -0.15386666534573679 -1.0460367336946477
|
||||||
|
106 -0.3645858676063196 -0.008671871254614383 -1.0359720474498813
|
||||||
|
288 -1.275865518017513 -1.0371041509619956 2.212604082967035
|
||||||
|
320 -0.377092487120416 -0.5974519455300853 -0.22840203412473642
|
||||||
|
12 -0.24251540706937524 -0.1402656612039157 0.2434885714233267
|
||||||
|
350 1.1678886543574276 -0.45657425471012764 -0.2662438133234255
|
||||||
|
255 0.5964565878330671 -1.3463852257768025 1.2786356338266742
|
||||||
|
264 1.6104915551559742 1.8273229008351088 -0.9803231882687425
|
||||||
|
131 -0.8634566501958852 -0.3775110787982123 -0.4297068950811986
|
||||||
|
271 0.022978578950211624 0.1537857816854949 0.41326352661226756
|
||||||
|
239 1.1101812509452746 -1.0996094771595475 -0.5405483522697302
|
||||||
|
247 0.366683557977341 -0.40591154743605157 0.3199408653703203
|
||||||
|
336 -0.4204708954513029 1.1245949705896916 0.14059678344621293
|
||||||
|
80 0.7468471903560799 0.16912425014962304 0.9566573830732898
|
||||||
|
351 0.07048942766011615 -1.3084119272893855 -1.2549170044600249
|
||||||
|
345 0.7055909005169286 1.5707280888607302 2.170499205441559
|
||||||
|
23 -1.331563904677986 0.7554001948296128 0.6695113635015243
|
||||||
|
372 -1.4331361061806305 -0.7926393821400735 0.5238882724688806
|
||||||
|
374 -0.825494743089428 1.5035094266963547 1.4373542115371403
|
||||||
|
99 0.27578368704586625 -0.6711803184635016 0.5730720207589178
|
||||||
|
134 -1.1904489259413122 1.5650039062713583 -0.4846706283407857
|
||||||
|
94 0.9633444927305759 0.47059281614148496 0.1502870940642896
|
||||||
|
108 0.26924336654778097 -0.21911864351862886 0.3263366196031549
|
||||||
|
116 0.6191352094412962 -0.7085456797691245 -0.2795453344586494
|
||||||
|
47 -0.81507518857967 0.5002361185490026 0.1633824556071923
|
||||||
|
177 0.9242227597235199 -0.9239301127385003 -0.6516754024576575
|
||||||
|
154 0.36428957391605954 1.0522574437068934 0.47589301799726774
|
||||||
|
272 -1.0875391115124131 -0.5442742977183277 0.6272696858994802
|
||||||
|
292 -2.3018786976959547 -0.719034234609397 -0.3976068240680647
|
||||||
|
348 -0.7074103387842228 -0.0767390137549914 -0.963801034994381
|
||||||
|
113 0.0030054733602942266 -1.3950743743038958 1.867999225141668
|
||||||
|
76 1.5225615991122337 -0.6220818112064357 -0.15128024907071225
|
||||||
|
178 -0.9036534708064256 0.27189024225898883 -1.310213331624685
|
||||||
|
82 -0.42289693438412584 -0.022877233686993723 0.16757191063647395
|
||||||
|
358 -1.084491323240786 0.309617438081422 0.19221704824216043
|
||||||
|
302 -1.0553000696338095 -0.7753368184729383 -1.6522442141368283
|
||||||
|
13 0.845507404222631 -1.1655430839109384 1.5339500987877546
|
||||||
|
72 0.41215075448394733 -1.3387634915542448 -1.701720507581037
|
||||||
|
245 -0.34884333851309834 -1.599607748547356 -0.08374549876035683
|
||||||
|
234 -1.8167563819027162 -1.1826697278339255 1.1323923705559067
|
||||||
|
300 -1.1492146391765459 0.2483076272654141 -0.7388669957162219
|
||||||
|
105 1.860014533900312 0.7148855192575438 0.950732381457607
|
||||||
|
254 -0.6941521238655652 1.3286658685743733 -0.09912945530019143
|
||||||
|
371 -0.03007825734775041 0.17488055593531995 -0.5660994145015367
|
||||||
|
262 1.1816791457721831 -0.2527818393194355 0.49550489641014006
|
||||||
|
266 0.7025922230527104 -1.3294406800025553 -0.610134301603067
|
||||||
|
31 -1.015719812353546 0.699060801172419 0.9860089149766915
|
||||||
|
267 0.38654355926704703 -0.1264135931208901 0.1337359898717711
|
||||||
|
290 1.0106897270034887 -0.6174340186836875 0.17719301929654596
|
||||||
|
324 1.5906920275906873 -1.4359983538965082 -0.8582706716695392
|
||||||
|
293 0.9982234808302441 0.543717193528767 -2.062895773562878
|
||||||
|
323 0.17420566156018166 -0.8499393438675438 -0.22821645799213797
|
||||||
|
335 -1.4047556653990858 0.2558049214304259 -0.20559797586706147
|
||||||
|
270 -0.6321821769779428 -0.4192527616747393 -0.8336466516152516
|
||||||
|
173 -1.454149943391539 -0.7091620301715705 0.1032726804162123
|
||||||
|
2 -0.13160744352132697 -0.8530661810441926 -1.4081064081887786
|
||||||
|
210 0.005780708280217166 -0.1314037001754253 -0.2650271980684433
|
||||||
|
125 -0.09249384396894937 -1.1079543363063478 0.5855224371258938
|
||||||
|
214 0.5201018860617912 1.5761782081656692 0.035238788848664875
|
||||||
|
258 0.029258855657727026 0.9978609610551674 -0.14936661862149073
|
||||||
|
93 1.3599706012850858 0.5138196159795498 -0.5479657931310508
|
||||||
|
24 -0.36848780789234786 0.5502667846431184 -0.8219909931831206
|
||||||
|
152 1.443106679308555 -1.5881504830897177 0.5251248932583428
|
||||||
|
367 -0.8318296913109121 -1.0659118655536617 1.4652035277005255
|
||||||
|
249 -0.7272493937720567 -1.0554246074355031 1.9106526180491246
|
||||||
|
252 0.15824074140715003 1.3574893627297528 0.849299710142209
|
||||||
|
227 -1.8919742394027095 0.35022746838873914 -0.8716265785931281
|
||||||
|
120 -0.571575152303992 -1.2924338935753592 1.6398975078681308
|
||||||
|
342 0.04170661506757478 -0.2554943852733288 1.2031995777997446
|
||||||
|
370 -0.3474083481747786 -0.8268210706239789 0.11710668216712806
|
||||||
|
283 0.34259631654561 -0.638600994930959 0.021713727624721322
|
||||||
|
279 -2.1091380649692364 0.5683510572154551 -0.9091778578938636
|
||||||
|
314 -0.43834173946024524 -1.6956466398316619 -1.741986521654538
|
||||||
|
297 0.9805330343066516 1.9653989039948883 -0.06267823210622318
|
||||||
|
341 0.6436707559323198 0.17740641651830055 0.7923601196148916
|
||||||
|
312 -1.4662653378890305 0.8912504951091632 -3.2848373130153616
|
||||||
|
373 -0.3818721621040007 1.1303100555115857 1.117083484179991
|
||||||
|
91 -1.0354512700928402 0.7952901789933705 -1.3376868649958413
|
||||||
|
260 -0.7142984506137289 0.4503083150384257 0.7493938136595016
|
||||||
|
286 0.12497815933423412 -1.4185031297528174 -0.7147963619923647
|
||||||
|
277 -0.04273979718334558 0.6681668442079539 -1.627755052910915
|
||||||
|
162 0.6571166297602984 0.4444526727563672 1.4878784469904562
|
||||||
|
148 0.3177520883327088 1.0855120103126268 -0.6584725796441712
|
||||||
|
199 -1.2545559409413416 -0.5694770345954823 0.33932040400166985
|
||||||
|
59 -0.6235113592986508 -0.2086994539745325 1.6873018374682558
|
||||||
|
240 0.705376364763962 -0.6227531276788822 1.6071635134558022
|
||||||
@ -0,0 +1,58 @@
|
|||||||
|
# DPD Ionic Fluid
|
||||||
|
|
||||||
|
variable T equal 1.0
|
||||||
|
variable cut_DPD equal 1.0
|
||||||
|
variable seed equal 165412
|
||||||
|
variable lambda equal 0.25
|
||||||
|
variable cut_coul equal 2.0
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
# Initialize LAMMPS run for 3-d periodic
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
units lj
|
||||||
|
boundary p p p # periodic at all axes
|
||||||
|
atom_style full
|
||||||
|
dimension 3
|
||||||
|
|
||||||
|
bond_style none
|
||||||
|
angle_style none
|
||||||
|
dihedral_style none
|
||||||
|
improper_style none
|
||||||
|
|
||||||
|
newton on
|
||||||
|
comm_modify vel yes # store info of ghost atoms btw processors
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
# Box creation and configuration
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
# Define pair style and coefficients
|
||||||
|
pair_style dpd/coul/slater/long ${T} ${cut_DPD} ${seed} ${lambda} ${cut_coul}
|
||||||
|
|
||||||
|
read_data data.dpd_coul_slater_long
|
||||||
|
|
||||||
|
# Enable long range electrostatics solver
|
||||||
|
kspace_style pppm 1e-04
|
||||||
|
|
||||||
|
# Construct neighbors every steps
|
||||||
|
neighbor 1.0 bin
|
||||||
|
neigh_modify every 1 delay 0 check yes
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
# Run the simulation
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
thermo_style custom step temp press vol evdwl ecoul elong pe ke fnorm fmax
|
||||||
|
thermo_modify norm no
|
||||||
|
thermo 100
|
||||||
|
|
||||||
|
timestep 0.01
|
||||||
|
run_style verlet
|
||||||
|
|
||||||
|
fix 1 all nve
|
||||||
|
|
||||||
|
run 1000
|
||||||
|
|
||||||
|
unfix 1
|
||||||
|
|
||||||
@ -0,0 +1,147 @@
|
|||||||
|
LAMMPS (17 Apr 2024 - Development - patch_17Apr2024-262-g0aff26705c-modified)
|
||||||
|
OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98)
|
||||||
|
using 1 OpenMP thread(s) per MPI task
|
||||||
|
# DPD Ionic Fluid
|
||||||
|
|
||||||
|
variable T equal 1.0
|
||||||
|
variable cut_DPD equal 1.0
|
||||||
|
variable seed equal 165412
|
||||||
|
variable lambda equal 0.25
|
||||||
|
variable cut_coul equal 2.0
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
# Initialize LAMMPS run for 3-d periodic
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
units lj
|
||||||
|
boundary p p p # periodic at all axes
|
||||||
|
atom_style full
|
||||||
|
dimension 3
|
||||||
|
|
||||||
|
bond_style none
|
||||||
|
angle_style none
|
||||||
|
dihedral_style none
|
||||||
|
improper_style none
|
||||||
|
|
||||||
|
newton on
|
||||||
|
comm_modify vel yes # store info of ghost atoms btw processors
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
# Box creation and configuration
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
# Define pair style and coefficients
|
||||||
|
pair_style dpd/coul/slater/long ${T} ${cut_DPD} ${seed} ${lambda} ${cut_coul}
|
||||||
|
pair_style dpd/coul/slater/long 1 ${cut_DPD} ${seed} ${lambda} ${cut_coul}
|
||||||
|
pair_style dpd/coul/slater/long 1 1 ${seed} ${lambda} ${cut_coul}
|
||||||
|
pair_style dpd/coul/slater/long 1 1 165412 ${lambda} ${cut_coul}
|
||||||
|
pair_style dpd/coul/slater/long 1 1 165412 0.25 ${cut_coul}
|
||||||
|
pair_style dpd/coul/slater/long 1 1 165412 0.25 2
|
||||||
|
|
||||||
|
read_data data.dpd_coul_slater_long
|
||||||
|
Reading data file ...
|
||||||
|
orthogonal box = (0 0 0) to (5 5 5)
|
||||||
|
1 by 1 by 1 MPI processor grid
|
||||||
|
reading atoms ...
|
||||||
|
375 atoms
|
||||||
|
reading velocities ...
|
||||||
|
375 velocities
|
||||||
|
Finding 1-2 1-3 1-4 neighbors ...
|
||||||
|
special bond factors lj: 0 0 0
|
||||||
|
special bond factors coul: 0 0 0
|
||||||
|
0 = max # of 1-2 neighbors
|
||||||
|
0 = max # of 1-3 neighbors
|
||||||
|
0 = max # of 1-4 neighbors
|
||||||
|
1 = max # of special neighbors
|
||||||
|
special bonds CPU = 0.000 seconds
|
||||||
|
read_data CPU = 0.003 seconds
|
||||||
|
|
||||||
|
# Enable long range electrostatics solver
|
||||||
|
kspace_style pppm 1e-04
|
||||||
|
|
||||||
|
# Construct neighbors every steps
|
||||||
|
neighbor 1.0 bin
|
||||||
|
neigh_modify every 1 delay 0 check yes
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
# Run the simulation
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
thermo_style custom step temp press vol evdwl ecoul elong pe ke fnorm fmax
|
||||||
|
thermo_modify norm no
|
||||||
|
thermo 100
|
||||||
|
|
||||||
|
timestep 0.01
|
||||||
|
run_style verlet
|
||||||
|
|
||||||
|
fix 1 all nve
|
||||||
|
|
||||||
|
run 1000
|
||||||
|
PPPM initialization ...
|
||||||
|
using 12-bit tables for long-range coulomb (src/kspace.cpp:342)
|
||||||
|
G vector (1/distance) = 1.4828454
|
||||||
|
grid = 20 20 20
|
||||||
|
stencil order = 5
|
||||||
|
estimated absolute RMS force accuracy = 7.7240141e-05
|
||||||
|
estimated relative force accuracy = 7.7240141e-05
|
||||||
|
using double precision FFTW3
|
||||||
|
3d grid and FFT values/proc = 24389 8000
|
||||||
|
Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule
|
||||||
|
Neighbor list info ...
|
||||||
|
update: every = 1 steps, delay = 0 steps, check = yes
|
||||||
|
max neighbors/atom: 2000, page size: 100000
|
||||||
|
master list distance cutoff = 3
|
||||||
|
ghost atom cutoff = 3
|
||||||
|
binsize = 1.5, bins = 4 4 4
|
||||||
|
1 neighbor lists, perpetual/occasional/extra = 1 0 0
|
||||||
|
(1) pair dpd/coul/slater/long, perpetual
|
||||||
|
attributes: half, newton on
|
||||||
|
pair build: half/bin/newton
|
||||||
|
stencil: half/bin/3d
|
||||||
|
bin: standard
|
||||||
|
Per MPI rank memory allocation (min/avg/max) = 8.359 | 8.359 | 8.359 Mbytes
|
||||||
|
Step Temp Press Volume E_vdwl E_coul E_long PotEng KinEng Fnorm Fmax
|
||||||
|
0 0.9849949 69.271905 125 4673.0443 0 -30.365103 4642.6792 552.58214 646.76798 65.851035
|
||||||
|
100 1.0614027 69.794624 125 4659.0139 0 -31.906319 4627.1075 595.44692 612.94396 60.338653
|
||||||
|
200 0.9422517 68.721098 125 4687.8862 0 -33.81531 4654.0709 528.6032 620.25627 62.726994
|
||||||
|
300 0.8956649 69.323482 125 4721.0824 0 -33.854275 4687.2281 502.46801 670.22699 73.087908
|
||||||
|
400 0.99584547 69.670416 125 4713.9086 0 -30.783633 4683.125 558.66931 607.65881 59.224652
|
||||||
|
500 1.0565931 69.497816 125 4701.2584 0 -26.80545 4674.4529 592.74873 646.18907 71.398122
|
||||||
|
600 1.0071523 70.26222 125 4659.2061 0 -29.98909 4629.217 565.01243 630.00244 58.264115
|
||||||
|
700 1.0507355 67.920078 125 4695.255 0 -32.649209 4662.6058 589.46259 651.80459 70.573524
|
||||||
|
800 0.98561942 68.279591 125 4745.7603 0 -28.98491 4716.7754 552.9325 627.14371 67.196483
|
||||||
|
900 0.96470105 70.742864 125 4706.3605 0 -30.271633 4676.0889 541.19729 644.43036 79.474998
|
||||||
|
1000 1.0204819 70.164419 125 4654.6077 0 -27.797433 4626.8103 572.49035 624.19728 71.825307
|
||||||
|
Loop time of 2.10153 on 1 procs for 1000 steps with 375 atoms
|
||||||
|
|
||||||
|
Performance: 411128.483 tau/day, 475.843 timesteps/s, 178.441 katom-step/s
|
||||||
|
99.7% CPU use with 1 MPI tasks x 1 OpenMP threads
|
||||||
|
|
||||||
|
MPI task timing breakdown:
|
||||||
|
Section | min time | avg time | max time |%varavg| %total
|
||||||
|
---------------------------------------------------------------
|
||||||
|
Pair | 1.1779 | 1.1779 | 1.1779 | 0.0 | 56.05
|
||||||
|
Bond | 6.507e-05 | 6.507e-05 | 6.507e-05 | 0.0 | 0.00
|
||||||
|
Kspace | 0.74636 | 0.74636 | 0.74636 | 0.0 | 35.51
|
||||||
|
Neigh | 0.12903 | 0.12903 | 0.12903 | 0.0 | 6.14
|
||||||
|
Comm | 0.039726 | 0.039726 | 0.039726 | 0.0 | 1.89
|
||||||
|
Output | 0.00027587 | 0.00027587 | 0.00027587 | 0.0 | 0.01
|
||||||
|
Modify | 0.0037596 | 0.0037596 | 0.0037596 | 0.0 | 0.18
|
||||||
|
Other | | 0.004451 | | | 0.21
|
||||||
|
|
||||||
|
Nlocal: 375 ave 375 max 375 min
|
||||||
|
Histogram: 1 0 0 0 0 0 0 0 0 0
|
||||||
|
Nghost: 3613 ave 3613 max 3613 min
|
||||||
|
Histogram: 1 0 0 0 0 0 0 0 0 0
|
||||||
|
Neighs: 62354 ave 62354 max 62354 min
|
||||||
|
Histogram: 1 0 0 0 0 0 0 0 0 0
|
||||||
|
|
||||||
|
Total # of neighbors = 62354
|
||||||
|
Ave neighs/atom = 166.27733
|
||||||
|
Ave special neighs/atom = 0
|
||||||
|
Neighbor list builds = 65
|
||||||
|
Dangerous builds = 0
|
||||||
|
|
||||||
|
unfix 1
|
||||||
|
|
||||||
|
Total wall time: 0:00:02
|
||||||
@ -0,0 +1,147 @@
|
|||||||
|
LAMMPS (17 Apr 2024 - Development - patch_17Apr2024-262-g0aff26705c-modified)
|
||||||
|
OMP_NUM_THREADS environment is not set. Defaulting to 1 thread. (src/comm.cpp:98)
|
||||||
|
using 1 OpenMP thread(s) per MPI task
|
||||||
|
# DPD Ionic Fluid
|
||||||
|
|
||||||
|
variable T equal 1.0
|
||||||
|
variable cut_DPD equal 1.0
|
||||||
|
variable seed equal 165412
|
||||||
|
variable lambda equal 0.25
|
||||||
|
variable cut_coul equal 2.0
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
# Initialize LAMMPS run for 3-d periodic
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
units lj
|
||||||
|
boundary p p p # periodic at all axes
|
||||||
|
atom_style full
|
||||||
|
dimension 3
|
||||||
|
|
||||||
|
bond_style none
|
||||||
|
angle_style none
|
||||||
|
dihedral_style none
|
||||||
|
improper_style none
|
||||||
|
|
||||||
|
newton on
|
||||||
|
comm_modify vel yes # store info of ghost atoms btw processors
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
# Box creation and configuration
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
# Define pair style and coefficients
|
||||||
|
pair_style dpd/coul/slater/long ${T} ${cut_DPD} ${seed} ${lambda} ${cut_coul}
|
||||||
|
pair_style dpd/coul/slater/long 1 ${cut_DPD} ${seed} ${lambda} ${cut_coul}
|
||||||
|
pair_style dpd/coul/slater/long 1 1 ${seed} ${lambda} ${cut_coul}
|
||||||
|
pair_style dpd/coul/slater/long 1 1 165412 ${lambda} ${cut_coul}
|
||||||
|
pair_style dpd/coul/slater/long 1 1 165412 0.25 ${cut_coul}
|
||||||
|
pair_style dpd/coul/slater/long 1 1 165412 0.25 2
|
||||||
|
|
||||||
|
read_data data.dpd_coul_slater_long
|
||||||
|
Reading data file ...
|
||||||
|
orthogonal box = (0 0 0) to (5 5 5)
|
||||||
|
1 by 2 by 2 MPI processor grid
|
||||||
|
reading atoms ...
|
||||||
|
375 atoms
|
||||||
|
reading velocities ...
|
||||||
|
375 velocities
|
||||||
|
Finding 1-2 1-3 1-4 neighbors ...
|
||||||
|
special bond factors lj: 0 0 0
|
||||||
|
special bond factors coul: 0 0 0
|
||||||
|
0 = max # of 1-2 neighbors
|
||||||
|
0 = max # of 1-3 neighbors
|
||||||
|
0 = max # of 1-4 neighbors
|
||||||
|
1 = max # of special neighbors
|
||||||
|
special bonds CPU = 0.000 seconds
|
||||||
|
read_data CPU = 0.003 seconds
|
||||||
|
|
||||||
|
# Enable long range electrostatics solver
|
||||||
|
kspace_style pppm 1e-04
|
||||||
|
|
||||||
|
# Construct neighbors every steps
|
||||||
|
neighbor 1.0 bin
|
||||||
|
neigh_modify every 1 delay 0 check yes
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
# Run the simulation
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
thermo_style custom step temp press vol evdwl ecoul elong pe ke fnorm fmax
|
||||||
|
thermo_modify norm no
|
||||||
|
thermo 100
|
||||||
|
|
||||||
|
timestep 0.01
|
||||||
|
run_style verlet
|
||||||
|
|
||||||
|
fix 1 all nve
|
||||||
|
|
||||||
|
run 1000
|
||||||
|
PPPM initialization ...
|
||||||
|
using 12-bit tables for long-range coulomb (src/kspace.cpp:342)
|
||||||
|
G vector (1/distance) = 1.4828454
|
||||||
|
grid = 20 20 20
|
||||||
|
stencil order = 5
|
||||||
|
estimated absolute RMS force accuracy = 7.7240141e-05
|
||||||
|
estimated relative force accuracy = 7.7240141e-05
|
||||||
|
using double precision FFTW3
|
||||||
|
3d grid and FFT values/proc = 10469 2000
|
||||||
|
Generated 0 of 3 mixed pair_coeff terms from geometric mixing rule
|
||||||
|
Neighbor list info ...
|
||||||
|
update: every = 1 steps, delay = 0 steps, check = yes
|
||||||
|
max neighbors/atom: 2000, page size: 100000
|
||||||
|
master list distance cutoff = 3
|
||||||
|
ghost atom cutoff = 3
|
||||||
|
binsize = 1.5, bins = 4 4 4
|
||||||
|
1 neighbor lists, perpetual/occasional/extra = 1 0 0
|
||||||
|
(1) pair dpd/coul/slater/long, perpetual
|
||||||
|
attributes: half, newton on
|
||||||
|
pair build: half/bin/newton
|
||||||
|
stencil: half/bin/3d
|
||||||
|
bin: standard
|
||||||
|
Per MPI rank memory allocation (min/avg/max) = 7.208 | 7.208 | 7.209 Mbytes
|
||||||
|
Step Temp Press Volume E_vdwl E_coul E_long PotEng KinEng Fnorm Fmax
|
||||||
|
0 0.9849949 69.076433 125 4673.0443 0 -30.365103 4642.6792 552.58214 613.18374 70.700582
|
||||||
|
100 0.95374867 69.110009 125 4681.1097 0 -31.260804 4649.8489 535.053 629.95109 62.05418
|
||||||
|
200 1.0076152 69.824904 125 4670.7458 0 -28.382203 4642.3636 565.27213 656.8501 72.049813
|
||||||
|
300 1.0014752 69.666331 125 4696.454 0 -26.943577 4669.5105 561.8276 631.49861 74.737274
|
||||||
|
400 0.98863876 69.731774 125 4700.7552 0 -23.816077 4676.9391 554.62634 637.74742 68.928573
|
||||||
|
500 0.95782852 68.588075 125 4698.588 0 -29.249543 4669.3385 537.3418 646.31897 68.800569
|
||||||
|
600 0.97443232 70.864079 125 4674.8821 0 -26.415644 4648.4664 546.65653 606.50755 78.664429
|
||||||
|
700 0.98783988 68.908299 125 4692.5536 0 -28.092022 4664.4616 554.17817 638.98401 69.691814
|
||||||
|
800 0.98000145 69.83977 125 4706.6365 0 -29.648365 4676.9881 549.78082 626.84362 73.133934
|
||||||
|
900 1.0526251 69.466078 125 4671.9648 0 -30.941117 4641.0237 590.52269 618.1049 62.333546
|
||||||
|
1000 0.98340746 69.527121 125 4728.2894 0 -31.869907 4696.4195 551.69159 630.14208 61.392611
|
||||||
|
Loop time of 0.928543 on 4 procs for 1000 steps with 375 atoms
|
||||||
|
|
||||||
|
Performance: 930490.137 tau/day, 1076.956 timesteps/s, 403.859 katom-step/s
|
||||||
|
98.9% CPU use with 4 MPI tasks x 1 OpenMP threads
|
||||||
|
|
||||||
|
MPI task timing breakdown:
|
||||||
|
Section | min time | avg time | max time |%varavg| %total
|
||||||
|
---------------------------------------------------------------
|
||||||
|
Pair | 0.30761 | 0.34974 | 0.38864 | 4.9 | 37.67
|
||||||
|
Bond | 8.4633e-05 | 9.0539e-05 | 9.9184e-05 | 0.0 | 0.01
|
||||||
|
Kspace | 0.39038 | 0.42976 | 0.47215 | 4.4 | 46.28
|
||||||
|
Neigh | 0.033986 | 0.035576 | 0.036791 | 0.5 | 3.83
|
||||||
|
Comm | 0.10247 | 0.10324 | 0.10481 | 0.3 | 11.12
|
||||||
|
Output | 0.00024145 | 0.00027404 | 0.00036867 | 0.0 | 0.03
|
||||||
|
Modify | 0.0022402 | 0.0025068 | 0.0026343 | 0.3 | 0.27
|
||||||
|
Other | | 0.007356 | | | 0.79
|
||||||
|
|
||||||
|
Nlocal: 93.75 ave 96 max 93 min
|
||||||
|
Histogram: 3 0 0 0 0 0 0 0 0 1
|
||||||
|
Nghost: 2289.75 ave 2317 max 2271 min
|
||||||
|
Histogram: 1 1 0 0 1 0 0 0 0 1
|
||||||
|
Neighs: 15590.2 ave 16765 max 14540 min
|
||||||
|
Histogram: 1 0 1 0 0 1 0 0 0 1
|
||||||
|
|
||||||
|
Total # of neighbors = 62361
|
||||||
|
Ave neighs/atom = 166.296
|
||||||
|
Ave special neighs/atom = 0
|
||||||
|
Neighbor list builds = 64
|
||||||
|
Dangerous builds = 0
|
||||||
|
|
||||||
|
unfix 1
|
||||||
|
|
||||||
|
Total wall time: 0:00:00
|
||||||
@ -57,7 +57,7 @@ int BaseDPDT::init_atomic(const int nlocal, const int nall,
|
|||||||
const double cell_size, const double gpu_split,
|
const double cell_size, const double gpu_split,
|
||||||
FILE *_screen, const void *pair_program,
|
FILE *_screen, const void *pair_program,
|
||||||
const char *k_name, const int onetype,
|
const char *k_name, const int onetype,
|
||||||
const int extra_fields) {
|
const int extra_fields, bool need_charges) {
|
||||||
screen=_screen;
|
screen=_screen;
|
||||||
|
|
||||||
int gpu_nbor=0;
|
int gpu_nbor=0;
|
||||||
@ -73,7 +73,7 @@ int BaseDPDT::init_atomic(const int nlocal, const int nall,
|
|||||||
|
|
||||||
_threads_per_atom=device->threads_per_atom();
|
_threads_per_atom=device->threads_per_atom();
|
||||||
|
|
||||||
bool charge = false;
|
bool charge = need_charges;
|
||||||
bool rot = false;
|
bool rot = false;
|
||||||
bool vel = true;
|
bool vel = true;
|
||||||
_extra_fields = extra_fields;
|
_extra_fields = extra_fields;
|
||||||
|
|||||||
@ -53,7 +53,8 @@ class BaseDPD {
|
|||||||
const int maxspecial, const double cell_size,
|
const int maxspecial, const double cell_size,
|
||||||
const double gpu_split, FILE *screen,
|
const double gpu_split, FILE *screen,
|
||||||
const void *pair_program, const char *k_name,
|
const void *pair_program, const char *k_name,
|
||||||
const int onetype=0, const int extra_fields=0);
|
const int onetype=0, const int extra_fields=0,
|
||||||
|
bool need_charges=false);
|
||||||
|
|
||||||
/// Estimate the overhead for GPU context changes and CPU driver
|
/// Estimate the overhead for GPU context changes and CPU driver
|
||||||
void estimate_gpu_overhead();
|
void estimate_gpu_overhead();
|
||||||
|
|||||||
238
lib/gpu/lal_dpd_coul_slater_long.cpp
Normal file
238
lib/gpu/lal_dpd_coul_slater_long.cpp
Normal file
@ -0,0 +1,238 @@
|
|||||||
|
/***************************************************************************
|
||||||
|
lal_dpd_coul_slater_long.cpp
|
||||||
|
-------------------
|
||||||
|
Eddy BARRAUD (IFPEN/Sorbonne)
|
||||||
|
|
||||||
|
Class for acceleration of the dpd/coul/slater/long pair style.
|
||||||
|
|
||||||
|
__________________________________________________________________________
|
||||||
|
This file is part of the LAMMPS Accelerator Library (LAMMPS_AL)
|
||||||
|
__________________________________________________________________________
|
||||||
|
|
||||||
|
begin : May 28, 2024
|
||||||
|
email : eddy.barraud@outlook.fr
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#if defined(USE_OPENCL)
|
||||||
|
#include "dpd_coul_slater_long_cl.h"
|
||||||
|
#elif defined(USE_CUDART)
|
||||||
|
const char *dpd_coul_slater_long=0;
|
||||||
|
#else
|
||||||
|
#include "dpd_coul_slater_long_cubin.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "lal_dpd_coul_slater_long.h"
|
||||||
|
#include <cassert>
|
||||||
|
namespace LAMMPS_AL {
|
||||||
|
#define DPDCoulSlaterLongT DPDCoulSlaterLong<numtyp, acctyp>
|
||||||
|
|
||||||
|
extern Device<PRECISION,ACC_PRECISION> device;
|
||||||
|
|
||||||
|
template <class numtyp, class acctyp>
|
||||||
|
DPDCoulSlaterLongT::DPDCoulSlaterLong() : BaseDPD<numtyp,acctyp>(), _allocated(false) {
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class numtyp, class acctyp>
|
||||||
|
DPDCoulSlaterLongT::~DPDCoulSlaterLong() {
|
||||||
|
clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class numtyp, class acctyp>
|
||||||
|
int DPDCoulSlaterLongT::bytes_per_atom(const int max_nbors) const {
|
||||||
|
return this->bytes_per_atom_atomic(max_nbors);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class numtyp, class acctyp>
|
||||||
|
int DPDCoulSlaterLongT::init(const int ntypes,
|
||||||
|
double **host_cutsq, double **host_a0,
|
||||||
|
double **host_gamma, double **host_sigma,
|
||||||
|
double **host_cut_dpd, double **host_cut_dpdsq,
|
||||||
|
double **host_cut_slatersq, double *host_special_lj,
|
||||||
|
const bool tstat_only,
|
||||||
|
const int nlocal, const int nall,
|
||||||
|
const int max_nbors, const int maxspecial,
|
||||||
|
const double cell_size,
|
||||||
|
const double gpu_split, FILE *_screen, double *host_special_coul,
|
||||||
|
const double qqrd2e, const double g_ewald, double lamda) {
|
||||||
|
const int max_shared_types=this->device->max_shared_types();
|
||||||
|
|
||||||
|
int onetype=0;
|
||||||
|
#ifdef USE_OPENCL
|
||||||
|
if (maxspecial==0)
|
||||||
|
for (int i=1; i<ntypes; i++)
|
||||||
|
for (int j=i; j<ntypes; j++)
|
||||||
|
if (host_cutsq[i][j]>0) {
|
||||||
|
if (onetype>0)
|
||||||
|
onetype=-1;
|
||||||
|
else if (onetype==0)
|
||||||
|
onetype=i*max_shared_types+j;
|
||||||
|
}
|
||||||
|
if (onetype<0) onetype=0;
|
||||||
|
#endif
|
||||||
|
int extra_fields = 4; // round up to accomodate quadruples of numtyp values
|
||||||
|
// q
|
||||||
|
int success;
|
||||||
|
bool need_charges = true;
|
||||||
|
success=this->init_atomic(nlocal,nall,max_nbors,maxspecial,cell_size,
|
||||||
|
gpu_split,_screen,dpd_coul_slater_long,"k_dpd_coul_slater_long",onetype, extra_fields, need_charges);
|
||||||
|
|
||||||
|
if (success!=0)
|
||||||
|
return success;
|
||||||
|
|
||||||
|
// If atom type constants fit in shared memory use fast kernel
|
||||||
|
int lj_types=ntypes;
|
||||||
|
shared_types=false;
|
||||||
|
if (lj_types<=max_shared_types && this->_block_size>=max_shared_types) {
|
||||||
|
lj_types=max_shared_types;
|
||||||
|
shared_types=true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Allocate a host write buffer for data initialization
|
||||||
|
UCL_H_Vec<numtyp> host_write_coul(lj_types*lj_types*32,*(this->ucl_device),
|
||||||
|
UCL_WRITE_ONLY);
|
||||||
|
sp_cl.alloc(4,*(this->ucl_device),UCL_READ_ONLY);
|
||||||
|
for (int i=0; i<4; i++) {
|
||||||
|
host_write_coul[i]=host_special_coul[i];
|
||||||
|
}
|
||||||
|
ucl_copy(sp_cl,host_write_coul,4,false);
|
||||||
|
|
||||||
|
_lj_types=lj_types;
|
||||||
|
_qqrd2e=qqrd2e;
|
||||||
|
_g_ewald=g_ewald;
|
||||||
|
_lamda=lamda;
|
||||||
|
|
||||||
|
// Allocate a host write buffer for data initialization
|
||||||
|
UCL_H_Vec<numtyp> host_write(lj_types*lj_types*32,*(this->ucl_device),
|
||||||
|
UCL_WRITE_ONLY);
|
||||||
|
|
||||||
|
for (int i=0; i<lj_types*lj_types; i++)
|
||||||
|
host_write[i]=0.0;
|
||||||
|
|
||||||
|
coeff.alloc(lj_types*lj_types,*(this->ucl_device),UCL_READ_ONLY);
|
||||||
|
this->atom->type_pack4(ntypes,lj_types,coeff,host_write,host_a0,host_gamma,
|
||||||
|
host_sigma,host_cut_dpd);
|
||||||
|
|
||||||
|
cutsq.alloc(lj_types*lj_types,*(this->ucl_device),UCL_READ_ONLY);
|
||||||
|
this->atom->type_pack4(ntypes,lj_types,cutsq,host_write,host_cutsq,
|
||||||
|
host_cut_dpdsq,host_cut_slatersq);
|
||||||
|
|
||||||
|
double special_sqrt[4];
|
||||||
|
special_sqrt[0] = sqrt(host_special_lj[0]);
|
||||||
|
special_sqrt[1] = sqrt(host_special_lj[1]);
|
||||||
|
special_sqrt[2] = sqrt(host_special_lj[2]);
|
||||||
|
special_sqrt[3] = sqrt(host_special_lj[3]);
|
||||||
|
|
||||||
|
UCL_H_Vec<double> dview;
|
||||||
|
sp_lj.alloc(4,*(this->ucl_device),UCL_READ_ONLY);
|
||||||
|
dview.view(host_special_lj,4,*(this->ucl_device));
|
||||||
|
ucl_copy(sp_lj,dview,false);
|
||||||
|
sp_sqrt.alloc(4,*(this->ucl_device),UCL_READ_ONLY);
|
||||||
|
dview.view(special_sqrt,4,*(this->ucl_device));
|
||||||
|
ucl_copy(sp_sqrt,dview,false);
|
||||||
|
|
||||||
|
_tstat_only = 0;
|
||||||
|
if (tstat_only) _tstat_only=1;
|
||||||
|
|
||||||
|
_allocated=true;
|
||||||
|
this->_max_bytes=coeff.row_bytes()+cutsq.row_bytes()+sp_lj.row_bytes()+sp_sqrt.row_bytes();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class numtyp, class acctyp>
|
||||||
|
void DPDCoulSlaterLongT::clear() {
|
||||||
|
if (!_allocated)
|
||||||
|
return;
|
||||||
|
_allocated=false;
|
||||||
|
|
||||||
|
coeff.clear();
|
||||||
|
cutsq.clear();
|
||||||
|
sp_lj.clear();
|
||||||
|
sp_sqrt.clear();
|
||||||
|
this->clear_atomic();
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class numtyp, class acctyp>
|
||||||
|
double DPDCoulSlaterLongT::host_memory_usage() const {
|
||||||
|
return this->host_memory_usage_atomic()+sizeof(DPDCoulSlaterLong<numtyp,acctyp>);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ---------------------------------------------------------------------------
|
||||||
|
// Calculate energies, forces, and torques
|
||||||
|
// ---------------------------------------------------------------------------
|
||||||
|
template <class numtyp, class acctyp>
|
||||||
|
int DPDCoulSlaterLongT::loop(const int eflag, const int vflag) {
|
||||||
|
|
||||||
|
int nall = this->atom->nall();
|
||||||
|
// signal that we need to transfer extra data from the host
|
||||||
|
|
||||||
|
this->atom->extra_data_unavail();
|
||||||
|
|
||||||
|
numtyp4 *pextra=reinterpret_cast<numtyp4*>(&(this->atom->extra[0]));
|
||||||
|
|
||||||
|
int n = 0;
|
||||||
|
int nstride = 1;
|
||||||
|
for (int i = 0; i < nall; i++) {
|
||||||
|
int idx = n+i*nstride;
|
||||||
|
numtyp4 v;
|
||||||
|
v.x = q[i];
|
||||||
|
v.y = 0;
|
||||||
|
v.z = 0;
|
||||||
|
v.w = 0;
|
||||||
|
pextra[idx] = v;
|
||||||
|
}
|
||||||
|
this->atom->add_extra_data();
|
||||||
|
|
||||||
|
// Compute the block size and grid size to keep all cores busy
|
||||||
|
const int BX=this->block_size();
|
||||||
|
int GX=static_cast<int>(ceil(static_cast<double>(this->ans->inum())/
|
||||||
|
(BX/this->_threads_per_atom)));
|
||||||
|
|
||||||
|
int ainum=this->ans->inum();
|
||||||
|
int nbor_pitch=this->nbor->nbor_pitch();
|
||||||
|
this->time_pair.start();
|
||||||
|
if (shared_types) {
|
||||||
|
this->k_pair_sel->set_size(GX,BX);
|
||||||
|
this->k_pair_sel->run(&this->atom->x, &this->atom->extra, &coeff, &sp_lj, &sp_cl, &sp_sqrt,
|
||||||
|
&this->nbor->dev_nbor, &this->_nbor_data->begin(),
|
||||||
|
&this->ans->force, &this->ans->engv, &eflag,
|
||||||
|
&vflag, &ainum, &nbor_pitch, &this->atom->v, &cutsq,
|
||||||
|
&this->_dtinvsqrt, &this->_seed, &this->_timestep,
|
||||||
|
&_qqrd2e, &_g_ewald, &_lamda,
|
||||||
|
&this->_tstat_only, &this->_threads_per_atom);
|
||||||
|
} else {
|
||||||
|
this->k_pair.set_size(GX,BX);
|
||||||
|
this->k_pair.run(&this->atom->x, &this->atom->extra, &coeff, &_lj_types, &sp_lj, &sp_cl, &sp_sqrt,
|
||||||
|
&this->nbor->dev_nbor, &this->_nbor_data->begin(),
|
||||||
|
&this->ans->force, &this->ans->engv, &eflag, &vflag,
|
||||||
|
&ainum, &nbor_pitch, &this->atom->v, &cutsq, &this->_dtinvsqrt,
|
||||||
|
&this->_seed, &this->_timestep,
|
||||||
|
&_qqrd2e, &_g_ewald, &_lamda,
|
||||||
|
&this->_tstat_only, &this->_threads_per_atom);
|
||||||
|
}
|
||||||
|
this->time_pair.stop();
|
||||||
|
return GX;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class numtyp, class acctyp>
|
||||||
|
void DPDCoulSlaterLongT::update_coeff(int ntypes, double **host_a0, double **host_gamma,
|
||||||
|
double **host_sigma, double **host_cut_dpd)
|
||||||
|
{
|
||||||
|
UCL_H_Vec<numtyp> host_write(_lj_types*_lj_types*32,*(this->ucl_device),
|
||||||
|
UCL_WRITE_ONLY);
|
||||||
|
this->atom->type_pack4(ntypes,_lj_types,coeff,host_write,host_a0,host_gamma,
|
||||||
|
host_sigma,host_cut_dpd);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ---------------------------------------------------------------------------
|
||||||
|
// Get the extra data pointers from host
|
||||||
|
// ---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
template <class numtyp, class acctyp>
|
||||||
|
void DPDCoulSlaterLongT::get_extra_data(double *host_q) {
|
||||||
|
q = host_q;
|
||||||
|
}
|
||||||
|
|
||||||
|
template class DPDCoulSlaterLong<PRECISION,ACC_PRECISION>;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
523
lib/gpu/lal_dpd_coul_slater_long.cu
Normal file
523
lib/gpu/lal_dpd_coul_slater_long.cu
Normal file
@ -0,0 +1,523 @@
|
|||||||
|
// **************************************************************************
|
||||||
|
// dpd.cu
|
||||||
|
// -------------------
|
||||||
|
// Eddy BARRAUD (IFPEN/Sorbonne)
|
||||||
|
// Trung Dac Nguyen (U Chicago)
|
||||||
|
//
|
||||||
|
// Device code for acceleration of the dpd/coul/slater/long pair style
|
||||||
|
//
|
||||||
|
// __________________________________________________________________________
|
||||||
|
// This file is part of the LAMMPS Accelerator Library (LAMMPS_AL)
|
||||||
|
// __________________________________________________________________________
|
||||||
|
//
|
||||||
|
// begin : May 28, 2024
|
||||||
|
// email : eddy.barraud@outlook.fr
|
||||||
|
// ***************************************************************************
|
||||||
|
|
||||||
|
#if defined(NV_KERNEL) || defined(USE_HIP)
|
||||||
|
#include "lal_aux_fun1.h"
|
||||||
|
#ifndef _DOUBLE_DOUBLE
|
||||||
|
_texture( pos_tex,float4);
|
||||||
|
_texture( vel_tex,float4);
|
||||||
|
#else
|
||||||
|
_texture_2d( pos_tex,int4);
|
||||||
|
_texture_2d( vel_tex,int4);
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
#define pos_tex x_
|
||||||
|
#define vel_tex v_
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define EPSILON (numtyp)1.0e-10
|
||||||
|
|
||||||
|
//#define _USE_UNIFORM_SARU_LCG
|
||||||
|
//#define _USE_UNIFORM_SARU_TEA8
|
||||||
|
//#define _USE_GAUSSIAN_SARU_LCG
|
||||||
|
|
||||||
|
#if !defined(_USE_UNIFORM_SARU_LCG) && !defined(_USE_UNIFORM_SARU_TEA8) && !defined(_USE_GAUSSIAN_SARU_LCG)
|
||||||
|
#define _USE_UNIFORM_SARU_LCG
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// References:
|
||||||
|
// 1. Y. Afshar, F. Schmid, A. Pishevar, S. Worley, Comput. Phys. Comm. 184 (2013), 1119–1128.
|
||||||
|
// 2. C. L. Phillips, J. A. Anderson, S. C. Glotzer, Comput. Phys. Comm. 230 (2011), 7191-7201.
|
||||||
|
// PRNG period = 3666320093*2^32 ~ 2^64 ~ 10^19
|
||||||
|
|
||||||
|
#define LCGA 0x4beb5d59 /* Full period 32 bit LCG */
|
||||||
|
#define LCGC 0x2600e1f7
|
||||||
|
#define oWeylPeriod 0xda879add /* Prime period 3666320093 */
|
||||||
|
#define oWeylOffset 0x8009d14b
|
||||||
|
#define TWO_N32 0.232830643653869628906250e-9f /* 2^-32 */
|
||||||
|
|
||||||
|
// specifically implemented for steps = 1; high = 1.0; low = -1.0
|
||||||
|
// returns uniformly distributed random numbers u in [-1.0;1.0]
|
||||||
|
// using the inherent LCG, then multiply u with sqrt(3) to "match"
|
||||||
|
// with a normal random distribution.
|
||||||
|
// Afshar et al. mutlplies u in [-0.5;0.5] with sqrt(12)
|
||||||
|
// Curly brackets to make variables local to the scope.
|
||||||
|
#ifdef _USE_UNIFORM_SARU_LCG
|
||||||
|
#define SQRT3 (numtyp)1.7320508075688772935274463
|
||||||
|
#define saru(seed1, seed2, seed, timestep, randnum) { \
|
||||||
|
unsigned int seed3 = seed + timestep; \
|
||||||
|
seed3^=(seed1<<7)^(seed2>>6); \
|
||||||
|
seed2+=(seed1>>4)^(seed3>>15); \
|
||||||
|
seed1^=(seed2<<9)+(seed3<<8); \
|
||||||
|
seed3^=0xA5366B4D*((seed2>>11) ^ (seed1<<1)); \
|
||||||
|
seed2+=0x72BE1579*((seed1<<4) ^ (seed3>>16)); \
|
||||||
|
seed1^=0x3F38A6ED*((seed3>>5) ^ (((signed int)seed2)>>22)); \
|
||||||
|
seed2+=seed1*seed3; \
|
||||||
|
seed1+=seed3 ^ (seed2>>2); \
|
||||||
|
seed2^=((signed int)seed2)>>17; \
|
||||||
|
unsigned int state = 0x79dedea3*(seed1^(((signed int)seed1)>>14)); \
|
||||||
|
unsigned int wstate = (state + seed2) ^ (((signed int)state)>>8); \
|
||||||
|
state = state + (wstate*(wstate^0xdddf97f5)); \
|
||||||
|
wstate = 0xABCB96F7 + (wstate>>1); \
|
||||||
|
state = LCGA*state + LCGC; \
|
||||||
|
wstate = wstate + oWeylOffset+((((signed int)wstate)>>31) & oWeylPeriod); \
|
||||||
|
unsigned int v = (state ^ (state>>26)) + wstate; \
|
||||||
|
unsigned int s = (signed int)((v^(v>>20))*0x6957f5a7); \
|
||||||
|
randnum = SQRT3*(s*TWO_N32*(numtyp)2.0-(numtyp)1.0); \
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// specifically implemented for steps = 1; high = 1.0; low = -1.0
|
||||||
|
// returns uniformly distributed random numbers u in [-1.0;1.0] using TEA8
|
||||||
|
// then multiply u with sqrt(3) to "match" with a normal random distribution
|
||||||
|
// Afshar et al. mutlplies u in [-0.5;0.5] with sqrt(12)
|
||||||
|
#ifdef _USE_UNIFORM_SARU_TEA8
|
||||||
|
#define SQRT3 (numtyp)1.7320508075688772935274463
|
||||||
|
#define k0 0xA341316C
|
||||||
|
#define k1 0xC8013EA4
|
||||||
|
#define k2 0xAD90777D
|
||||||
|
#define k3 0x7E95761E
|
||||||
|
#define delta 0x9e3779b9
|
||||||
|
#define rounds 8
|
||||||
|
#define saru(seed1, seed2, seed, timestep, randnum) { \
|
||||||
|
unsigned int seed3 = seed + timestep; \
|
||||||
|
seed3^=(seed1<<7)^(seed2>>6); \
|
||||||
|
seed2+=(seed1>>4)^(seed3>>15); \
|
||||||
|
seed1^=(seed2<<9)+(seed3<<8); \
|
||||||
|
seed3^=0xA5366B4D*((seed2>>11) ^ (seed1<<1)); \
|
||||||
|
seed2+=0x72BE1579*((seed1<<4) ^ (seed3>>16)); \
|
||||||
|
seed1^=0x3F38A6ED*((seed3>>5) ^ (((signed int)seed2)>>22)); \
|
||||||
|
seed2+=seed1*seed3; \
|
||||||
|
seed1+=seed3 ^ (seed2>>2); \
|
||||||
|
seed2^=((signed int)seed2)>>17; \
|
||||||
|
unsigned int state = 0x79dedea3*(seed1^(((signed int)seed1)>>14)); \
|
||||||
|
unsigned int wstate = (state + seed2) ^ (((signed int)state)>>8); \
|
||||||
|
state = state + (wstate*(wstate^0xdddf97f5)); \
|
||||||
|
wstate = 0xABCB96F7 + (wstate>>1); \
|
||||||
|
unsigned int sum = 0; \
|
||||||
|
for (int i=0; i < rounds; i++) { \
|
||||||
|
sum += delta; \
|
||||||
|
state += ((wstate<<4) + k0)^(wstate + sum)^((wstate>>5) + k1); \
|
||||||
|
wstate += ((state<<4) + k2)^(state + sum)^((state>>5) + k3); \
|
||||||
|
} \
|
||||||
|
unsigned int v = (state ^ (state>>26)) + wstate; \
|
||||||
|
unsigned int s = (signed int)((v^(v>>20))*0x6957f5a7); \
|
||||||
|
randnum = SQRT3*(s*TWO_N32*(numtyp)2.0-(numtyp)1.0); \
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// specifically implemented for steps = 1; high = 1.0; low = -1.0
|
||||||
|
// returns two uniformly distributed random numbers r1 and r2 in [-1.0;1.0],
|
||||||
|
// and uses the polar method (Marsaglia's) to transform to a normal random value
|
||||||
|
// This is used to compared with CPU DPD using RandMars::gaussian()
|
||||||
|
#ifdef _USE_GAUSSIAN_SARU_LCG
|
||||||
|
#define saru(seed1, seed2, seed, timestep, randnum) { \
|
||||||
|
unsigned int seed3 = seed + timestep; \
|
||||||
|
seed3^=(seed1<<7)^(seed2>>6); \
|
||||||
|
seed2+=(seed1>>4)^(seed3>>15); \
|
||||||
|
seed1^=(seed2<<9)+(seed3<<8); \
|
||||||
|
seed3^=0xA5366B4D*((seed2>>11) ^ (seed1<<1)); \
|
||||||
|
seed2+=0x72BE1579*((seed1<<4) ^ (seed3>>16)); \
|
||||||
|
seed1^=0x3F38A6ED*((seed3>>5) ^ (((signed int)seed2)>>22)); \
|
||||||
|
seed2+=seed1*seed3; \
|
||||||
|
seed1+=seed3 ^ (seed2>>2); \
|
||||||
|
seed2^=((signed int)seed2)>>17; \
|
||||||
|
unsigned int state=0x12345678; \
|
||||||
|
unsigned int wstate=12345678; \
|
||||||
|
state = 0x79dedea3*(seed1^(((signed int)seed1)>>14)); \
|
||||||
|
wstate = (state + seed2) ^ (((signed int)state)>>8); \
|
||||||
|
state = state + (wstate*(wstate^0xdddf97f5)); \
|
||||||
|
wstate = 0xABCB96F7 + (wstate>>1); \
|
||||||
|
unsigned int v, s; \
|
||||||
|
numtyp r1, r2, rsq; \
|
||||||
|
while (1) { \
|
||||||
|
state = LCGA*state + LCGC; \
|
||||||
|
wstate = wstate + oWeylOffset+((((signed int)wstate)>>31) & oWeylPeriod); \
|
||||||
|
v = (state ^ (state>>26)) + wstate; \
|
||||||
|
s = (signed int)((v^(v>>20))*0x6957f5a7); \
|
||||||
|
r1 = s*TWO_N32*(numtyp)2.0-(numtyp)1.0; \
|
||||||
|
state = LCGA*state + LCGC; \
|
||||||
|
wstate = wstate + oWeylOffset+((((signed int)wstate)>>31) & oWeylPeriod); \
|
||||||
|
v = (state ^ (state>>26)) + wstate; \
|
||||||
|
s = (signed int)((v^(v>>20))*0x6957f5a7); \
|
||||||
|
r2 = s*TWO_N32*(numtyp)2.0-(numtyp)1.0; \
|
||||||
|
rsq = r1 * r1 + r2 * r2; \
|
||||||
|
if (rsq < (numtyp)1.0) break; \
|
||||||
|
} \
|
||||||
|
numtyp fac = ucl_sqrt((numtyp)-2.0*log(rsq)/rsq); \
|
||||||
|
randnum = r2*fac; \
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
__kernel void k_dpd_coul_slater_long(const __global numtyp4 *restrict x_,
|
||||||
|
const __global numtyp4 *restrict extra,
|
||||||
|
const __global numtyp4 *restrict coeff,
|
||||||
|
const int lj_types,
|
||||||
|
const __global numtyp *restrict sp_lj,
|
||||||
|
const __global numtyp *restrict sp_cl_in,
|
||||||
|
const __global numtyp *restrict sp_sqrt,
|
||||||
|
const __global int * dev_nbor,
|
||||||
|
const __global int * dev_packed,
|
||||||
|
__global acctyp3 *restrict ans,
|
||||||
|
__global acctyp *restrict engv,
|
||||||
|
const int eflag, const int vflag, const int inum,
|
||||||
|
const int nbor_pitch,
|
||||||
|
const __global numtyp4 *restrict v_,
|
||||||
|
const __global numtyp4 *restrict cutsq,
|
||||||
|
const numtyp dtinvsqrt, const int seed,
|
||||||
|
const int timestep, const numtyp qqrd2e,
|
||||||
|
const numtyp g_ewald, const numtyp lamda,
|
||||||
|
const int tstat_only,
|
||||||
|
const int t_per_atom) {
|
||||||
|
int tid, ii, offset;
|
||||||
|
atom_info(t_per_atom,ii,tid,offset);
|
||||||
|
|
||||||
|
__local numtyp sp_cl[4];
|
||||||
|
///local_allocate_store_charge();
|
||||||
|
|
||||||
|
sp_cl[0]=sp_cl_in[0];
|
||||||
|
sp_cl[1]=sp_cl_in[1];
|
||||||
|
sp_cl[2]=sp_cl_in[2];
|
||||||
|
sp_cl[3]=sp_cl_in[3];
|
||||||
|
|
||||||
|
int n_stride;
|
||||||
|
local_allocate_store_pair();
|
||||||
|
|
||||||
|
acctyp3 f;
|
||||||
|
f.x=(acctyp)0; f.y=(acctyp)0; f.z=(acctyp)0;
|
||||||
|
acctyp e_coul, energy, virial[6];
|
||||||
|
if (EVFLAG) {
|
||||||
|
energy=(acctyp)0;
|
||||||
|
e_coul=(acctyp)0;
|
||||||
|
for (int i=0; i<6; i++) virial[i]=(acctyp)0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ii<inum) {
|
||||||
|
int i, numj, nbor, nbor_end;
|
||||||
|
nbor_info(dev_nbor,dev_packed,nbor_pitch,t_per_atom,ii,offset,i,numj,
|
||||||
|
n_stride,nbor_end,nbor);
|
||||||
|
|
||||||
|
numtyp4 ix; fetch4(ix,i,pos_tex); //x_[i];
|
||||||
|
int itype=ix.w;
|
||||||
|
numtyp4 iv; fetch4(iv,i,vel_tex); //v_[i];
|
||||||
|
int itag=iv.w;
|
||||||
|
|
||||||
|
numtyp qtmp = extra[i].x; // q[i]
|
||||||
|
numtyp lamdainv = ucl_recip(lamda);
|
||||||
|
|
||||||
|
numtyp factor_dpd, factor_sqrt;
|
||||||
|
for ( ; nbor<nbor_end; nbor+=n_stride) {
|
||||||
|
ucl_prefetch(dev_packed+nbor+n_stride);
|
||||||
|
|
||||||
|
int j=dev_packed[nbor];
|
||||||
|
factor_dpd = sp_lj[sbmask(j)];
|
||||||
|
factor_sqrt = sp_sqrt[sbmask(j)];
|
||||||
|
numtyp factor_coul;
|
||||||
|
factor_coul = (numtyp)1.0-sp_cl[sbmask(j)];
|
||||||
|
j &= NEIGHMASK;
|
||||||
|
|
||||||
|
numtyp4 jx; fetch4(jx,j,pos_tex); //x_[j];
|
||||||
|
int jtype=jx.w;
|
||||||
|
numtyp4 jv; fetch4(jv,j,vel_tex); //v_[j];
|
||||||
|
int jtag=jv.w;
|
||||||
|
|
||||||
|
// Compute r12
|
||||||
|
numtyp delx = ix.x-jx.x;
|
||||||
|
numtyp dely = ix.y-jx.y;
|
||||||
|
numtyp delz = ix.z-jx.z;
|
||||||
|
numtyp rsq = delx*delx+dely*dely+delz*delz;
|
||||||
|
|
||||||
|
int mtype=itype*lj_types+jtype;
|
||||||
|
|
||||||
|
// cutsq[mtype].x -> global squared cutoff
|
||||||
|
if (rsq<cutsq[mtype].x) {
|
||||||
|
numtyp r=ucl_sqrt(rsq);
|
||||||
|
numtyp force_dpd = (numtyp)0.0;
|
||||||
|
numtyp force_coul = (numtyp)0.0;
|
||||||
|
|
||||||
|
// apply DPD force if distance below DPD cutoff
|
||||||
|
// cutsq[mtype].y -> DPD squared cutoff
|
||||||
|
if (rsq < cutsq[mtype].y && r > EPSILON) {
|
||||||
|
|
||||||
|
numtyp rinv=ucl_recip(r);
|
||||||
|
numtyp delvx = iv.x - jv.x;
|
||||||
|
numtyp delvy = iv.y - jv.y;
|
||||||
|
numtyp delvz = iv.z - jv.z;
|
||||||
|
numtyp dot = delx*delvx + dely*delvy + delz*delvz;
|
||||||
|
numtyp wd = (numtyp)1.0 - r/coeff[mtype].w;
|
||||||
|
|
||||||
|
unsigned int tag1=itag, tag2=jtag;
|
||||||
|
if (tag1 > tag2) {
|
||||||
|
tag1 = jtag; tag2 = itag;
|
||||||
|
}
|
||||||
|
|
||||||
|
numtyp randnum = (numtyp)0.0;
|
||||||
|
saru(tag1, tag2, seed, timestep, randnum);
|
||||||
|
|
||||||
|
// conservative force = a0 * wd, or 0 if tstat only
|
||||||
|
// drag force = -gamma * wd^2 * (delx dot delv) / r
|
||||||
|
// random force = sigma * wd * rnd * dtinvsqrt;
|
||||||
|
|
||||||
|
if (!tstat_only) force_dpd = coeff[mtype].x*wd;
|
||||||
|
force_dpd -= coeff[mtype].y*wd*wd*dot*rinv;
|
||||||
|
force_dpd *= factor_dpd;
|
||||||
|
force_dpd += factor_sqrt*coeff[mtype].z*wd*randnum*dtinvsqrt;
|
||||||
|
force_dpd *=rinv;
|
||||||
|
|
||||||
|
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
|
||||||
|
numtyp e = (numtyp)0.5*coeff[mtype].x*coeff[mtype].w * wd*wd;
|
||||||
|
energy += factor_dpd*e;
|
||||||
|
}
|
||||||
|
|
||||||
|
}// if cut_dpdsq
|
||||||
|
|
||||||
|
// apply Slater electrostatic force if distance below Slater cutoff
|
||||||
|
// and the two species have a slater coeff
|
||||||
|
// cutsq[mtype].z -> Coulombic squared cutoff
|
||||||
|
if ( cutsq[mtype].z != 0.0 && rsq < cutsq[mtype].z){
|
||||||
|
numtyp r2inv=ucl_recip(rsq);
|
||||||
|
numtyp _erfc;
|
||||||
|
numtyp grij = g_ewald * r;
|
||||||
|
numtyp expm2 = ucl_exp(-grij*grij);
|
||||||
|
numtyp t = ucl_recip((numtyp)1.0 + EWALD_P*grij);
|
||||||
|
_erfc = t * (A1+t*(A2+t*(A3+t*(A4+t*A5)))) * expm2;
|
||||||
|
numtyp prefactor = extra[j].x;
|
||||||
|
prefactor *= qqrd2e * cutsq[mtype].z * qtmp/r;
|
||||||
|
numtyp rlamdainv = r * lamdainv;
|
||||||
|
numtyp exprlmdainv = ucl_exp((numtyp)-2.0*rlamdainv);
|
||||||
|
numtyp slater_term = exprlmdainv*((numtyp)1.0 + ((numtyp)2.0*rlamdainv*((numtyp)1.0+rlamdainv)));
|
||||||
|
force_coul = prefactor*(_erfc + EWALD_F*grij*expm2-slater_term);
|
||||||
|
if (factor_coul > (numtyp)0) force_coul -= factor_coul*prefactor*((numtyp)1.0-slater_term);
|
||||||
|
force_coul *= r2inv;
|
||||||
|
|
||||||
|
if (EVFLAG && eflag) {
|
||||||
|
numtyp e_slater = ((numtyp)1.0 + rlamdainv)*exprlmdainv;
|
||||||
|
numtyp e = prefactor*(_erfc-e_slater);
|
||||||
|
if (factor_coul > (numtyp)0) e -= factor_coul*prefactor*((numtyp)1.0 - e_slater);
|
||||||
|
e_coul += e;
|
||||||
|
}
|
||||||
|
} // if cut_coulsq
|
||||||
|
|
||||||
|
numtyp force = force_coul + force_dpd;
|
||||||
|
f.x += delx*force;
|
||||||
|
f.y += dely*force;
|
||||||
|
f.z += delz*force;
|
||||||
|
|
||||||
|
if (EVFLAG && vflag) {
|
||||||
|
virial[0] += delx*delx*force;
|
||||||
|
virial[1] += dely*dely*force;
|
||||||
|
virial[2] += delz*delz*force;
|
||||||
|
virial[3] += delx*dely*force;
|
||||||
|
virial[4] += delx*delz*force;
|
||||||
|
virial[5] += dely*delz*force;
|
||||||
|
}
|
||||||
|
|
||||||
|
} // if cutsq
|
||||||
|
|
||||||
|
} // for nbor
|
||||||
|
} // if ii
|
||||||
|
store_answers_q(f,energy,e_coul,virial,ii,inum,tid,t_per_atom,offset,eflag,vflag,
|
||||||
|
ans,engv);
|
||||||
|
}
|
||||||
|
|
||||||
|
__kernel void k_dpd_coul_slater_long_fast(const __global numtyp4 *restrict x_,
|
||||||
|
const __global numtyp4 *restrict extra,
|
||||||
|
const __global numtyp4 *restrict coeff_in,
|
||||||
|
const __global numtyp *restrict sp_lj_in,
|
||||||
|
const __global numtyp *restrict sp_cl_in,
|
||||||
|
const __global numtyp *restrict sp_sqrt_in,
|
||||||
|
const __global int * dev_nbor,
|
||||||
|
const __global int * dev_packed,
|
||||||
|
__global acctyp3 *restrict ans,
|
||||||
|
__global acctyp *restrict engv,
|
||||||
|
const int eflag, const int vflag, const int inum,
|
||||||
|
const int nbor_pitch,
|
||||||
|
const __global numtyp4 *restrict v_,
|
||||||
|
const __global numtyp4 *restrict cutsq_in,
|
||||||
|
const numtyp dtinvsqrt, const int seed,
|
||||||
|
const int timestep, const numtyp qqrd2e,
|
||||||
|
const numtyp g_ewald, const numtyp lamda,
|
||||||
|
const int tstat_only,
|
||||||
|
const int t_per_atom) {
|
||||||
|
int tid, ii, offset;
|
||||||
|
atom_info(t_per_atom,ii,tid,offset);
|
||||||
|
|
||||||
|
__local numtyp4 coeff[MAX_SHARED_TYPES*MAX_SHARED_TYPES];
|
||||||
|
__local numtyp4 cutsq[MAX_SHARED_TYPES*MAX_SHARED_TYPES];
|
||||||
|
__local numtyp sp_lj[4];
|
||||||
|
__local numtyp sp_sqrt[4];
|
||||||
|
/// COUL Init
|
||||||
|
__local numtyp sp_cl[4];
|
||||||
|
if (tid<4) {
|
||||||
|
sp_lj[tid]=sp_lj_in[tid];
|
||||||
|
sp_sqrt[tid]=sp_sqrt_in[tid];
|
||||||
|
sp_cl[tid]=sp_cl_in[tid];
|
||||||
|
}
|
||||||
|
if (tid<MAX_SHARED_TYPES*MAX_SHARED_TYPES) {
|
||||||
|
coeff[tid]=coeff_in[tid];
|
||||||
|
cutsq[tid]=cutsq_in[tid];
|
||||||
|
}
|
||||||
|
|
||||||
|
__syncthreads();
|
||||||
|
|
||||||
|
|
||||||
|
int n_stride;
|
||||||
|
local_allocate_store_pair();
|
||||||
|
|
||||||
|
acctyp3 f;
|
||||||
|
f.x=(acctyp)0; f.y=(acctyp)0; f.z=(acctyp)0;
|
||||||
|
acctyp e_coul, energy, virial[6];
|
||||||
|
if (EVFLAG) {
|
||||||
|
energy=(acctyp)0;
|
||||||
|
e_coul=(acctyp)0;
|
||||||
|
for (int i=0; i<6; i++) virial[i]=(acctyp)0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ii<inum) {
|
||||||
|
int i, numj, nbor, nbor_end;
|
||||||
|
nbor_info(dev_nbor,dev_packed,nbor_pitch,t_per_atom,ii,offset,i,numj,
|
||||||
|
n_stride,nbor_end,nbor);
|
||||||
|
|
||||||
|
numtyp4 ix; fetch4(ix,i,pos_tex); //x_[i];
|
||||||
|
int iw=ix.w;
|
||||||
|
int itype=fast_mul((int)MAX_SHARED_TYPES,iw);
|
||||||
|
numtyp4 iv; fetch4(iv,i,vel_tex); //v_[i];
|
||||||
|
int itag=iv.w;
|
||||||
|
|
||||||
|
numtyp qtmp = extra[i].x; // q[i]
|
||||||
|
numtyp lamdainv = ucl_recip(lamda);
|
||||||
|
|
||||||
|
numtyp factor_dpd, factor_sqrt;
|
||||||
|
for ( ; nbor<nbor_end; nbor+=n_stride) {
|
||||||
|
ucl_prefetch(dev_packed+nbor+n_stride);
|
||||||
|
|
||||||
|
int j=dev_packed[nbor];
|
||||||
|
factor_dpd = sp_lj[sbmask(j)];
|
||||||
|
factor_sqrt = sp_sqrt[sbmask(j)];
|
||||||
|
numtyp factor_coul;
|
||||||
|
factor_coul = (numtyp)1.0-sp_cl[sbmask(j)];
|
||||||
|
j &= NEIGHMASK;
|
||||||
|
|
||||||
|
numtyp4 jx; fetch4(jx,j,pos_tex); //x_[j];
|
||||||
|
numtyp4 jv; fetch4(jv,j,vel_tex); //v_[j];
|
||||||
|
int jtag=jv.w;
|
||||||
|
|
||||||
|
// Compute r12
|
||||||
|
numtyp delx = ix.x-jx.x;
|
||||||
|
numtyp dely = ix.y-jx.y;
|
||||||
|
numtyp delz = ix.z-jx.z;
|
||||||
|
numtyp rsq = delx*delx+dely*dely+delz*delz;
|
||||||
|
|
||||||
|
int mtype=itype+jx.w;
|
||||||
|
|
||||||
|
/// cutsq.x = cutsq, cutsq.y = cut_dpdsq, cutsq.z = cut_slatersq
|
||||||
|
if (rsq<cutsq[mtype].x) {
|
||||||
|
numtyp r=ucl_sqrt(rsq);
|
||||||
|
numtyp force_dpd = (numtyp)0.0;
|
||||||
|
numtyp force_coul = (numtyp)0.0;
|
||||||
|
|
||||||
|
// apply DPD force if distance below DPD cutoff
|
||||||
|
// cutsq[mtype].y -> DPD squared cutoff
|
||||||
|
if (rsq < cutsq[mtype].y && r > EPSILON) {
|
||||||
|
|
||||||
|
numtyp rinv=ucl_recip(r);
|
||||||
|
numtyp delvx = iv.x - jv.x;
|
||||||
|
numtyp delvy = iv.y - jv.y;
|
||||||
|
numtyp delvz = iv.z - jv.z;
|
||||||
|
numtyp dot = delx*delvx + dely*delvy + delz*delvz;
|
||||||
|
numtyp wd = (numtyp)1.0 - r/coeff[mtype].w;
|
||||||
|
|
||||||
|
unsigned int tag1=itag, tag2=jtag;
|
||||||
|
if (tag1 > tag2) {
|
||||||
|
tag1 = jtag; tag2 = itag;
|
||||||
|
}
|
||||||
|
|
||||||
|
numtyp randnum = (numtyp)0.0;
|
||||||
|
saru(tag1, tag2, seed, timestep, randnum);
|
||||||
|
|
||||||
|
// conservative force = a0 * wd, or 0 if tstat only
|
||||||
|
// drag force = -gamma * wd^2 * (delx dot delv) / r
|
||||||
|
// random force = sigma * wd * rnd * dtinvsqrt;
|
||||||
|
/// coeff.x = a0, coeff.y = gamma, coeff.z = sigma, coeff.w = cut_dpd
|
||||||
|
|
||||||
|
if (!tstat_only) force_dpd = coeff[mtype].x*wd;
|
||||||
|
force_dpd -= coeff[mtype].y*wd*wd*dot*rinv;
|
||||||
|
force_dpd *= factor_dpd;
|
||||||
|
force_dpd += factor_sqrt*coeff[mtype].z*wd*randnum*dtinvsqrt;
|
||||||
|
force_dpd *=rinv;
|
||||||
|
|
||||||
|
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
|
||||||
|
numtyp e = (numtyp)0.5*coeff[mtype].x*coeff[mtype].w * wd*wd;
|
||||||
|
energy += factor_dpd*e;
|
||||||
|
}
|
||||||
|
|
||||||
|
}// if cut_dpdsq
|
||||||
|
|
||||||
|
// apply Slater electrostatic force if distance below Slater cutoff
|
||||||
|
// and the two species have a slater coeff
|
||||||
|
// cutsq[mtype].z -> Coulombic squared cutoff
|
||||||
|
if ( cutsq[mtype].z != 0.0 && rsq < cutsq[mtype].z){
|
||||||
|
numtyp r2inv=ucl_recip(rsq);
|
||||||
|
numtyp _erfc;
|
||||||
|
numtyp grij = g_ewald * r;
|
||||||
|
numtyp expm2 = ucl_exp(-grij*grij);
|
||||||
|
numtyp t = ucl_recip((numtyp)1.0 + EWALD_P*grij);
|
||||||
|
_erfc = t * (A1+t*(A2+t*(A3+t*(A4+t*A5)))) * expm2;
|
||||||
|
numtyp prefactor = extra[j].x;
|
||||||
|
prefactor *= qqrd2e * cutsq[mtype].z * qtmp/r;
|
||||||
|
numtyp rlamdainv = r * lamdainv;
|
||||||
|
numtyp exprlmdainv = ucl_exp((numtyp)-2.0*rlamdainv);
|
||||||
|
numtyp slater_term = exprlmdainv*((numtyp)1.0 + ((numtyp)2.0*rlamdainv*((numtyp)1.0+rlamdainv)));
|
||||||
|
force_coul = prefactor*(_erfc + EWALD_F*grij*expm2-slater_term);
|
||||||
|
if (factor_coul > (numtyp)0) force_coul -= factor_coul*prefactor*((numtyp)1.0-slater_term);
|
||||||
|
force_coul *= r2inv;
|
||||||
|
|
||||||
|
if (EVFLAG && eflag) {
|
||||||
|
numtyp e_slater = ((numtyp)1.0 + rlamdainv)*exprlmdainv;
|
||||||
|
numtyp e_sf = prefactor*(_erfc-e_slater);
|
||||||
|
if (factor_coul > (numtyp)0) e_sf -= factor_coul*prefactor*((numtyp)1.0 - e_slater);
|
||||||
|
e_coul += e_sf;
|
||||||
|
}
|
||||||
|
} // if cut_coulsq
|
||||||
|
|
||||||
|
numtyp force = force_coul + force_dpd;
|
||||||
|
f.x += delx*force;
|
||||||
|
f.y += dely*force;
|
||||||
|
f.z += delz*force;
|
||||||
|
|
||||||
|
if (EVFLAG && vflag) {
|
||||||
|
virial[0] += delx*delx*force;
|
||||||
|
virial[1] += dely*dely*force;
|
||||||
|
virial[2] += delz*delz*force;
|
||||||
|
virial[3] += delx*dely*force;
|
||||||
|
virial[4] += delx*delz*force;
|
||||||
|
virial[5] += dely*delz*force;
|
||||||
|
}
|
||||||
|
|
||||||
|
} // if cutsq
|
||||||
|
|
||||||
|
} // for nbor
|
||||||
|
} // if ii
|
||||||
|
store_answers_q(f,energy,e_coul,virial,ii,inum,tid,t_per_atom,offset,eflag,vflag,
|
||||||
|
ans,engv);
|
||||||
|
}
|
||||||
|
|
||||||
100
lib/gpu/lal_dpd_coul_slater_long.h
Normal file
100
lib/gpu/lal_dpd_coul_slater_long.h
Normal file
@ -0,0 +1,100 @@
|
|||||||
|
/***************************************************************************
|
||||||
|
lal_dpd_coul_slater_long.h
|
||||||
|
-------------------
|
||||||
|
Eddy BARRAUD (IFPEN/Sorbonne)
|
||||||
|
|
||||||
|
Class for acceleration of the dpd/coul/slater/long pair style.
|
||||||
|
|
||||||
|
__________________________________________________________________________
|
||||||
|
This file is part of the LAMMPS Accelerator Library (LAMMPS_AL)
|
||||||
|
__________________________________________________________________________
|
||||||
|
|
||||||
|
begin : May 28, 2024
|
||||||
|
email : eddy.barraud@outlook.fr
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#ifndef LAL_DPD_CHARGED_H
|
||||||
|
#define LAL_DPD_CHARGED_H
|
||||||
|
|
||||||
|
#include "lal_base_dpd.h"
|
||||||
|
|
||||||
|
namespace LAMMPS_AL {
|
||||||
|
|
||||||
|
template <class numtyp, class acctyp>
|
||||||
|
class DPDCoulSlaterLong : public BaseDPD<numtyp, acctyp> {
|
||||||
|
public:
|
||||||
|
DPDCoulSlaterLong();
|
||||||
|
~DPDCoulSlaterLong();
|
||||||
|
|
||||||
|
/// Clear any previous data and set up for a new LAMMPS run
|
||||||
|
/** \param max_nbors initial number of rows in the neighbor matrix
|
||||||
|
* \param cell_size cutoff + skin
|
||||||
|
* \param gpu_split fraction of particles handled by device
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
* - 0 if successful
|
||||||
|
* - -1 if fix gpu not found
|
||||||
|
* - -3 if there is an out of memory error
|
||||||
|
* - -4 if the GPU library was not compiled for GPU
|
||||||
|
* - -5 Double precision is not supported on card **/
|
||||||
|
int init(const int ntypes, double **host_cutsq, double **host_a0, double **host_gamma,
|
||||||
|
double **host_sigma, double **host_cut_dpd, double **host_cut_dpdsq,
|
||||||
|
double **host_cut_slatersq, double *host_special_lj, bool tstat_only, const int nlocal,
|
||||||
|
const int nall, const int max_nbors, const int maxspecial, const double cell_size,
|
||||||
|
const double gpu_split, FILE *screen, double *host_special_coul, const double qqrd2e,
|
||||||
|
const double g_ewald, const double lamda);
|
||||||
|
|
||||||
|
/// Clear all host and device data
|
||||||
|
/** \note This is called at the beginning of the init() routine **/
|
||||||
|
void clear();
|
||||||
|
|
||||||
|
/// Returns memory usage on device per atom
|
||||||
|
int bytes_per_atom(const int max_nbors) const;
|
||||||
|
|
||||||
|
/// Total host memory used by library for pair style
|
||||||
|
double host_memory_usage() const;
|
||||||
|
|
||||||
|
/// Update coeff if needed (tstat only)
|
||||||
|
void update_coeff(int ntypes, double **host_a0, double **host_gamma,
|
||||||
|
double **host_sigma, double **host_cut_dpd );
|
||||||
|
|
||||||
|
void get_extra_data(double *host_q);
|
||||||
|
|
||||||
|
// --------------------------- TYPE DATA --------------------------
|
||||||
|
|
||||||
|
/// coeff.x = a0, coeff.y = gamma, coeff.z = sigma, coeff.w = cut_dpd
|
||||||
|
UCL_D_Vec<numtyp4> coeff;
|
||||||
|
|
||||||
|
/// cutsq.x = cutsq, cutsq.y = cut_dpdsq, cutsq.w = cut_slatersq
|
||||||
|
UCL_D_Vec<numtyp4> cutsq;
|
||||||
|
|
||||||
|
/// Special LJ values
|
||||||
|
UCL_D_Vec<numtyp> sp_lj, sp_sqrt;
|
||||||
|
|
||||||
|
/// Special Coul values [0-3]
|
||||||
|
UCL_D_Vec<numtyp> sp_cl;
|
||||||
|
|
||||||
|
|
||||||
|
/// If atom type constants fit in shared memory, use fast kernels
|
||||||
|
bool shared_types;
|
||||||
|
|
||||||
|
/// Number of atom types
|
||||||
|
int _lj_types;
|
||||||
|
|
||||||
|
/// Only used for thermostat
|
||||||
|
int _tstat_only;
|
||||||
|
|
||||||
|
/// Coulombic terms
|
||||||
|
numtyp _qqrd2e, _g_ewald, _lamda;
|
||||||
|
|
||||||
|
/// pointer to host data for atom charge
|
||||||
|
double *q;
|
||||||
|
|
||||||
|
private:
|
||||||
|
bool _allocated;
|
||||||
|
int loop(const int eflag, const int vflag);
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
142
lib/gpu/lal_dpd_coul_slater_long_ext.cpp
Normal file
142
lib/gpu/lal_dpd_coul_slater_long_ext.cpp
Normal file
@ -0,0 +1,142 @@
|
|||||||
|
/***************************************************************************
|
||||||
|
lal_dpd_coul_slater_long_ext.cpp
|
||||||
|
-------------------
|
||||||
|
Eddy BARRAUD (IFPEN/Sorbonne)
|
||||||
|
|
||||||
|
Functions for LAMMPS access to dpd/coul/slater/long acceleration routines.
|
||||||
|
|
||||||
|
__________________________________________________________________________
|
||||||
|
This file is part of the LAMMPS Accelerator Library (LAMMPS_AL)
|
||||||
|
__________________________________________________________________________
|
||||||
|
|
||||||
|
begin : May 28, 2024
|
||||||
|
email : eddy.barraud@outlook.fr
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
#include <cassert>
|
||||||
|
#include <cmath>
|
||||||
|
|
||||||
|
#include "lal_dpd_coul_slater_long.h"
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
using namespace LAMMPS_AL;
|
||||||
|
|
||||||
|
static DPDCoulSlaterLong<PRECISION,ACC_PRECISION> DPDCMF;
|
||||||
|
|
||||||
|
// ---------------------------------------------------------------------------
|
||||||
|
// Allocate memory on host and device and copy constants to device
|
||||||
|
// ---------------------------------------------------------------------------
|
||||||
|
int dpd_coul_slater_long_gpu_init(const int ntypes, double **host_cutsq, double **host_a0,
|
||||||
|
double **host_gamma, double **host_sigma, double **host_cut_dpd,
|
||||||
|
double **host_cut_dpdsq, double **host_cut_slatersq,
|
||||||
|
double *special_lj, const int inum, const int nall,
|
||||||
|
const int max_nbors, const int maxspecial,
|
||||||
|
const double cell_size, int &gpu_mode, FILE *screen,
|
||||||
|
double *host_special_coul, const double qqrd2e,
|
||||||
|
const double g_ewald, const double lamda) {
|
||||||
|
DPDCMF.clear();
|
||||||
|
gpu_mode=DPDCMF.device->gpu_mode();
|
||||||
|
double gpu_split=DPDCMF.device->particle_split();
|
||||||
|
int first_gpu=DPDCMF.device->first_device();
|
||||||
|
int last_gpu=DPDCMF.device->last_device();
|
||||||
|
int world_me=DPDCMF.device->world_me();
|
||||||
|
int gpu_rank=DPDCMF.device->gpu_rank();
|
||||||
|
int procs_per_gpu=DPDCMF.device->procs_per_gpu();
|
||||||
|
|
||||||
|
DPDCMF.device->init_message(screen,"dpd",first_gpu,last_gpu);
|
||||||
|
|
||||||
|
bool message=false;
|
||||||
|
if (DPDCMF.device->replica_me()==0 && screen)
|
||||||
|
message=true;
|
||||||
|
|
||||||
|
if (message) {
|
||||||
|
fprintf(screen,"Initializing Device and compiling on process 0...");
|
||||||
|
fflush(screen);
|
||||||
|
}
|
||||||
|
|
||||||
|
int init_ok=0;
|
||||||
|
if (world_me==0)
|
||||||
|
init_ok=DPDCMF.init(ntypes, host_cutsq, host_a0, host_gamma, host_sigma, host_cut_dpd,
|
||||||
|
host_cut_dpdsq, host_cut_slatersq, special_lj, false, inum, nall,
|
||||||
|
max_nbors, maxspecial, cell_size, gpu_split, screen, host_special_coul,
|
||||||
|
qqrd2e, g_ewald, lamda);
|
||||||
|
|
||||||
|
DPDCMF.device->world_barrier();
|
||||||
|
if (message)
|
||||||
|
fprintf(screen,"Done.\n");
|
||||||
|
|
||||||
|
for (int i=0; i<procs_per_gpu; i++) {
|
||||||
|
if (message) {
|
||||||
|
if (last_gpu-first_gpu==0)
|
||||||
|
fprintf(screen,"Initializing Device %d on core %d...",first_gpu,i);
|
||||||
|
else
|
||||||
|
fprintf(screen,"Initializing Devices %d-%d on core %d...",first_gpu,
|
||||||
|
last_gpu,i);
|
||||||
|
fflush(screen);
|
||||||
|
}
|
||||||
|
if (gpu_rank==i && world_me!=0)
|
||||||
|
init_ok=DPDCMF.init(ntypes, host_cutsq, host_a0, host_gamma, host_sigma, host_cut_dpd,
|
||||||
|
host_cut_dpdsq, host_cut_slatersq, special_lj, false, inum, nall,
|
||||||
|
max_nbors, maxspecial, cell_size, gpu_split, screen, host_special_coul,
|
||||||
|
qqrd2e, g_ewald, lamda);
|
||||||
|
|
||||||
|
DPDCMF.device->serialize_init();
|
||||||
|
if (message)
|
||||||
|
fprintf(screen,"Done.\n");
|
||||||
|
}
|
||||||
|
if (message)
|
||||||
|
fprintf(screen,"\n");
|
||||||
|
|
||||||
|
if (init_ok==0)
|
||||||
|
DPDCMF.estimate_gpu_overhead();
|
||||||
|
return init_ok;
|
||||||
|
}
|
||||||
|
|
||||||
|
void dpd_coul_slater_long_gpu_clear() {
|
||||||
|
DPDCMF.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
int ** dpd_coul_slater_long_gpu_compute_n(const int ago, const int inum_full, const int nall,
|
||||||
|
double **host_x, int *host_type, double *sublo,
|
||||||
|
double *subhi, tagint *tag, int **nspecial,
|
||||||
|
tagint **special, const bool eflag, const bool vflag,
|
||||||
|
const bool eatom, const bool vatom, int &host_start,
|
||||||
|
int **ilist, int **jnum, const double cpu_time, bool &success,
|
||||||
|
double **host_v, const double dtinvsqrt,
|
||||||
|
const int seed, const int timestep,
|
||||||
|
double *boxlo, double *prd) {
|
||||||
|
return DPDCMF.compute(ago, inum_full, nall, host_x, host_type, sublo,
|
||||||
|
subhi, tag, nspecial, special, eflag, vflag, eatom,
|
||||||
|
vatom, host_start, ilist, jnum, cpu_time, success,
|
||||||
|
host_v, dtinvsqrt, seed, timestep, boxlo, prd);
|
||||||
|
}
|
||||||
|
|
||||||
|
void dpd_coul_slater_long_gpu_compute(const int ago, const int inum_full, const int nall,
|
||||||
|
double **host_x, int *host_type, int *ilist, int *numj,
|
||||||
|
int **firstneigh, const bool eflag, const bool vflag,
|
||||||
|
const bool eatom, const bool vatom, int &host_start,
|
||||||
|
const double cpu_time, bool &success, tagint *tag,
|
||||||
|
double **host_v, const double dtinvsqrt,
|
||||||
|
const int seed, const int timestep,
|
||||||
|
const int nlocal, double *boxlo, double *prd) {
|
||||||
|
DPDCMF.compute(ago, inum_full, nall, host_x, host_type, ilist, numj,
|
||||||
|
firstneigh, eflag, vflag, eatom, vatom, host_start, cpu_time, success,
|
||||||
|
tag, host_v, dtinvsqrt, seed, timestep, nlocal, boxlo, prd);
|
||||||
|
}
|
||||||
|
|
||||||
|
void dpd_coul_slater_long_gpu_update_coeff(int ntypes, double **host_a0, double **host_gamma,
|
||||||
|
double **host_sigma, double **host_cut_dpd)
|
||||||
|
{
|
||||||
|
DPDCMF.update_coeff(ntypes,host_a0,host_gamma,host_sigma, host_cut_dpd);
|
||||||
|
}
|
||||||
|
|
||||||
|
void dpd_coul_slater_long_gpu_get_extra_data(double *host_q) {
|
||||||
|
DPDCMF.get_extra_data(host_q);
|
||||||
|
}
|
||||||
|
|
||||||
|
double dpd_coul_slater_long_gpu_bytes() {
|
||||||
|
return DPDCMF.host_memory_usage();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -891,7 +891,7 @@ class lammps(object):
|
|||||||
# set length of vector for items that are not a scalar
|
# set length of vector for items that are not a scalar
|
||||||
vec_dict = { 'boxlo':3, 'boxhi':3, 'sublo':3, 'subhi':3,
|
vec_dict = { 'boxlo':3, 'boxhi':3, 'sublo':3, 'subhi':3,
|
||||||
'sublo_lambda':3, 'subhi_lambda':3, 'periodicity':3,
|
'sublo_lambda':3, 'subhi_lambda':3, 'periodicity':3,
|
||||||
'special_lj':4, 'special_coul':4 }
|
'special_lj':4, 'special_coul':4, 'procgrid':3 }
|
||||||
if name in vec_dict:
|
if name in vec_dict:
|
||||||
veclen = vec_dict[name]
|
veclen = vec_dict[name]
|
||||||
elif name == 'respa_dt':
|
elif name == 'respa_dt':
|
||||||
|
|||||||
@ -796,18 +796,16 @@ class PyLammps(object):
|
|||||||
comm = {}
|
comm = {}
|
||||||
comm['nprocs'] = self.lmp.extract_setting("world_size")
|
comm['nprocs'] = self.lmp.extract_setting("world_size")
|
||||||
comm['nthreads'] = self.lmp.extract_setting("nthreads")
|
comm['nthreads'] = self.lmp.extract_setting("nthreads")
|
||||||
|
comm['proc_grid'] = comm['procgrid'] = self.lmp.extract_global("procgrid")
|
||||||
|
idx = self.lmp.extract_setting("comm_style")
|
||||||
|
comm['comm_style'] = ('brick', 'tiled')[idx]
|
||||||
|
idx = self.lmp.extract_setting("comm_style")
|
||||||
|
comm['comm_layout'] = ('uniform', 'nonuniform', 'irregular')[idx]
|
||||||
|
comm['ghost_velocity'] = self.lmp.extract_setting("ghost_velocity") == 1
|
||||||
|
|
||||||
for line in output:
|
for line in output:
|
||||||
if line.startswith("MPI library"):
|
if line.startswith("MPI library"):
|
||||||
comm['mpi_version'] = line.split(':')[1].strip()
|
comm['mpi_version'] = line.split(':')[1].strip()
|
||||||
elif line.startswith("Comm style"):
|
|
||||||
parts = self._split_values(line)
|
|
||||||
comm['comm_style'] = self._get_pair(parts[0])[1]
|
|
||||||
comm['comm_layout'] = self._get_pair(parts[1])[1]
|
|
||||||
elif line.startswith("Processor grid"):
|
|
||||||
comm['proc_grid'] = [int(x) for x in self._get_pair(line)[1].split('x')]
|
|
||||||
elif line.startswith("Communicate velocities for ghost atoms"):
|
|
||||||
comm['ghost_velocity'] = (self._get_pair(line)[1] == "yes")
|
|
||||||
return comm
|
return comm
|
||||||
|
|
||||||
def _parse_element_list(self, output):
|
def _parse_element_list(self, output):
|
||||||
|
|||||||
2
src/.gitignore
vendored
2
src/.gitignore
vendored
@ -1715,6 +1715,8 @@
|
|||||||
/pair_dpd.h
|
/pair_dpd.h
|
||||||
/pair_dpd_tstat.cpp
|
/pair_dpd_tstat.cpp
|
||||||
/pair_dpd_tstat.h
|
/pair_dpd_tstat.h
|
||||||
|
/pair_dpd_coul_slater_long.cpp
|
||||||
|
/pair_dpd_coul_slater_long.h
|
||||||
/pair_dpd_ext.cpp
|
/pair_dpd_ext.cpp
|
||||||
/pair_dpd_ext.h
|
/pair_dpd_ext.h
|
||||||
/pair_dpd_ext_tstat.cpp
|
/pair_dpd_ext_tstat.cpp
|
||||||
|
|||||||
39
src/DPD-BASIC/Install.sh
Executable file
39
src/DPD-BASIC/Install.sh
Executable file
@ -0,0 +1,39 @@
|
|||||||
|
# Install/unInstall package files in LAMMPS
|
||||||
|
# mode = 0/1/2 for uninstall/install/update
|
||||||
|
|
||||||
|
mode=$1
|
||||||
|
|
||||||
|
# enforce using portable C locale
|
||||||
|
LC_ALL=C
|
||||||
|
export LC_ALL
|
||||||
|
|
||||||
|
# arg1 = file, arg2 = file it depends on
|
||||||
|
|
||||||
|
action () {
|
||||||
|
if (test $mode = 0) then
|
||||||
|
rm -f ../$1
|
||||||
|
elif (! cmp -s $1 ../$1) then
|
||||||
|
if (test -z "$2" || test -e ../$2) then
|
||||||
|
cp $1 ..
|
||||||
|
if (test $mode = 2) then
|
||||||
|
echo " updating src/$1"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
elif (test -n "$2") then
|
||||||
|
if (test ! -e ../$2) then
|
||||||
|
rm -f ../$1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# list of files with optional dependcies
|
||||||
|
action pair_dpd_coul_slater_long.cpp pppm.cpp
|
||||||
|
action pair_dpd_coul_slater_long.h pppm.h
|
||||||
|
action pair_dpd.cpp
|
||||||
|
action pair_dpd_ext.cpp
|
||||||
|
action pair_dpd_ext.h
|
||||||
|
action pair_dpd_ext_tstat.cpp
|
||||||
|
action pair_dpd_ext_tstat.h
|
||||||
|
action pair_dpd.h
|
||||||
|
action pair_dpd_tstat.cpp
|
||||||
|
action pair_dpd_tstat.h
|
||||||
544
src/DPD-BASIC/pair_dpd_coul_slater_long.cpp
Normal file
544
src/DPD-BASIC/pair_dpd_coul_slater_long.cpp
Normal file
@ -0,0 +1,544 @@
|
|||||||
|
// clang-format off
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
|
||||||
|
https://www.lammps.org/, Sandia National Laboratories
|
||||||
|
LAMMPS development team: developers@lammps.org
|
||||||
|
|
||||||
|
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: Eddy BARRAUD (IFPEN/Sorbonne)
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
#include "pair_dpd_coul_slater_long.h"
|
||||||
|
|
||||||
|
#include "atom.h"
|
||||||
|
#include "comm.h"
|
||||||
|
#include "error.h"
|
||||||
|
#include "force.h"
|
||||||
|
#include "memory.h"
|
||||||
|
#include "neigh_list.h"
|
||||||
|
#include "neighbor.h"
|
||||||
|
#include "random_mars.h"
|
||||||
|
#include "update.h"
|
||||||
|
|
||||||
|
#include "ewald_const.h"
|
||||||
|
#include "kspace.h"
|
||||||
|
|
||||||
|
#include <cmath>
|
||||||
|
#include <cstring>
|
||||||
|
|
||||||
|
using namespace LAMMPS_NS;
|
||||||
|
using namespace EwaldConst;
|
||||||
|
|
||||||
|
static constexpr double EPSILON = 1.0e-10;
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
PairDPDCoulSlaterLong::PairDPDCoulSlaterLong(LAMMPS *lmp) :
|
||||||
|
Pair(lmp), cut_dpd(nullptr), cut_dpdsq(nullptr), cut_slatersq(nullptr),
|
||||||
|
a0(nullptr), gamma(nullptr), sigma(nullptr), random(nullptr)
|
||||||
|
{
|
||||||
|
writedata = 1;
|
||||||
|
ewaldflag = pppmflag = 1;
|
||||||
|
respa_enable = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
PairDPDCoulSlaterLong::~PairDPDCoulSlaterLong()
|
||||||
|
{
|
||||||
|
if (copymode) return;
|
||||||
|
|
||||||
|
if (allocated) {
|
||||||
|
memory->destroy(setflag);
|
||||||
|
memory->destroy(cutsq);
|
||||||
|
memory->destroy(cut_dpd);
|
||||||
|
memory->destroy(cut_dpdsq);
|
||||||
|
memory->destroy(cut_slatersq);
|
||||||
|
|
||||||
|
memory->destroy(cut);
|
||||||
|
memory->destroy(a0);
|
||||||
|
memory->destroy(gamma);
|
||||||
|
memory->destroy(sigma);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (random) delete random;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void PairDPDCoulSlaterLong::compute(int eflag, int vflag)
|
||||||
|
{
|
||||||
|
int i,j,ii,jj,inum,jnum,itype,jtype;
|
||||||
|
double qtmp,xtmp,ytmp,ztmp,delx,dely,delz,evdwl,ecoul,fpair;
|
||||||
|
double vxtmp,vytmp,vztmp,delvx,delvy,delvz;
|
||||||
|
double r2inv,forcedpd,forcecoul,factor_coul;
|
||||||
|
double grij,expm2,prefactor,t,erfc;
|
||||||
|
double rsq,r,rinv,dot,wd,randnum,factor_dpd,factor_sqrt;
|
||||||
|
int *ilist,*jlist,*numneigh,**firstneigh;
|
||||||
|
double slater_term;
|
||||||
|
|
||||||
|
evdwl = ecoul = 0.0;
|
||||||
|
ev_init(eflag,vflag);
|
||||||
|
|
||||||
|
double **x = atom->x;
|
||||||
|
double **v = atom->v;
|
||||||
|
double **f = atom->f;
|
||||||
|
int *type = atom->type;
|
||||||
|
int nlocal = atom->nlocal;
|
||||||
|
double *special_lj = force->special_lj;
|
||||||
|
int newton_pair = force->newton_pair;
|
||||||
|
double dtinvsqrt = 1.0/sqrt(update->dt);
|
||||||
|
|
||||||
|
double *q = atom->q;
|
||||||
|
double *special_coul = force->special_coul;
|
||||||
|
double qqrd2e = force->qqrd2e;
|
||||||
|
|
||||||
|
inum = list->inum;
|
||||||
|
ilist = list->ilist;
|
||||||
|
numneigh = list->numneigh;
|
||||||
|
firstneigh = list->firstneigh;
|
||||||
|
|
||||||
|
// loop over neighbors of my atoms
|
||||||
|
|
||||||
|
for (ii = 0; ii < inum; ii++) {
|
||||||
|
i = ilist[ii];
|
||||||
|
qtmp = q[i];
|
||||||
|
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];
|
||||||
|
jlist = firstneigh[i];
|
||||||
|
jnum = numneigh[i];
|
||||||
|
|
||||||
|
for (jj = 0; jj < jnum; jj++) {
|
||||||
|
j = jlist[jj];
|
||||||
|
factor_dpd = special_lj[sbmask(j)];
|
||||||
|
factor_sqrt = special_sqrt[sbmask(j)];
|
||||||
|
factor_coul = special_coul[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];
|
||||||
|
|
||||||
|
// forces if below maximum cutoff
|
||||||
|
if (rsq < cutsq[itype][jtype]) {
|
||||||
|
r = sqrt(rsq);
|
||||||
|
if (evflag) evdwl = ecoul = 0.0;
|
||||||
|
|
||||||
|
// apply DPD force if distance below DPD cutoff
|
||||||
|
if (rsq < cut_dpdsq[itype][jtype] && r > EPSILON) {
|
||||||
|
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/cut_dpd[itype][jtype];
|
||||||
|
randnum = random->gaussian();
|
||||||
|
|
||||||
|
// conservative force = a0 * wd
|
||||||
|
// drag force = -gamma * wd^2 * (delx dot delv) / r
|
||||||
|
// random force = sigma * wd * rnd * dtinvsqrt;
|
||||||
|
// random force must be scaled by sqrt(factor_dpd)
|
||||||
|
|
||||||
|
forcedpd = a0[itype][jtype]*wd;
|
||||||
|
forcedpd -= gamma[itype][jtype]*wd*wd*dot*rinv;
|
||||||
|
forcedpd *= factor_dpd;
|
||||||
|
forcedpd += factor_sqrt*sigma[itype][jtype]*wd*randnum*dtinvsqrt;
|
||||||
|
forcedpd *= rinv;
|
||||||
|
|
||||||
|
if (eflag) {
|
||||||
|
// eng shifted to 0.0 at cutoff
|
||||||
|
evdwl = 0.5*a0[itype][jtype]*cut_dpd[itype][jtype] * wd*wd;
|
||||||
|
evdwl *= factor_dpd;
|
||||||
|
}
|
||||||
|
|
||||||
|
} else forcedpd = 0.0;
|
||||||
|
|
||||||
|
// apply Slater electrostatic force if distance below Slater cutoff
|
||||||
|
// and the two species are charged
|
||||||
|
if (rsq < cut_slatersq[itype][jtype]){
|
||||||
|
r2inv = 1.0/rsq;
|
||||||
|
grij = g_ewald * r;
|
||||||
|
expm2 = exp(-grij*grij);
|
||||||
|
t = 1.0 / (1.0 + EWALD_P*grij);
|
||||||
|
erfc = t * (A1+t*(A2+t*(A3+t*(A4+t*A5)))) * expm2;
|
||||||
|
slater_term = exp(-2*r/lamda)*(1 + (2*r/lamda*(1+r/lamda)));
|
||||||
|
prefactor = qqrd2e * qtmp*q[j]/r;
|
||||||
|
forcecoul = prefactor * (erfc + EWALD_F*grij*expm2 - slater_term);
|
||||||
|
if (factor_coul < 1.0) forcecoul -= (1.0-factor_coul)*prefactor*(1-slater_term);
|
||||||
|
forcecoul *= r2inv;
|
||||||
|
|
||||||
|
if (eflag) {
|
||||||
|
ecoul = prefactor*(erfc - (1 + r/lamda)*exp(-2*r/lamda));
|
||||||
|
if (factor_coul < 1.0) ecoul -= (1.0-factor_coul)*prefactor*(1.0-(1 + r/lamda)*exp(-2*r/lamda));
|
||||||
|
}
|
||||||
|
|
||||||
|
} else forcecoul = 0.0;
|
||||||
|
|
||||||
|
fpair = forcedpd + forcecoul;
|
||||||
|
|
||||||
|
f[i][0] += delx*fpair;
|
||||||
|
f[i][1] += dely*fpair;
|
||||||
|
f[i][2] += delz*fpair;
|
||||||
|
if (newton_pair || j < nlocal) {
|
||||||
|
f[j][0] -= delx*fpair;
|
||||||
|
f[j][1] -= dely*fpair;
|
||||||
|
f[j][2] -= delz*fpair;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (evflag) ev_tally(i,j,nlocal,newton_pair,
|
||||||
|
evdwl,ecoul,fpair,delx,dely,delz);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (vflag_fdotr) virial_fdotr_compute();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
allocate all arrays
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void PairDPDCoulSlaterLong::allocate()
|
||||||
|
{
|
||||||
|
int i,j;
|
||||||
|
allocated = 1;
|
||||||
|
int n = atom->ntypes;
|
||||||
|
|
||||||
|
memory->create(setflag,n+1,n+1,"pair:setflag");
|
||||||
|
for (i = 1; i <= n; i++)
|
||||||
|
for (j = i; j <= n; j++)
|
||||||
|
setflag[i][j] = 0;
|
||||||
|
|
||||||
|
memory->create(cutsq,n+1,n+1,"pair:cutsq");
|
||||||
|
memory->create(cut,n+1,n+1,"pair:cut");
|
||||||
|
memory->create(cut_dpd,n+1,n+1,"pair:cut_dpd");
|
||||||
|
memory->create(cut_dpdsq,n+1,n+1,"pair:cut_dpdsq");
|
||||||
|
memory->create(cut_slatersq,n+1,n+1,"pair:cut_slatersq");
|
||||||
|
memory->create(a0,n+1,n+1,"pair:a0");
|
||||||
|
memory->create(gamma,n+1,n+1,"pair:gamma");
|
||||||
|
memory->create(sigma,n+1,n+1,"pair:sigma");
|
||||||
|
for (i = 0; i <= atom->ntypes; i++)
|
||||||
|
for (j = 0; j <= atom->ntypes; j++)
|
||||||
|
sigma[i][j] = gamma[i][j] = 0.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
global settings
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void PairDPDCoulSlaterLong::settings(int narg, char **arg)
|
||||||
|
{
|
||||||
|
// params : T cut_dpd seed lambda cut_coul
|
||||||
|
if (narg != 5) error->all(FLERR,"Illegal pair_style command");
|
||||||
|
|
||||||
|
temperature = utils::numeric(FLERR,arg[0],false,lmp);
|
||||||
|
cut_global = utils::numeric(FLERR,arg[1],false,lmp);
|
||||||
|
seed = utils::inumeric(FLERR,arg[2],false,lmp);
|
||||||
|
lamda = utils::numeric(FLERR,arg[3],false,lmp);
|
||||||
|
cut_coul = utils::numeric(FLERR,arg[4],false,lmp);
|
||||||
|
|
||||||
|
// initialize Marsaglia RNG with processor-unique seed
|
||||||
|
|
||||||
|
if (seed <= 0)
|
||||||
|
error->all(FLERR,"Invalid random seed {} for pair_style dpd/coul/slater/long command", seed);
|
||||||
|
delete random;
|
||||||
|
random = new RanMars(lmp,seed + comm->me);
|
||||||
|
|
||||||
|
// reset cutoffs that have been explicitly set
|
||||||
|
|
||||||
|
if (allocated) {
|
||||||
|
int i,j;
|
||||||
|
for (i = 1; i <= atom->ntypes; i++)
|
||||||
|
for (j = i; j <= atom->ntypes; j++)
|
||||||
|
if (setflag[i][j]) cut_dpd[i][j] = MAX(cut_global,cut_coul);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
set coeffs for one or more type pairs
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void PairDPDCoulSlaterLong::coeff(int narg, char **arg)
|
||||||
|
{
|
||||||
|
if (narg < 4 || narg > 6)
|
||||||
|
error->all(FLERR,"Incorrect args for pair coefficients");
|
||||||
|
if (!allocated) allocate();
|
||||||
|
|
||||||
|
int ilo,ihi,jlo,jhi;
|
||||||
|
utils::bounds(FLERR,arg[0],1,atom->ntypes,ilo,ihi,error);
|
||||||
|
utils::bounds(FLERR,arg[1],1,atom->ntypes,jlo,jhi,error);
|
||||||
|
|
||||||
|
double a0_one = utils::numeric(FLERR,arg[2],false,lmp);
|
||||||
|
double gamma_one = utils::numeric(FLERR,arg[3],false,lmp);
|
||||||
|
|
||||||
|
double cut_one = cut_global;
|
||||||
|
double cut_two = 0.0;
|
||||||
|
|
||||||
|
if (narg > 4) {
|
||||||
|
bool do_slater = utils::logical(FLERR,arg[4],false,lmp);
|
||||||
|
if (do_slater) cut_two = cut_coul;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (narg > 5) cut_one = utils::numeric(FLERR,arg[5],false,lmp);
|
||||||
|
|
||||||
|
int count = 0;
|
||||||
|
for (int i = ilo; i <= ihi; i++) {
|
||||||
|
for (int j = MAX(jlo,i); j <= jhi; j++) {
|
||||||
|
a0[i][j] = a0_one;
|
||||||
|
gamma[i][j] = gamma_one;
|
||||||
|
cut_dpd[i][j] = cut_one;
|
||||||
|
cut_slatersq[i][j] = cut_two * cut_two;
|
||||||
|
cut[i][j] = MAX(cut_one, cut_two);
|
||||||
|
setflag[i][j] = 1;
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (count == 0) error->all(FLERR,"Incorrect args for pair coefficients");
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
init specific to this pair style
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void PairDPDCoulSlaterLong::init_style()
|
||||||
|
{
|
||||||
|
if (comm->ghost_velocity == 0)
|
||||||
|
error->all(FLERR,"Pair dpd requires ghost atoms store velocity");
|
||||||
|
if (!atom->q_flag)
|
||||||
|
error->all(FLERR,"Pair style coul/slater/long requires atom attribute q");
|
||||||
|
|
||||||
|
// if newton off, forces between atoms ij will be double computed
|
||||||
|
// using different random numbers
|
||||||
|
|
||||||
|
if (force->newton_pair == 0 && comm->me == 0)
|
||||||
|
error->warning(FLERR, "Pair dpd needs newton pair on for momentum conservation");
|
||||||
|
|
||||||
|
neighbor->add_request(this);
|
||||||
|
|
||||||
|
// precompute random force scaling factors
|
||||||
|
|
||||||
|
for (int i = 0; i < 4; ++i) special_sqrt[i] = sqrt(force->special_lj[i]);
|
||||||
|
|
||||||
|
|
||||||
|
// ensure use of KSpace long-range solver, set g_ewald
|
||||||
|
|
||||||
|
if (force->kspace == nullptr)
|
||||||
|
error->all(FLERR,"Pair style requires a KSpace style");
|
||||||
|
g_ewald = force->kspace->g_ewald;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
init for one type pair i,j and corresponding j,i
|
||||||
|
return the maximum cutoff between Slater or DPD cutoff if charged
|
||||||
|
return the DPD cutoff for uncharged
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
double PairDPDCoulSlaterLong::init_one(int i, int j)
|
||||||
|
{
|
||||||
|
if (setflag[i][j] == 0) error->all(FLERR,"All pair coeffs are not set");
|
||||||
|
|
||||||
|
sigma[i][j] = sqrt(2.0*force->boltz*temperature*gamma[i][j]);
|
||||||
|
|
||||||
|
cut_dpdsq[i][j] = cut_dpd[i][j] * cut_dpd[i][j];
|
||||||
|
|
||||||
|
a0[j][i] = a0[i][j];
|
||||||
|
gamma[j][i] = gamma[i][j];
|
||||||
|
sigma[j][i] = sigma[i][j];
|
||||||
|
cut_dpd[j][i] = cut_dpd[i][j];
|
||||||
|
cut[j][i] = cut[i][j];
|
||||||
|
cut_dpdsq[j][i] = cut_dpdsq[i][j];
|
||||||
|
cut_slatersq[j][i] = cut_slatersq[i][j];
|
||||||
|
|
||||||
|
return MAX(cut_dpd[i][j], sqrt(cut_slatersq[i][j]));
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
proc 0 writes to restart file
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void PairDPDCoulSlaterLong::write_restart(FILE *fp)
|
||||||
|
{
|
||||||
|
write_restart_settings(fp);
|
||||||
|
|
||||||
|
int i,j;
|
||||||
|
for (i = 1; i <= atom->ntypes; i++) {
|
||||||
|
for (j = i; j <= atom->ntypes; j++) {
|
||||||
|
fwrite(&setflag[i][j],sizeof(int),1,fp);
|
||||||
|
if (setflag[i][j]) {
|
||||||
|
fwrite(&a0[i][j],sizeof(double),1,fp);
|
||||||
|
fwrite(&gamma[i][j],sizeof(double),1,fp);
|
||||||
|
fwrite(&cut[i][j],sizeof(double),1,fp);
|
||||||
|
fwrite(&cut_dpd[i][j],sizeof(double),1,fp);
|
||||||
|
fwrite(&cut_slatersq[i][j],sizeof(double),1,fp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
proc 0 reads from restart file, bcasts
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void PairDPDCoulSlaterLong::read_restart(FILE *fp)
|
||||||
|
{
|
||||||
|
read_restart_settings(fp);
|
||||||
|
|
||||||
|
allocate();
|
||||||
|
|
||||||
|
int i,j;
|
||||||
|
int me = comm->me;
|
||||||
|
for (i = 1; i <= atom->ntypes; i++) {
|
||||||
|
for (j = i; j <= atom->ntypes; j++) {
|
||||||
|
if (me == 0) utils::sfread(FLERR,&setflag[i][j],sizeof(int),1,fp,nullptr,error);
|
||||||
|
MPI_Bcast(&setflag[i][j],1,MPI_INT,0,world);
|
||||||
|
if (setflag[i][j]) {
|
||||||
|
if (me == 0) {
|
||||||
|
utils::sfread(FLERR,&a0[i][j],sizeof(double),1,fp,nullptr,error);
|
||||||
|
utils::sfread(FLERR,&gamma[i][j],sizeof(double),1,fp,nullptr,error);
|
||||||
|
utils::sfread(FLERR,&cut[i][j],sizeof(double),1,fp,nullptr,error);
|
||||||
|
utils::sfread(FLERR,&cut_dpd[i][j],sizeof(double),1,fp,nullptr,error);
|
||||||
|
utils::sfread(FLERR,&cut_slatersq[i][j],sizeof(double),1,fp,nullptr,error);
|
||||||
|
}
|
||||||
|
MPI_Bcast(&a0[i][j],1,MPI_DOUBLE,0,world);
|
||||||
|
MPI_Bcast(&gamma[i][j],1,MPI_DOUBLE,0,world);
|
||||||
|
MPI_Bcast(&cut[i][j],1,MPI_DOUBLE,0,world);
|
||||||
|
MPI_Bcast(&cut_dpd[i][j],1,MPI_DOUBLE,0,world);
|
||||||
|
MPI_Bcast(&cut_slatersq[i][j],1,MPI_DOUBLE,0,world);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
proc 0 writes to restart file
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void PairDPDCoulSlaterLong::write_restart_settings(FILE *fp)
|
||||||
|
{
|
||||||
|
fwrite(&temperature,sizeof(double),1,fp);
|
||||||
|
fwrite(&cut_global,sizeof(double),1,fp);
|
||||||
|
fwrite(&seed,sizeof(int),1,fp);
|
||||||
|
fwrite(&lamda,sizeof(double),1,fp);
|
||||||
|
fwrite(&cut_coul,sizeof(double),1,fp);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
proc 0 reads from restart file, bcasts
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void PairDPDCoulSlaterLong::read_restart_settings(FILE *fp)
|
||||||
|
{
|
||||||
|
if (comm->me == 0) {
|
||||||
|
utils::sfread(FLERR,&temperature,sizeof(double),1,fp,nullptr,error);
|
||||||
|
utils::sfread(FLERR,&cut_global,sizeof(double),1,fp,nullptr,error);
|
||||||
|
utils::sfread(FLERR,&seed,sizeof(int),1,fp,nullptr,error);
|
||||||
|
utils::sfread(FLERR,&lamda,sizeof(double),1,fp,nullptr,error);
|
||||||
|
utils::sfread(FLERR,&cut_coul,sizeof(double),1,fp,nullptr,error);
|
||||||
|
}
|
||||||
|
MPI_Bcast(&temperature,1,MPI_DOUBLE,0,world);
|
||||||
|
MPI_Bcast(&cut_global,1,MPI_DOUBLE,0,world);
|
||||||
|
MPI_Bcast(&seed,1,MPI_INT,0,world);
|
||||||
|
MPI_Bcast(&lamda,1,MPI_DOUBLE,0,world);
|
||||||
|
MPI_Bcast(&cut_coul,1,MPI_DOUBLE,0,world);
|
||||||
|
|
||||||
|
// initialize Marsaglia RNG with processor-unique seed
|
||||||
|
// same seed that pair_style command initially specified
|
||||||
|
|
||||||
|
if (random) delete random;
|
||||||
|
random = new RanMars(lmp,seed + comm->me);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
proc 0 writes to data file
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void PairDPDCoulSlaterLong::write_data(FILE *fp)
|
||||||
|
{
|
||||||
|
for (int i = 1; i <= atom->ntypes; i++)
|
||||||
|
fprintf(fp,"%d %g %g\n",i,a0[i][i],gamma[i][i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
proc 0 writes all pairs to data file
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void PairDPDCoulSlaterLong::write_data_all(FILE *fp)
|
||||||
|
{
|
||||||
|
for (int i = 1; i <= atom->ntypes; i++)
|
||||||
|
for (int j = i; j <= atom->ntypes; j++)
|
||||||
|
fprintf(fp,"%d %d %g %g %s %g\n",i,j,a0[i][j],gamma[i][j],
|
||||||
|
(cut_slatersq[i][j] == 0.0) ? "yes" : "no", cut_dpd[i][j]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
double PairDPDCoulSlaterLong::single(int i, int j, int itype, int jtype, double rsq,
|
||||||
|
double factor_coul, double factor_dpd, double &fforce)
|
||||||
|
{
|
||||||
|
double r,rinv,wd,phi;
|
||||||
|
double r2inv,grij,expm2,t,erfc,prefactor;
|
||||||
|
double slater_term;
|
||||||
|
double forcecoul,phicoul;
|
||||||
|
|
||||||
|
double energy = 0.0;
|
||||||
|
fforce = 0.0;
|
||||||
|
|
||||||
|
r = sqrt(rsq);
|
||||||
|
|
||||||
|
// compute DPD force and energy
|
||||||
|
if (rsq < cut_dpdsq[itype][jtype] && r > EPSILON) {
|
||||||
|
rinv = 1.0/r;
|
||||||
|
wd = 1.0 - r/cut_dpd[itype][jtype];
|
||||||
|
fforce += a0[itype][jtype]*wd * factor_dpd*rinv;
|
||||||
|
|
||||||
|
phi = 0.5*a0[itype][jtype]*cut_dpd[itype][jtype] * wd*wd;
|
||||||
|
energy += factor_dpd*phi;
|
||||||
|
}
|
||||||
|
|
||||||
|
// compute Slater coulombic force and energy
|
||||||
|
if (atom->q[i]*atom->q[j] != 0.0 && rsq < cut_slatersq[itype][jtype]) {
|
||||||
|
r2inv = 1.0/rsq;
|
||||||
|
grij = g_ewald * r;
|
||||||
|
expm2 = exp(-grij*grij);
|
||||||
|
t = 1.0 / (1.0 + EWALD_P*grij);
|
||||||
|
erfc = t * (A1+t*(A2+t*(A3+t*(A4+t*A5)))) * expm2;
|
||||||
|
slater_term = exp(-2*r/lamda)*(1 + (2*r/lamda*(1+r/lamda)));
|
||||||
|
prefactor = force->qqrd2e * atom->q[i]*atom->q[j]/r;
|
||||||
|
forcecoul = prefactor * (erfc + EWALD_F*grij*expm2 - slater_term);
|
||||||
|
if (factor_coul < 1.0) forcecoul -= (1.0-factor_coul)*prefactor;
|
||||||
|
fforce += forcecoul * r2inv;
|
||||||
|
phicoul = prefactor*(erfc - (1 + r/lamda)*exp(-2*r/lamda));
|
||||||
|
if (factor_coul < 1.0) phicoul -= (1.0-factor_coul)*prefactor;
|
||||||
|
energy += phicoul;
|
||||||
|
}
|
||||||
|
|
||||||
|
return energy;
|
||||||
|
}
|
||||||
|
|
||||||
|
void *PairDPDCoulSlaterLong::extract(const char *str, int &dim)
|
||||||
|
{
|
||||||
|
dim = 0;
|
||||||
|
if (strcmp(str,"cut_coul") == 0) return (void *) &cut_coul;
|
||||||
|
if (strcmp(str,"lamda") == 0) return (void *) &lamda;
|
||||||
|
dim = 2;
|
||||||
|
if (strcmp(str,"a0") == 0) return (void *) a0;
|
||||||
|
if (strcmp(str,"gamma") == 0) return (void *) gamma;
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
64
src/DPD-BASIC/pair_dpd_coul_slater_long.h
Normal file
64
src/DPD-BASIC/pair_dpd_coul_slater_long.h
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
/* -*- c++ -*- ----------------------------------------------------------
|
||||||
|
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
|
||||||
|
https://www.lammps.org/, Sandia National Laboratories
|
||||||
|
LAMMPS development team: developers@lammps.org
|
||||||
|
|
||||||
|
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/coul/slater/long,PairDPDCoulSlaterLong);
|
||||||
|
// clang-format on
|
||||||
|
#else
|
||||||
|
|
||||||
|
#ifndef LMP_PAIR_DPD_COUL_SLATER_LONG_H
|
||||||
|
#define LMP_PAIR_DPD_COUL_SLATER_LONG_H
|
||||||
|
|
||||||
|
#include "pair.h"
|
||||||
|
|
||||||
|
namespace LAMMPS_NS {
|
||||||
|
|
||||||
|
class PairDPDCoulSlaterLong : public Pair {
|
||||||
|
public:
|
||||||
|
PairDPDCoulSlaterLong(class LAMMPS *);
|
||||||
|
~PairDPDCoulSlaterLong() override;
|
||||||
|
void compute(int, int) override;
|
||||||
|
void settings(int, char **) override;
|
||||||
|
void coeff(int, char **) override;
|
||||||
|
void init_style() override;
|
||||||
|
double init_one(int, int) override;
|
||||||
|
void write_restart(FILE *) override;
|
||||||
|
void read_restart(FILE *) override;
|
||||||
|
void write_restart_settings(FILE *) override;
|
||||||
|
void read_restart_settings(FILE *) override;
|
||||||
|
void write_data(FILE *) override;
|
||||||
|
void write_data_all(FILE *) override;
|
||||||
|
double single(int, int, int, int, double, double, double, double &) override;
|
||||||
|
void *extract(const char *, int &) override;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
double cut_global, temperature;
|
||||||
|
double special_sqrt[4];
|
||||||
|
int seed;
|
||||||
|
double **cut;
|
||||||
|
double **cut_dpd, **cut_dpdsq, **cut_slatersq;
|
||||||
|
double **a0, **gamma;
|
||||||
|
double **sigma;
|
||||||
|
class RanMars *random;
|
||||||
|
double cut_coul, qdist;
|
||||||
|
double lamda;
|
||||||
|
double g_ewald;
|
||||||
|
|
||||||
|
virtual void allocate();
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace LAMMPS_NS
|
||||||
|
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
@ -116,6 +116,7 @@ if (test $1 = "KSPACE") then
|
|||||||
depend CG-SPICA
|
depend CG-SPICA
|
||||||
depend CORESHELL
|
depend CORESHELL
|
||||||
depend DIELECTRIC
|
depend DIELECTRIC
|
||||||
|
depend DPD-BASIC
|
||||||
depend GPU
|
depend GPU
|
||||||
depend KOKKOS
|
depend KOKKOS
|
||||||
depend OPT
|
depend OPT
|
||||||
|
|||||||
474
src/GPU/pair_dpd_coul_slater_long_gpu.cpp
Normal file
474
src/GPU/pair_dpd_coul_slater_long_gpu.cpp
Normal file
@ -0,0 +1,474 @@
|
|||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
|
||||||
|
https://www.lammps.org/, Sandia National Laboratories
|
||||||
|
LAMMPS development team: developers@lammps.org
|
||||||
|
|
||||||
|
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: Eddy BARRAUD (IFPEN/Sorbonne)
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
#include "pair_dpd_coul_slater_long_gpu.h"
|
||||||
|
|
||||||
|
#include "atom.h"
|
||||||
|
#include "comm.h"
|
||||||
|
#include "domain.h"
|
||||||
|
#include "error.h"
|
||||||
|
#include "force.h"
|
||||||
|
#include "gpu_extra.h"
|
||||||
|
#include "neigh_list.h"
|
||||||
|
#include "neighbor.h"
|
||||||
|
#include "suffix.h"
|
||||||
|
#include "update.h"
|
||||||
|
|
||||||
|
#include "ewald_const.h"
|
||||||
|
#include "kspace.h"
|
||||||
|
|
||||||
|
#include <cmath>
|
||||||
|
#include <cstring>
|
||||||
|
|
||||||
|
using namespace LAMMPS_NS;
|
||||||
|
using namespace EwaldConst;
|
||||||
|
|
||||||
|
// External functions from cuda library for atom decomposition
|
||||||
|
|
||||||
|
int dpd_coul_slater_long_gpu_init(const int ntypes, double **cutsq, double **host_a0,
|
||||||
|
double **host_gamma, double **host_sigma, double **host_cut_dpd,
|
||||||
|
double **host_cut_dpdsq, double **host_cut_slatersq,
|
||||||
|
double *special_lj, const int inum, const int nall,
|
||||||
|
const int max_nbors, const int maxspecial,
|
||||||
|
const double cell_size, int &gpu_mode, FILE *screen,
|
||||||
|
double *host_special_coul, const double qqrd2e,
|
||||||
|
const double g_ewald, const double lamda);
|
||||||
|
void dpd_coul_slater_long_gpu_clear();
|
||||||
|
int **dpd_coul_slater_long_gpu_compute_n(const int ago, const int inum_full, const int nall,
|
||||||
|
double **host_x, int *host_type, double *sublo,
|
||||||
|
double *subhi, tagint *tag, int **nspecial,
|
||||||
|
tagint **special, const bool eflag, const bool vflag,
|
||||||
|
const bool eatom, const bool vatom, int &host_start,
|
||||||
|
int **ilist, int **jnum, const double cpu_time,
|
||||||
|
bool &success, double **host_v, const double dtinvsqrt,
|
||||||
|
const int seed, const int timestep, double *boxlo,
|
||||||
|
double *prd);
|
||||||
|
void dpd_coul_slater_long_gpu_compute(const int ago, const int inum_full, const int nall,
|
||||||
|
double **host_x, int *host_type, int *ilist, int *numj,
|
||||||
|
int **firstneigh, const bool eflag, const bool vflag,
|
||||||
|
const bool eatom, const bool vatom, int &host_start,
|
||||||
|
const double cpu_time, bool &success, tagint *tag,
|
||||||
|
double **host_v, const double dtinvsqrt, const int seed,
|
||||||
|
const int timestep, const int nlocal, double *boxlo,
|
||||||
|
double *prd);
|
||||||
|
|
||||||
|
void dpd_coul_slater_long_gpu_get_extra_data(double *host_q);
|
||||||
|
|
||||||
|
double dpd_coul_slater_long_gpu_bytes();
|
||||||
|
|
||||||
|
static constexpr double EPSILON = 1.0e-10;
|
||||||
|
|
||||||
|
//#define _USE_UNIFORM_SARU_LCG
|
||||||
|
//#define _USE_UNIFORM_SARU_TEA8
|
||||||
|
//#define _USE_GAUSSIAN_SARU_LCG
|
||||||
|
|
||||||
|
#if !defined(_USE_UNIFORM_SARU_LCG) && !defined(_USE_UNIFORM_SARU_TEA8) && \
|
||||||
|
!defined(_USE_GAUSSIAN_SARU_LCG)
|
||||||
|
#define _USE_UNIFORM_SARU_LCG
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// References:
|
||||||
|
// 1. Y. Afshar, F. Schmid, A. Pishevar, S. Worley, Comput. Phys. Comm. 184 (2013), 1119–1128.
|
||||||
|
// 2. C. L. Phillips, J. A. Anderson, S. C. Glotzer, Comput. Phys. Comm. 230 (2011), 7191-7201.
|
||||||
|
// PRNG period = 3666320093*2^32 ~ 2^64 ~ 10^19
|
||||||
|
|
||||||
|
#define LCGA 0x4beb5d59 // Full period 32 bit LCG
|
||||||
|
#define LCGC 0x2600e1f7
|
||||||
|
#define oWeylPeriod 0xda879add // Prime period 3666320093
|
||||||
|
#define oWeylOffset 0x8009d14b
|
||||||
|
#define TWO_N32 0.232830643653869628906250e-9f /* 2^-32 */
|
||||||
|
|
||||||
|
// specifically implemented for steps = 1; high = 1.0; low = -1.0
|
||||||
|
// returns uniformly distributed random numbers u in [-1.0;1.0]
|
||||||
|
// using the inherent LCG, then multiply u with sqrt(3) to "match"
|
||||||
|
// with a normal random distribution.
|
||||||
|
// Afshar et al. mutlplies u in [-0.5;0.5] with sqrt(12)
|
||||||
|
// Curly brackets to make variables local to the scope.
|
||||||
|
#ifdef _USE_UNIFORM_SARU_LCG
|
||||||
|
#define numtyp double
|
||||||
|
#define SQRT3 (numtyp) 1.7320508075688772935274463
|
||||||
|
#define saru(seed1, seed2, seed, timestep, randnum) \
|
||||||
|
{ \
|
||||||
|
unsigned int seed3 = seed + timestep; \
|
||||||
|
seed3 ^= (seed1 << 7) ^ (seed2 >> 6); \
|
||||||
|
seed2 += (seed1 >> 4) ^ (seed3 >> 15); \
|
||||||
|
seed1 ^= (seed2 << 9) + (seed3 << 8); \
|
||||||
|
seed3 ^= 0xA5366B4D * ((seed2 >> 11) ^ (seed1 << 1)); \
|
||||||
|
seed2 += 0x72BE1579 * ((seed1 << 4) ^ (seed3 >> 16)); \
|
||||||
|
seed1 ^= 0x3F38A6ED * ((seed3 >> 5) ^ (((signed int) seed2) >> 22)); \
|
||||||
|
seed2 += seed1 * seed3; \
|
||||||
|
seed1 += seed3 ^ (seed2 >> 2); \
|
||||||
|
seed2 ^= ((signed int) seed2) >> 17; \
|
||||||
|
unsigned int state = 0x79dedea3 * (seed1 ^ (((signed int) seed1) >> 14)); \
|
||||||
|
unsigned int wstate = (state + seed2) ^ (((signed int) state) >> 8); \
|
||||||
|
state = state + (wstate * (wstate ^ 0xdddf97f5)); \
|
||||||
|
wstate = 0xABCB96F7 + (wstate >> 1); \
|
||||||
|
state = LCGA * state + LCGC; \
|
||||||
|
wstate = wstate + oWeylOffset + ((((signed int) wstate) >> 31) & oWeylPeriod); \
|
||||||
|
unsigned int v = (state ^ (state >> 26)) + wstate; \
|
||||||
|
unsigned int s = (signed int) ((v ^ (v >> 20)) * 0x6957f5a7); \
|
||||||
|
randnum = SQRT3 * (s * TWO_N32 * (numtyp) 2.0 - (numtyp) 1.0); \
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// specifically implemented for steps = 1; high = 1.0; low = -1.0
|
||||||
|
// returns uniformly distributed random numbers u in [-1.0;1.0] using TEA8
|
||||||
|
// then multiply u with sqrt(3) to "match" with a normal random distribution
|
||||||
|
// Afshar et al. mutlplies u in [-0.5;0.5] with sqrt(12)
|
||||||
|
#ifdef _USE_UNIFORM_SARU_TEA8
|
||||||
|
#define numtyp double
|
||||||
|
#define SQRT3 (numtyp) 1.7320508075688772935274463
|
||||||
|
#define k0 0xA341316C
|
||||||
|
#define k1 0xC8013EA4
|
||||||
|
#define k2 0xAD90777D
|
||||||
|
#define k3 0x7E95761E
|
||||||
|
#define delta 0x9e3779b9
|
||||||
|
#define rounds 8
|
||||||
|
#define saru(seed1, seed2, seed, timestep, randnum) \
|
||||||
|
{ \
|
||||||
|
unsigned int seed3 = seed + timestep; \
|
||||||
|
seed3 ^= (seed1 << 7) ^ (seed2 >> 6); \
|
||||||
|
seed2 += (seed1 >> 4) ^ (seed3 >> 15); \
|
||||||
|
seed1 ^= (seed2 << 9) + (seed3 << 8); \
|
||||||
|
seed3 ^= 0xA5366B4D * ((seed2 >> 11) ^ (seed1 << 1)); \
|
||||||
|
seed2 += 0x72BE1579 * ((seed1 << 4) ^ (seed3 >> 16)); \
|
||||||
|
seed1 ^= 0x3F38A6ED * ((seed3 >> 5) ^ (((signed int) seed2) >> 22)); \
|
||||||
|
seed2 += seed1 * seed3; \
|
||||||
|
seed1 += seed3 ^ (seed2 >> 2); \
|
||||||
|
seed2 ^= ((signed int) seed2) >> 17; \
|
||||||
|
unsigned int state = 0x79dedea3 * (seed1 ^ (((signed int) seed1) >> 14)); \
|
||||||
|
unsigned int wstate = (state + seed2) ^ (((signed int) state) >> 8); \
|
||||||
|
state = state + (wstate * (wstate ^ 0xdddf97f5)); \
|
||||||
|
wstate = 0xABCB96F7 + (wstate >> 1); \
|
||||||
|
unsigned int sum = 0; \
|
||||||
|
for (int i = 0; i < rounds; i++) { \
|
||||||
|
sum += delta; \
|
||||||
|
state += ((wstate << 4) + k0) ^ (wstate + sum) ^ ((wstate >> 5) + k1); \
|
||||||
|
wstate += ((state << 4) + k2) ^ (state + sum) ^ ((state >> 5) + k3); \
|
||||||
|
} \
|
||||||
|
unsigned int v = (state ^ (state >> 26)) + wstate; \
|
||||||
|
unsigned int s = (signed int) ((v ^ (v >> 20)) * 0x6957f5a7); \
|
||||||
|
randnum = SQRT3 * (s * TWO_N32 * (numtyp) 2.0 - (numtyp) 1.0); \
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// specifically implemented for steps = 1; high = 1.0; low = -1.0
|
||||||
|
// returns two uniformly distributed random numbers r1 and r2 in [-1.0;1.0],
|
||||||
|
// and uses the polar method (Marsaglia's) to transform to a normal random value
|
||||||
|
// This is used to compared with CPU DPD using RandMars::gaussian()
|
||||||
|
#ifdef _USE_GAUSSIAN_SARU_LCG
|
||||||
|
#define numtyp double
|
||||||
|
#define saru(seed1, seed2, seed, timestep, randnum) \
|
||||||
|
{ \
|
||||||
|
unsigned int seed3 = seed + timestep; \
|
||||||
|
seed3 ^= (seed1 << 7) ^ (seed2 >> 6); \
|
||||||
|
seed2 += (seed1 >> 4) ^ (seed3 >> 15); \
|
||||||
|
seed1 ^= (seed2 << 9) + (seed3 << 8); \
|
||||||
|
seed3 ^= 0xA5366B4D * ((seed2 >> 11) ^ (seed1 << 1)); \
|
||||||
|
seed2 += 0x72BE1579 * ((seed1 << 4) ^ (seed3 >> 16)); \
|
||||||
|
seed1 ^= 0x3F38A6ED * ((seed3 >> 5) ^ (((signed int) seed2) >> 22)); \
|
||||||
|
seed2 += seed1 * seed3; \
|
||||||
|
seed1 += seed3 ^ (seed2 >> 2); \
|
||||||
|
seed2 ^= ((signed int) seed2) >> 17; \
|
||||||
|
unsigned int state = 0x12345678; \
|
||||||
|
unsigned int wstate = 12345678; \
|
||||||
|
state = 0x79dedea3 * (seed1 ^ (((signed int) seed1) >> 14)); \
|
||||||
|
wstate = (state + seed2) ^ (((signed int) state) >> 8); \
|
||||||
|
state = state + (wstate * (wstate ^ 0xdddf97f5)); \
|
||||||
|
wstate = 0xABCB96F7 + (wstate >> 1); \
|
||||||
|
unsigned int v, s; \
|
||||||
|
numtyp r1, r2, rsq; \
|
||||||
|
while (1) { \
|
||||||
|
state = LCGA * state + LCGC; \
|
||||||
|
wstate = wstate + oWeylOffset + ((((signed int) wstate) >> 31) & oWeylPeriod); \
|
||||||
|
v = (state ^ (state >> 26)) + wstate; \
|
||||||
|
s = (signed int) ((v ^ (v >> 20)) * 0x6957f5a7); \
|
||||||
|
r1 = s * TWO_N32 * (numtyp) 2.0 - (numtyp) 1.0; \
|
||||||
|
state = LCGA * state + LCGC; \
|
||||||
|
wstate = wstate + oWeylOffset + ((((signed int) wstate) >> 31) & oWeylPeriod); \
|
||||||
|
v = (state ^ (state >> 26)) + wstate; \
|
||||||
|
s = (signed int) ((v ^ (v >> 20)) * 0x6957f5a7); \
|
||||||
|
r2 = s * TWO_N32 * (numtyp) 2.0 - (numtyp) 1.0; \
|
||||||
|
rsq = r1 * r1 + r2 * r2; \
|
||||||
|
if (rsq < (numtyp) 1.0) break; \
|
||||||
|
} \
|
||||||
|
numtyp fac = sqrt((numtyp) -2.0 * log(rsq) / rsq); \
|
||||||
|
randnum = r2 * fac; \
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
PairDPDCoulSlaterLongGPU::PairDPDCoulSlaterLongGPU(LAMMPS *lmp) : PairDPDCoulSlaterLong(lmp), gpu_mode(GPU_FORCE)
|
||||||
|
{
|
||||||
|
respa_enable = 0;
|
||||||
|
reinitflag = 0;
|
||||||
|
cpu_time = 0.0;
|
||||||
|
suffix_flag |= Suffix::GPU;
|
||||||
|
GPU_EXTRA::gpu_ready(lmp->modify, lmp->error);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
free all arrays
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
PairDPDCoulSlaterLongGPU::~PairDPDCoulSlaterLongGPU()
|
||||||
|
{
|
||||||
|
dpd_coul_slater_long_gpu_clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void PairDPDCoulSlaterLongGPU::compute(int eflag, int vflag)
|
||||||
|
{
|
||||||
|
ev_init(eflag, vflag);
|
||||||
|
|
||||||
|
int nall = atom->nlocal + atom->nghost;
|
||||||
|
int inum, host_start;
|
||||||
|
|
||||||
|
double dtinvsqrt = 1.0 / sqrt(update->dt);
|
||||||
|
|
||||||
|
bool success = true;
|
||||||
|
int *ilist, *numneigh, **firstneigh;
|
||||||
|
|
||||||
|
double *q = atom->q;
|
||||||
|
dpd_coul_slater_long_gpu_get_extra_data(q);
|
||||||
|
|
||||||
|
if (gpu_mode != GPU_FORCE) {
|
||||||
|
double sublo[3], subhi[3];
|
||||||
|
if (domain->triclinic == 0) {
|
||||||
|
sublo[0] = domain->sublo[0];
|
||||||
|
sublo[1] = domain->sublo[1];
|
||||||
|
sublo[2] = domain->sublo[2];
|
||||||
|
subhi[0] = domain->subhi[0];
|
||||||
|
subhi[1] = domain->subhi[1];
|
||||||
|
subhi[2] = domain->subhi[2];
|
||||||
|
} else {
|
||||||
|
domain->bbox(domain->sublo_lamda, domain->subhi_lamda, sublo, subhi);
|
||||||
|
}
|
||||||
|
inum = atom->nlocal;
|
||||||
|
firstneigh = dpd_coul_slater_long_gpu_compute_n(
|
||||||
|
neighbor->ago, inum, nall, atom->x, atom->type, sublo, subhi, atom->tag, atom->nspecial,
|
||||||
|
atom->special, eflag, vflag, eflag_atom, vflag_atom, host_start, &ilist, &numneigh,
|
||||||
|
cpu_time, success, atom->v, dtinvsqrt, seed, update->ntimestep, domain->boxlo, domain->prd);
|
||||||
|
} else {
|
||||||
|
inum = list->inum;
|
||||||
|
ilist = list->ilist;
|
||||||
|
numneigh = list->numneigh;
|
||||||
|
firstneigh = list->firstneigh;
|
||||||
|
dpd_coul_slater_long_gpu_compute(neighbor->ago, inum, nall, atom->x, atom->type, ilist, numneigh, firstneigh,
|
||||||
|
eflag, vflag, eflag_atom, vflag_atom, host_start, cpu_time, success, atom->tag,
|
||||||
|
atom->v, dtinvsqrt, seed, update->ntimestep, atom->nlocal, domain->boxlo,
|
||||||
|
domain->prd);
|
||||||
|
}
|
||||||
|
if (!success) error->one(FLERR, "Insufficient memory on accelerator");
|
||||||
|
|
||||||
|
if (atom->molecular != Atom::ATOMIC && neighbor->ago == 0)
|
||||||
|
neighbor->build_topology();
|
||||||
|
if (host_start < inum) {
|
||||||
|
cpu_time = platform::walltime();
|
||||||
|
cpu_compute(host_start, inum, eflag, vflag, ilist, numneigh, firstneigh);
|
||||||
|
cpu_time = platform::walltime() - cpu_time;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
init specific to this pair style
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void PairDPDCoulSlaterLongGPU::init_style()
|
||||||
|
{
|
||||||
|
|
||||||
|
if (comm->ghost_velocity == 0)
|
||||||
|
error->all(FLERR,"Pair dpd requires ghost atoms store velocity");
|
||||||
|
if (!atom->q_flag)
|
||||||
|
error->all(FLERR,"Pair style coul/slater/long requires atom attribute q");
|
||||||
|
// ensure use of KSpace long-range solver, set g_ewald
|
||||||
|
if (force->kspace == nullptr) error->all(FLERR, "Pair style requires a KSpace style");
|
||||||
|
g_ewald = force->kspace->g_ewald;
|
||||||
|
|
||||||
|
// Repeat cutsq calculation because done after call to init_style
|
||||||
|
double maxcut = -1.0;
|
||||||
|
double mcut;
|
||||||
|
for (int i = 1; i <= atom->ntypes; i++) {
|
||||||
|
for (int j = i; j <= atom->ntypes; j++) {
|
||||||
|
if (setflag[i][j] != 0 || (setflag[i][i] != 0 && setflag[j][j] != 0)) {
|
||||||
|
mcut = init_one(i, j);
|
||||||
|
mcut *= mcut;
|
||||||
|
if (mcut > maxcut) maxcut = mcut;
|
||||||
|
cutsq[i][j] = cutsq[j][i] = mcut;
|
||||||
|
} else
|
||||||
|
cutsq[i][j] = cutsq[j][i] = 0.0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
double cell_size = sqrt(maxcut) + neighbor->skin;
|
||||||
|
|
||||||
|
int maxspecial = 0;
|
||||||
|
if (atom->molecular != Atom::ATOMIC) maxspecial = atom->maxspecial;
|
||||||
|
int mnf = 5e-2 * neighbor->oneatom;
|
||||||
|
int success =
|
||||||
|
dpd_coul_slater_long_gpu_init(atom->ntypes + 1, cutsq, a0, gamma, sigma,
|
||||||
|
cut_dpd, cut_dpdsq, cut_slatersq, force->special_lj, atom->nlocal,
|
||||||
|
atom->nlocal + atom->nghost, mnf, maxspecial, cell_size, gpu_mode, screen,
|
||||||
|
force->special_coul, force->qqrd2e, g_ewald, lamda);
|
||||||
|
GPU_EXTRA::check_flag(success, error, world);
|
||||||
|
|
||||||
|
if (gpu_mode == GPU_FORCE) neighbor->add_request(this, NeighConst::REQ_FULL);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
double PairDPDCoulSlaterLongGPU::memory_usage()
|
||||||
|
{
|
||||||
|
double bytes = Pair::memory_usage();
|
||||||
|
return bytes + dpd_coul_slater_long_gpu_bytes();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void PairDPDCoulSlaterLongGPU::cpu_compute(int start, int inum, int eflag, int /* vflag */, int *ilist,
|
||||||
|
int *numneigh, int **firstneigh)
|
||||||
|
{
|
||||||
|
int i, j, ii, jj, jnum, itype, jtype;
|
||||||
|
double qtmp, xtmp, ytmp, ztmp, delx, dely, delz, evdwl, ecoul, fpair;
|
||||||
|
double vxtmp, vytmp, vztmp, delvx, delvy, delvz;
|
||||||
|
double r2inv,forcedpd,forcecoul,factor_coul;
|
||||||
|
double grij,expm2,prefactor,t,erfc;
|
||||||
|
double rsq,r,rinv,dot,wd,randnum,factor_dpd,factor_sqrt;
|
||||||
|
int *jlist;
|
||||||
|
double slater_term;
|
||||||
|
|
||||||
|
tagint itag, jtag;
|
||||||
|
|
||||||
|
double *q = atom->q;
|
||||||
|
double *special_coul = force->special_coul;
|
||||||
|
double qqrd2e = force->qqrd2e;
|
||||||
|
|
||||||
|
evdwl = 0.0;
|
||||||
|
ecoul = 0.0;
|
||||||
|
|
||||||
|
double **x = atom->x;
|
||||||
|
double **v = atom->v;
|
||||||
|
double **f = atom->f;
|
||||||
|
int *type = atom->type;
|
||||||
|
tagint *tag = atom->tag;
|
||||||
|
double *special_lj = force->special_lj;
|
||||||
|
double dtinvsqrt = 1.0 / sqrt(update->dt);
|
||||||
|
int timestep = (int) update->ntimestep;
|
||||||
|
|
||||||
|
// loop over neighbors of my atoms
|
||||||
|
|
||||||
|
for (ii = start; ii < inum; ii++) {
|
||||||
|
i = ilist[ii];
|
||||||
|
qtmp = q[i];
|
||||||
|
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];
|
||||||
|
itag = tag[i];
|
||||||
|
jlist = firstneigh[i];
|
||||||
|
jnum = numneigh[i];
|
||||||
|
|
||||||
|
for (jj = 0; jj < jnum; jj++) {
|
||||||
|
j = jlist[jj];
|
||||||
|
factor_dpd = special_lj[sbmask(j)];
|
||||||
|
factor_sqrt = special_sqrt[sbmask(j)];
|
||||||
|
factor_coul = special_coul[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];
|
||||||
|
jtag = tag[j];
|
||||||
|
|
||||||
|
// forces if below maximum cutoff
|
||||||
|
if (rsq < cutsq[itype][jtype]) {
|
||||||
|
r = sqrt(rsq);
|
||||||
|
if (evflag) evdwl = ecoul = 0.0;
|
||||||
|
// apply DPD force if distance below DPD cutoff
|
||||||
|
if (rsq < cut_dpdsq[itype][jtype] && r > EPSILON ) {
|
||||||
|
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 / cut[itype][jtype];
|
||||||
|
|
||||||
|
unsigned int tag1 = itag, tag2 = jtag;
|
||||||
|
if (tag1 > tag2) {
|
||||||
|
tag1 = jtag;
|
||||||
|
tag2 = itag;
|
||||||
|
}
|
||||||
|
|
||||||
|
randnum = 0.0;
|
||||||
|
saru(tag1, tag2, seed, timestep, randnum);
|
||||||
|
|
||||||
|
// conservative force = a0 * wd
|
||||||
|
// drag force = -gamma * wd^2 * (delx dot delv) / r
|
||||||
|
// random force = sigma * wd * rnd * dtinvsqrt;
|
||||||
|
forcedpd = a0[itype][jtype]*wd;
|
||||||
|
forcedpd -= gamma[itype][jtype]*wd*wd*dot*rinv;
|
||||||
|
forcedpd *= factor_dpd;
|
||||||
|
forcedpd += factor_sqrt*sigma[itype][jtype]*wd*randnum*dtinvsqrt;
|
||||||
|
forcedpd *= rinv;
|
||||||
|
|
||||||
|
if (eflag) {
|
||||||
|
// eng shifted to 0.0 at cutoff
|
||||||
|
evdwl = 0.5*a0[itype][jtype]*cut_dpd[itype][jtype] * wd*wd;
|
||||||
|
evdwl *= factor_dpd;
|
||||||
|
}
|
||||||
|
|
||||||
|
} else forcedpd = 0.0;
|
||||||
|
|
||||||
|
// apply Slater electrostatic force if distance below Slater cutoff
|
||||||
|
// and the two species are charged
|
||||||
|
if (rsq < cut_slatersq[itype][jtype]){
|
||||||
|
r2inv = 1.0/rsq;
|
||||||
|
grij = g_ewald * r;
|
||||||
|
expm2 = exp(-grij*grij);
|
||||||
|
t = 1.0 / (1.0 + EWALD_P*grij);
|
||||||
|
erfc = t * (A1+t*(A2+t*(A3+t*(A4+t*A5)))) * expm2;
|
||||||
|
slater_term = exp(-2*r/lamda)*(1 + (2*r/lamda*(1+r/lamda)));
|
||||||
|
prefactor = qqrd2e * qtmp*q[j]/r;
|
||||||
|
forcecoul = prefactor * (erfc + EWALD_F*grij*expm2 - slater_term);
|
||||||
|
if (factor_coul < 1.0) forcecoul -= (1.0-factor_coul)*prefactor*(1-slater_term);
|
||||||
|
forcecoul *= r2inv;
|
||||||
|
|
||||||
|
if (eflag) {
|
||||||
|
ecoul = prefactor*(erfc - (1 + r/lamda)*exp(-2*r/lamda));
|
||||||
|
if (factor_coul < 1.0) ecoul -= (1.0-factor_coul)*prefactor*(1.0-(1 + r/lamda)*exp(-2*r/lamda));
|
||||||
|
}
|
||||||
|
|
||||||
|
} else forcecoul = 0.0;
|
||||||
|
|
||||||
|
fpair = forcedpd + forcecoul;
|
||||||
|
|
||||||
|
f[i][0] += delx * fpair;
|
||||||
|
f[i][1] += dely * fpair;
|
||||||
|
f[i][2] += delz * fpair;
|
||||||
|
|
||||||
|
if (evflag) ev_tally_full(i, evdwl, ecoul, fpair, delx, dely, delz);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
45
src/GPU/pair_dpd_coul_slater_long_gpu.h
Normal file
45
src/GPU/pair_dpd_coul_slater_long_gpu.h
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
/* -*- c++ -*- ----------------------------------------------------------
|
||||||
|
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
|
||||||
|
https://www.lammps.org/, Sandia National Laboratories
|
||||||
|
LAMMPS development team: developers@lammps.org
|
||||||
|
|
||||||
|
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/coul/slater/long/gpu,PairDPDCoulSlaterLongGPU);
|
||||||
|
// clang-format on
|
||||||
|
#else
|
||||||
|
|
||||||
|
#ifndef LMP_PAIR_DPD_COUL_SLATER_LONG_GPU_H
|
||||||
|
#define LMP_PAIR_DPD_COUL_SLATER_LONG_GPU_H
|
||||||
|
|
||||||
|
#include "pair_dpd_coul_slater_long.h"
|
||||||
|
|
||||||
|
namespace LAMMPS_NS {
|
||||||
|
|
||||||
|
class PairDPDCoulSlaterLongGPU : public PairDPDCoulSlaterLong {
|
||||||
|
public:
|
||||||
|
PairDPDCoulSlaterLongGPU(LAMMPS *lmp);
|
||||||
|
~PairDPDCoulSlaterLongGPU() override;
|
||||||
|
void cpu_compute(int, int, int, int, int *, int *, int **);
|
||||||
|
void compute(int, int) override;
|
||||||
|
void init_style() override;
|
||||||
|
double memory_usage() override;
|
||||||
|
|
||||||
|
enum { GPU_FORCE, GPU_NEIGH, GPU_HYB_NEIGH };
|
||||||
|
|
||||||
|
private:
|
||||||
|
int gpu_mode;
|
||||||
|
double cpu_time;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace LAMMPS_NS
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
@ -205,6 +205,7 @@ FixPlumed::FixPlumed(LAMMPS *lmp, int narg, char **arg) :
|
|||||||
double dt=update->dt;
|
double dt=update->dt;
|
||||||
p->cmd("setTimestep",&dt);
|
p->cmd("setTimestep",&dt);
|
||||||
|
|
||||||
|
extscalar = 1;
|
||||||
scalar_flag = 1;
|
scalar_flag = 1;
|
||||||
energy_global_flag = virial_global_flag = 1;
|
energy_global_flag = virial_global_flag = 1;
|
||||||
thermo_energy = thermo_virial = 1;
|
thermo_energy = thermo_virial = 1;
|
||||||
|
|||||||
@ -1198,14 +1198,31 @@ internally by the :doc:`Fortran interface <Fortran>` and are not likely to be us
|
|||||||
* - triclinic
|
* - triclinic
|
||||||
- 1 if the the simulation box is triclinic, 0 if orthogonal.
|
- 1 if the the simulation box is triclinic, 0 if orthogonal.
|
||||||
See :doc:`change_box`.
|
See :doc:`change_box`.
|
||||||
|
|
||||||
|
**Communication status**
|
||||||
|
|
||||||
|
.. list-table::
|
||||||
|
:header-rows: 1
|
||||||
|
:widths: auto
|
||||||
|
|
||||||
|
* - Keyword
|
||||||
|
- Description / Return value
|
||||||
* - universe_rank
|
* - universe_rank
|
||||||
- MPI rank on LAMMPS' universe communicator (0 <= universe_rank < universe_size)
|
- MPI rank on LAMMPS' universe communicator (0 <= universe_rank < universe_size)
|
||||||
* - universe_size
|
* - universe_size
|
||||||
- Number of ranks on LAMMPS' universe communicator (world_size <= universe_size)
|
- Number of ranks on LAMMPS' universe communicator (world_size <= universe_size)
|
||||||
* - world_rank
|
* - world_rank
|
||||||
- MPI rank on LAMMPS' world communicator (0 <= world_rank < world_size)
|
- MPI rank on LAMMPS' world communicator (0 <= world_rank < world_size, aka comm->me)
|
||||||
* - world_size
|
* - world_size
|
||||||
- Number of ranks on LAMMPS' world communicator
|
- Number of ranks on LAMMPS' world communicator (aka comm->nprocs)
|
||||||
|
* - comm_style
|
||||||
|
- communication style (0 = BRICK, 1 = TILED)
|
||||||
|
* - comm_layout
|
||||||
|
- communication layout (0 = LAYOUT_UNIFORM, 1 = LAYOUT_NONUNIFORM, 2 = LAYOUT_TILED)
|
||||||
|
* - comm_mode
|
||||||
|
- communication mode (0 = SINGLE, 1 = MULTI, 2 = MULTIOLD)
|
||||||
|
* - ghost_velocity
|
||||||
|
- whether velocities are communicated for ghost atoms (0 = no, 1 = yes)
|
||||||
|
|
||||||
.. _extract_system_sizes:
|
.. _extract_system_sizes:
|
||||||
|
|
||||||
@ -1310,6 +1327,10 @@ int lammps_extract_setting(void *handle, const char *keyword)
|
|||||||
if (strcmp(keyword,"world_rank") == 0) return lmp->comm->me;
|
if (strcmp(keyword,"world_rank") == 0) return lmp->comm->me;
|
||||||
if (strcmp(keyword,"world_size") == 0) return lmp->comm->nprocs;
|
if (strcmp(keyword,"world_size") == 0) return lmp->comm->nprocs;
|
||||||
if (strcmp(keyword,"nthreads") == 0) return lmp->comm->nthreads;
|
if (strcmp(keyword,"nthreads") == 0) return lmp->comm->nthreads;
|
||||||
|
if (strcmp(keyword,"comm_style") == 0) return lmp->comm->style;
|
||||||
|
if (strcmp(keyword,"comm_layout") == 0) return lmp->comm->layout;
|
||||||
|
if (strcmp(keyword,"comm_mode") == 0) return lmp->comm->mode;
|
||||||
|
if (strcmp(keyword,"ghost_velocity") == 0) return lmp->comm->ghost_velocity;
|
||||||
|
|
||||||
if (strcmp(keyword,"nlocal") == 0) return lmp->atom->nlocal;
|
if (strcmp(keyword,"nlocal") == 0) return lmp->atom->nlocal;
|
||||||
if (strcmp(keyword,"nghost") == 0) return lmp->atom->nghost;
|
if (strcmp(keyword,"nghost") == 0) return lmp->atom->nghost;
|
||||||
@ -1386,6 +1407,7 @@ int lammps_extract_global_datatype(void * /*handle*/, const char *name)
|
|||||||
if (strcmp(name,"xy") == 0) return LAMMPS_DOUBLE;
|
if (strcmp(name,"xy") == 0) return LAMMPS_DOUBLE;
|
||||||
if (strcmp(name,"xz") == 0) return LAMMPS_DOUBLE;
|
if (strcmp(name,"xz") == 0) return LAMMPS_DOUBLE;
|
||||||
if (strcmp(name,"yz") == 0) return LAMMPS_DOUBLE;
|
if (strcmp(name,"yz") == 0) return LAMMPS_DOUBLE;
|
||||||
|
if (strcmp(name,"procgrid") == 0) return LAMMPS_INT;
|
||||||
|
|
||||||
if (strcmp(name,"natoms") == 0) return LAMMPS_BIGINT;
|
if (strcmp(name,"natoms") == 0) return LAMMPS_BIGINT;
|
||||||
if (strcmp(name,"nbonds") == 0) return LAMMPS_BIGINT;
|
if (strcmp(name,"nbonds") == 0) return LAMMPS_BIGINT;
|
||||||
@ -1604,6 +1626,10 @@ report the "native" data type. The following tables are provided:
|
|||||||
- double
|
- double
|
||||||
- 1
|
- 1
|
||||||
- triclinic tilt factor. See :doc:`Howto_triclinic`.
|
- triclinic tilt factor. See :doc:`Howto_triclinic`.
|
||||||
|
* - procgrid
|
||||||
|
- int
|
||||||
|
- 3
|
||||||
|
- processor count assigned to each dimension of 3d grid. See :doc:`processors`.
|
||||||
|
|
||||||
.. _extract_system_settings:
|
.. _extract_system_settings:
|
||||||
|
|
||||||
@ -1861,6 +1887,9 @@ void *lammps_extract_global(void *handle, const char *name)
|
|||||||
if (strcmp(name,"xy") == 0) return (void *) &lmp->domain->xy;
|
if (strcmp(name,"xy") == 0) return (void *) &lmp->domain->xy;
|
||||||
if (strcmp(name,"xz") == 0) return (void *) &lmp->domain->xz;
|
if (strcmp(name,"xz") == 0) return (void *) &lmp->domain->xz;
|
||||||
if (strcmp(name,"yz") == 0) return (void *) &lmp->domain->yz;
|
if (strcmp(name,"yz") == 0) return (void *) &lmp->domain->yz;
|
||||||
|
if (((lmp->comm->layout == Comm::LAYOUT_UNIFORM) ||
|
||||||
|
(lmp->comm->layout == Comm::LAYOUT_NONUNIFORM)) && (strcmp(name,"procgrid") == 0))
|
||||||
|
return (void *) &lmp->comm->procgrid;
|
||||||
|
|
||||||
if (strcmp(name,"natoms") == 0) return (void *) &lmp->atom->natoms;
|
if (strcmp(name,"natoms") == 0) return (void *) &lmp->atom->natoms;
|
||||||
if (strcmp(name,"ntypes") == 0) return (void *) &lmp->atom->ntypes;
|
if (strcmp(name,"ntypes") == 0) return (void *) &lmp->atom->ntypes;
|
||||||
|
|||||||
103
unittest/force-styles/tests/mol-pair-dpd_coul_slater_long.yaml
Normal file
103
unittest/force-styles/tests/mol-pair-dpd_coul_slater_long.yaml
Normal file
@ -0,0 +1,103 @@
|
|||||||
|
---
|
||||||
|
lammps_version: 17 Apr 2024
|
||||||
|
tags:
|
||||||
|
date_generated: Tue Jun 18 21:32:14 2024
|
||||||
|
epsilon: 5e-13
|
||||||
|
skip_tests: gpu intel kokkos_omp single
|
||||||
|
prerequisites: ! |
|
||||||
|
atom full
|
||||||
|
pair dpd/coul/slater/long
|
||||||
|
kspace ewald
|
||||||
|
pre_commands: ! |
|
||||||
|
variable newton_pair delete
|
||||||
|
variable newton_pair index on
|
||||||
|
comm_modify vel yes
|
||||||
|
post_commands: ! |
|
||||||
|
kspace_style ewald 1.0e-6
|
||||||
|
kspace_modify gewald 0.3
|
||||||
|
kspace_modify compute no
|
||||||
|
input_file: in.fourmol
|
||||||
|
pair_style: dpd/coul/slater/long 100.0 8.0 11223344 1.0 8.0
|
||||||
|
pair_coeff: ! |
|
||||||
|
* * 0.4 4.0 yes
|
||||||
|
1 1 0.4 4.0 yes
|
||||||
|
2 2 0.1 2.0 no
|
||||||
|
2 4 0.1 1.0
|
||||||
|
3 3 0.4 3.2 yes
|
||||||
|
4 4 0.3 3.1 yes
|
||||||
|
5 5 0.3 3.1 yes
|
||||||
|
extract: ! |
|
||||||
|
cut_coul 0
|
||||||
|
lamda 0
|
||||||
|
a0 2
|
||||||
|
gamma 2
|
||||||
|
natoms: 29
|
||||||
|
init_vdwl: 50.81607024833933
|
||||||
|
init_coul: 246.30486150616926
|
||||||
|
init_stress: ! |2-
|
||||||
|
3.8847917252197334e+01 6.0909421169945198e+01 1.3177337627459440e+01 -2.5125674673037557e-01 -2.6831071031318483e+01 -1.5576430133730318e+01
|
||||||
|
init_forces: ! |2
|
||||||
|
1 1.7431218673076398e+00 -3.3508607597652662e-01 -2.4777022847678101e+00
|
||||||
|
2 4.3303449895107429e+00 -4.7270196423904629e+00 8.9179383719117788e-01
|
||||||
|
3 -3.0026241136767506e-01 1.4898682537669559e+00 -2.9373470062765152e+00
|
||||||
|
4 5.2673340332969785e+00 -4.7092409943919726e+00 -1.4235077704192447e+00
|
||||||
|
5 -6.8022719083087080e-01 5.7354131392205714e+00 -3.4748110565769061e+00
|
||||||
|
6 -3.8215670358728731e+00 2.7445299161598462e+00 -2.7043379570240411e+00
|
||||||
|
7 -3.3428118289029851e+00 2.6368994495618775e-01 4.1564102694578011e+00
|
||||||
|
8 -7.7861329310896457e+00 8.2082649420572917e-01 4.8567883896169803e+00
|
||||||
|
9 3.1057899939121918e+00 -3.9223414133714560e+00 8.4873882988538636e+00
|
||||||
|
10 -4.1521241974355734e+00 2.6307631121111197e-01 3.4593985187994503e+00
|
||||||
|
11 1.8308032335061764e+00 2.2688626790466668e+00 2.1488881927591183e-01
|
||||||
|
12 -3.8361154861853802e-01 9.7381188622448867e-01 -2.9002001998530074e+00
|
||||||
|
13 3.7110360694271507e+00 -6.0293319508894081e+00 -3.2353735026836565e+00
|
||||||
|
14 -7.1298424060686427e-01 2.4558730338472174e+00 -1.4114476204389881e+00
|
||||||
|
15 6.4421713828496296e-01 2.6560445474171779e+00 4.1805189129601663e+00
|
||||||
|
16 2.4609814411173456e+00 1.0005691236622609e+00 -1.3310794681660751e+00
|
||||||
|
17 4.3419008357709892e+00 3.5242769399360668e-01 -3.0595452598808506e+00
|
||||||
|
18 -8.6307586369950978e-02 8.2040370677288337e+00 -5.3929118878835798e+00
|
||||||
|
19 6.1879926571299937e-01 2.5540397129551908e+00 1.5642703712618800e+00
|
||||||
|
20 -3.0582098014826045e+00 -4.2726657137759743e+00 3.7804333126216734e+00
|
||||||
|
21 3.4138725239637657e+00 -2.8998556794986174e+00 -3.3216284249543198e+00
|
||||||
|
22 8.3753401659388671e-01 6.0848461632864803e-01 5.5206263511303710e-01
|
||||||
|
23 1.6137939864950199e+00 -1.9075657957633927e+00 -1.1740851854919403e+00
|
||||||
|
24 -9.2620994683392499e-01 -3.2450229700911435e+00 -8.0867271168075465e+00
|
||||||
|
25 -1.3940090389654722e+00 5.2843663545938764e+00 3.5772359574449069e+00
|
||||||
|
26 3.9218467465706744e-02 1.1015801783435457e+00 1.8824821245496248e+00
|
||||||
|
27 -2.4611420161719555e+00 -1.9453626284928394e+00 -3.3205056628962853e-01
|
||||||
|
28 1.4062959703817013e+00 -1.5914533664642678e+00 2.6909036096293515e+00
|
||||||
|
29 -6.2594440581983282e+00 -3.1925547225558533e+00 2.9681802507382837e+00
|
||||||
|
run_vdwl: 50.80969849155796
|
||||||
|
run_coul: 246.30257595743123
|
||||||
|
run_stress: ! |2-
|
||||||
|
2.5169432057277767e+01 1.3291837479686518e+02 7.8314082956801457e+01 1.4188397409481186e+00 4.7717966551748061e+00 -6.3215212489343497e-01
|
||||||
|
run_forces: ! |2
|
||||||
|
1 -6.3863580151106092e-01 6.6929475226486339e+00 3.7704563748664892e+00
|
||||||
|
2 -4.3037556793948211e+00 9.5723509028532272e-02 -2.0030241717125286e+00
|
||||||
|
3 -1.2783833512172147e+00 1.7381921345191331e+00 -6.4662583653508925e+00
|
||||||
|
4 2.4827815076802873e+00 1.3730024199636431e-01 -2.0006851631917272e-01
|
||||||
|
5 4.7603332815631365e+00 -2.2528146831857900e+00 -3.4274535000597357e+00
|
||||||
|
6 -1.2817868583433294e+00 -5.9968609698691075e+00 -3.2762169423954415e+00
|
||||||
|
7 -6.6867815106826880e+00 -7.6943923258643654e-01 -2.6780134761760793e-01
|
||||||
|
8 -3.3343023480304996e+00 6.4339698400391008e+00 -6.4172530505932164e+00
|
||||||
|
9 -3.8353029345585190e+00 9.8394636146294001e+00 1.9174283216744969e+00
|
||||||
|
10 -2.7100348949081012e+00 1.4548533898989857e-01 -7.4888242419930628e-01
|
||||||
|
11 -3.5716272980494614e+00 -5.6333424874513238e-01 -1.7669409895579073e+00
|
||||||
|
12 8.7749889216756269e+00 -3.0182112894280873e+00 2.3328096163511405e+00
|
||||||
|
13 -7.1201394227081138e+00 8.5405234502858711e+00 4.5843737570467056e+00
|
||||||
|
14 -8.7413969567458588e-02 -3.7153733247848848e+00 -3.2874441379609167e+00
|
||||||
|
15 4.3120572612995609e+00 1.7256832039357071e+00 3.3428599179267393e-01
|
||||||
|
16 3.8021838909677803e+00 -1.3766365519719326e+01 2.2813835507927651e+00
|
||||||
|
17 4.9734505785815566e+00 -2.4146919042613795e+00 1.8287742974940246e+00
|
||||||
|
18 -1.7572559387593672e-03 3.8187261679342619e+00 -1.0584087358440382e+00
|
||||||
|
19 1.0838708527692988e+00 -6.6703633150528441e-01 -4.6973954164255893e-01
|
||||||
|
20 1.1923743451913014e+00 1.7419734493475330e+00 -3.6369159702300224e-01
|
||||||
|
21 2.3316248125417141e+00 -1.0849270685777668e+00 -3.2073997386907678e+00
|
||||||
|
22 2.6135216134985972e+00 -1.1025272637629011e+00 4.8873485142461329e-02
|
||||||
|
23 -1.2854577922712009e+00 -2.9253148869589518e+00 -4.6563146954583601e-01
|
||||||
|
24 -1.4021980080098731e-01 1.9672435672875048e+00 3.1379645935988041e+00
|
||||||
|
25 1.9085702323304496e+00 5.2270676739892066e+00 7.3556254244703823e+00
|
||||||
|
26 8.7357677171207004e-01 -1.1308292622526788e+00 -8.0741590972110988e-01
|
||||||
|
27 -1.1543680887940906e+00 -9.4513879574846338e-01 1.0062759048570287e+00
|
||||||
|
28 2.3730888896530073e+00 -1.9664779055036602e-01 1.0051483653476245e+00
|
||||||
|
29 -4.0524559526880868e+00 -7.5547871426945932e+00 4.6302307547994435e+00
|
||||||
|
...
|
||||||
@ -580,6 +580,37 @@ create_atoms 1 single &
|
|||||||
"Press" : 0.0}
|
"Press" : 0.0}
|
||||||
self.assertDictEqual(self.lmp.last_thermo(), ref)
|
self.assertDictEqual(self.lmp.last_thermo(), ref)
|
||||||
|
|
||||||
|
def test_extract_setting(self):
|
||||||
|
self.assertEqual(self.lmp.extract_setting("dimension"), 3)
|
||||||
|
self.assertEqual(self.lmp.extract_setting("box_exist"), 0)
|
||||||
|
self.assertEqual(self.lmp.extract_setting("kokkos_active"), 0)
|
||||||
|
self.assertEqual(self.lmp.extract_setting("kokkos_nthreads"), 0)
|
||||||
|
self.assertEqual(self.lmp.extract_setting("kokkos_ngpus"), 0)
|
||||||
|
self.lmp.command("region box block -1 1 -2 2 -3 3")
|
||||||
|
self.lmp.command("create_box 1 box")
|
||||||
|
self.lmp.command("special_bonds lj 0.0 0.5 0.8 coul 0.1 0.5 1.0")
|
||||||
|
self.assertEqual(self.lmp.extract_setting("newton_bond"), 1)
|
||||||
|
self.assertEqual(self.lmp.extract_setting("newton_pair"), 1)
|
||||||
|
self.assertEqual(self.lmp.extract_setting("triclinic"), 0)
|
||||||
|
self.assertEqual(self.lmp.extract_setting("universe_rank"), 0)
|
||||||
|
self.assertEqual(self.lmp.extract_setting("universe_size"), 1)
|
||||||
|
self.assertEqual(self.lmp.extract_setting("world_rank"), 0)
|
||||||
|
self.assertEqual(self.lmp.extract_setting("world_size"), 1)
|
||||||
|
self.assertEqual(self.lmp.extract_setting("triclinic"), 0)
|
||||||
|
self.assertEqual(self.lmp.extract_setting("comm_style"), 0)
|
||||||
|
self.assertEqual(self.lmp.extract_setting("comm_layout"), 0)
|
||||||
|
self.assertEqual(self.lmp.extract_setting("comm_mode"), 0)
|
||||||
|
self.assertEqual(self.lmp.extract_setting("ghost_velocity"), 0)
|
||||||
|
self.lmp.command("comm_style tiled")
|
||||||
|
self.lmp.command("comm_modify vel yes")
|
||||||
|
self.lmp.command("mass 1 1.0")
|
||||||
|
self.lmp.command("run 0 post no")
|
||||||
|
self.lmp.command("balance 0.1 rcb")
|
||||||
|
self.assertEqual(self.lmp.extract_setting("comm_style"), 1)
|
||||||
|
self.assertEqual(self.lmp.extract_setting("comm_layout"), 2)
|
||||||
|
self.assertEqual(self.lmp.extract_setting("comm_mode"), 0)
|
||||||
|
self.assertEqual(self.lmp.extract_setting("ghost_velocity"), 1)
|
||||||
|
|
||||||
def test_extract_global(self):
|
def test_extract_global(self):
|
||||||
self.lmp.command("region box block -1 1 -2 2 -3 3")
|
self.lmp.command("region box block -1 1 -2 2 -3 3")
|
||||||
self.lmp.command("create_box 1 box")
|
self.lmp.command("create_box 1 box")
|
||||||
@ -628,6 +659,13 @@ create_atoms 1 single &
|
|||||||
self.assertEqual(self.lmp.extract_global("sublo_lambda"), [0.0, 0.0, 0.0])
|
self.assertEqual(self.lmp.extract_global("sublo_lambda"), [0.0, 0.0, 0.0])
|
||||||
self.assertEqual(self.lmp.extract_global("subhi_lambda"), [1.0, 1.0, 1.0])
|
self.assertEqual(self.lmp.extract_global("subhi_lambda"), [1.0, 1.0, 1.0])
|
||||||
|
|
||||||
|
# processor grid
|
||||||
|
self.assertEqual(self.lmp.extract_global("procgrid"), [1,1,1])
|
||||||
|
self.lmp.command("comm_style tiled")
|
||||||
|
self.lmp.command("run 0 post no")
|
||||||
|
self.lmp.command("balance 0.1 rcb")
|
||||||
|
self.assertEqual(self.lmp.extract_global("procgrid"), None)
|
||||||
|
|
||||||
def test_create_atoms(self):
|
def test_create_atoms(self):
|
||||||
self.lmp.command("boundary f p m")
|
self.lmp.command("boundary f p m")
|
||||||
self.lmp.command("region box block 0 10 0 10 0 10")
|
self.lmp.command("region box block 0 10 0 10 0 10")
|
||||||
|
|||||||
@ -119,6 +119,10 @@ class PythonPyLammps(unittest.TestCase):
|
|||||||
self.assertEqual(self.pylmp.communication.comm_style,'brick')
|
self.assertEqual(self.pylmp.communication.comm_style,'brick')
|
||||||
self.assertEqual(self.pylmp.communication.comm_layout,'uniform')
|
self.assertEqual(self.pylmp.communication.comm_layout,'uniform')
|
||||||
self.assertEqual(self.pylmp.communication.nprocs,1)
|
self.assertEqual(self.pylmp.communication.nprocs,1)
|
||||||
|
self.assertEqual(self.pylmp.communication.nthreads,1)
|
||||||
|
self.assertEqual(self.pylmp.communication.procgrid,[1,1,1])
|
||||||
|
self.assertEqual(self.pylmp.communication.proc_grid,[1,1,1])
|
||||||
|
self.assertEqual(self.pylmp.communication.ghost_velocity,0)
|
||||||
self.assertEqual(len(self.pylmp.computes),3)
|
self.assertEqual(len(self.pylmp.computes),3)
|
||||||
self.assertEqual(self.pylmp.computes[0]['name'], 'thermo_temp')
|
self.assertEqual(self.pylmp.computes[0]['name'], 'thermo_temp')
|
||||||
self.assertEqual(self.pylmp.computes[0]['style'], 'temp')
|
self.assertEqual(self.pylmp.computes[0]['style'], 'temp')
|
||||||
@ -137,6 +141,11 @@ class PythonPyLammps(unittest.TestCase):
|
|||||||
self.assertEqual(self.pylmp.fixes[0]['group'], 'all')
|
self.assertEqual(self.pylmp.fixes[0]['group'], 'all')
|
||||||
self.pylmp.group('none','empty')
|
self.pylmp.group('none','empty')
|
||||||
self.assertEqual(len(self.pylmp.groups),2)
|
self.assertEqual(len(self.pylmp.groups),2)
|
||||||
|
self.pylmp.comm_style('tiled')
|
||||||
|
self.pylmp.mass('*',1.0)
|
||||||
|
self.pylmp.run('0','post','no')
|
||||||
|
self.pylmp.balance(0.1,'rcb')
|
||||||
|
self.assertEqual(self.pylmp.communication.procgrid,None)
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
|||||||
Reference in New Issue
Block a user