Merge pull request #3194 from robeme/electrode

ELECTRODE package for constant potential method
This commit is contained in:
Axel Kohlmeyer
2022-04-29 18:30:29 -04:00
committed by GitHub
127 changed files with 44688 additions and 12 deletions

View File

@ -209,6 +209,7 @@ set(STANDARD_PACKAGES
DPD-SMOOTH
DRUDE
EFF
ELECTRODE
EXTRA-COMPUTE
EXTRA-DUMP
EXTRA-FIX
@ -352,6 +353,7 @@ pkg_depends(DIELECTRIC KSPACE)
pkg_depends(DIELECTRIC EXTRA-PAIR)
pkg_depends(CG-DNA MOLECULE)
pkg_depends(CG-DNA ASPHERE)
pkg_depends(ELECTRODE KSPACE)
# detect if we may enable OpenMP support by default
set(BUILD_OMP_DEFAULT OFF)
@ -389,7 +391,7 @@ if(BUILD_OMP)
target_link_libraries(lmp PRIVATE OpenMP::OpenMP_CXX)
endif()
if(PKG_MSCG OR PKG_ATC OR PKG_AWPMD OR PKG_ML-QUIP OR PKG_LATTE)
if(PKG_MSCG OR PKG_ATC OR PKG_AWPMD OR PKG_ML-QUIP OR PKG_LATTE OR PKG_ELECTRODE)
enable_language(C)
find_package(LAPACK)
find_package(BLAS)
@ -593,6 +595,10 @@ foreach(PKG_LIB POEMS ATC AWPMD H5MD MESONT)
endif()
endforeach()
if(PKG_ELECTRODE)
target_link_libraries(lammps PRIVATE ${LAPACK_LIBRARIES})
endif()
if(PKG_AWPMD)
target_link_libraries(awpmd PRIVATE ${LAPACK_LIBRARIES})
endif()

View File

@ -112,5 +112,9 @@ if(PKG_KSPACE)
RegisterIntegrateStyle(${INTEL_SOURCES_DIR}/verlet_lrt_intel.h)
endif()
if(PKG_ELECTRODE)
list(APPEND INTEL_SOURCES ${INTEL_SOURCES_DIR}/electrode_accel_intel.cpp)
endif()
target_sources(lammps PRIVATE ${INTEL_SOURCES})
target_include_directories(lammps PRIVATE ${INTEL_SOURCES_DIR})

View File

@ -25,6 +25,7 @@ set(ALL_PACKAGES
DPD-REACT
DPD-SMOOTH
DRUDE
ELECTRODE
EFF
EXTRA-COMPUTE
EXTRA-DUMP

View File

@ -27,6 +27,7 @@ set(ALL_PACKAGES
DPD-REACT
DPD-SMOOTH
DRUDE
ELECTRODE
EFF
EXTRA-COMPUTE
EXTRA-DUMP

View File

@ -21,6 +21,7 @@ set(WIN_PACKAGES
DPD-REACT
DPD-SMOOTH
DRUDE
ELECTRODE
EFF
EXTRA-COMPUTE
EXTRA-DUMP

View File

@ -23,6 +23,7 @@ set(ALL_PACKAGES
DPD-REACT
DPD-SMOOTH
DRUDE
ELECTRODE
EFF
EXTRA-COMPUTE
EXTRA-DUMP

View File

@ -6,6 +6,7 @@ set(PACKAGES_WITH_LIB
ATC
AWPMD
COMPRESS
ELECTRODE
GPU
H5MD
KIM

View File

@ -18,6 +18,7 @@ set(WIN_PACKAGES
DPD-REACT
DPD-SMOOTH
DRUDE
ELECTRODE
EFF
EXTRA-COMPUTE
EXTRA-DUMP

View File

@ -1252,6 +1252,41 @@ be built for the most part with all major versions of the C++ language.
----------
.. _electrode:
ELECTRODE package
-----------------
This package depends on the KSPACE package.
.. tabs::
.. tab:: CMake build
No additional settings are needed besides ``-D PKG_KSPACE=yes`` and ``-D
PKG_ELECTRODE=yes``.
.. tab:: Traditional make
The package is activated with ``make yes-KSPACE`` and ``make
yes-ELECTRODE``
Note that the ``Makefile.lammps`` file has settings for the BLAS and
LAPACK linear algebra libraries. As explained in ``lib/awpmd/README``
these can either exist on your system, or you can use the files provided
in ``lib/linalg``. In the latter case you also need to build the library
in ``lib/linalg`` with a command like these:
.. code-block:: bash
$ make lib-linalg # print help message
$ make lib-linalg args="-m serial" # build with GNU Fortran compiler (settings as with "make serial")
$ make lib-linalg args="-m mpi" # build with default MPI Fortran compiler (settings as with "make mpi")
$ make lib-linalg args="-m gfortran" # build with GNU Fortran compiler
----------
.. _ml-pace:
ML-PACE package

View File

@ -66,6 +66,9 @@ OPT.
* :doc:`edpd/source <fix_dpd_source>`
* :doc:`efield <fix_efield>`
* :doc:`ehex <fix_ehex>`
* :doc:`electrode/conp (i) <fix_electrode_conp>`
* :doc:`electrode/conq (i) <fix_electrode_conp>`
* :doc:`electrode/thermo (i) <fix_electrode_conp>`
* :doc:`electron/stopping <fix_electron_stopping>`
* :doc:`electron/stopping/fit <fix_electron_stopping>`
* :doc:`enforce2d (k) <fix_enforce2d>`

View File

@ -27,6 +27,7 @@ OPT.
* :doc:`ewald/disp/dipole <kspace_style>`
* :doc:`ewald/dipole <kspace_style>`
* :doc:`ewald/dipole/spin <kspace_style>`
* :doc:`ewald/electrode <kspace_style>`
* :doc:`msm (o) <kspace_style>`
* :doc:`msm/cg (o) <kspace_style>`
* :doc:`msm/dielectric <kspace_style>`
@ -41,4 +42,5 @@ OPT.
* :doc:`pppm/stagger <kspace_style>`
* :doc:`pppm/tip4p (o) <kspace_style>`
* :doc:`pppm/dielectric <kspace_style>`
* :doc:`pppm/electrode (i) <kspace_style>`
* :doc:`scafacos <kspace_style>`

View File

@ -50,6 +50,7 @@ page gives those details.
* :ref:`DPD-SMOOTH <PKG-DPD-SMOOTH>`
* :ref:`DRUDE <PKG-DRUDE>`
* :ref:`EFF <PKG-EFF>`
* :ref:`ELECTRODE <PKG-ELECTRODE>`
* :ref:`EXTRA-COMPUTE <PKG-EXTRA-COMPUTE>`
* :ref:`EXTRA-DUMP <PKG-EXTRA-DUMP>`
* :ref:`EXTRA-FIX <PKG-EXTRA-FIX>`
@ -809,6 +810,31 @@ tools/eff; see its README file.
-------------------
.. _PKG-ELECTRODE:
ELECTRODE package
-----------------
**Contents:**
The ELECTRODE package allows the user to enforce a constant potential method for
groups of atoms that interact with the remaining atoms as electrolyte.
**Authors:** The ELECTRODE library is written and maintained by Ludwig
Ahrens-Iwers (TUHH, Hamburg, Germany), Shern Tee (UQ, Brisbane, Australia) and
Robert Meissner (TUHH, Hamburg, Germany).
**Install:**
This package has :ref:`specific installation instructions <electrode>` on the
:doc:`Build extras <Build_extras>` page.
**Supporting info:**
* :doc:`fix electrode/conp <fix_electrode_conp>`
----------
.. _PKG-EXTRA-COMPUTE:
EXTRA-COMPUTE package

View File

@ -148,6 +148,11 @@ whether an extra library is needed to build and use the package:
- :doc:`pair_style eff/cut <pair_eff>`
- PACKAGES/eff
- no
* - :ref:`ELECTRODE <PKG-ELECTRODE>`
- electrode charges to match potential
- :doc:`fix electrode/conp <fix_electrode_conp>`
- PACKAGES/electrode
- no
* - :ref:`EXTRA-COMPUTE <PKG-EXTRA-COMPUTE>`
- additional compute styles
- :doc:`compute <compute>`

View File

@ -209,6 +209,9 @@ accelerated styles exist.
* :doc:`edpd/source <fix_dpd_source>` - add heat source to eDPD simulations
* :doc:`efield <fix_efield>` - impose electric field on system
* :doc:`ehex <fix_ehex>` - enhanced heat exchange algorithm
* :doc:`electrode/conp <fix_electrode_conp>` - impose electric potential
* :doc:`electrode/conq <fix_electrode_conp>` - impose total electric charge
* :doc:`electrode/thermo <fix_electrode_conp>` - apply thermo-potentiostat
* :doc:`electron/stopping <fix_electron_stopping>` - electronic stopping power as a friction force
* :doc:`electron/stopping/fit <fix_electron_stopping>` - electronic stopping power as a friction force
* :doc:`enforce2d <fix_enforce2d>` - zero out z-dimension velocity and force

View File

@ -0,0 +1,221 @@
.. index:: fix electrode/conp
.. index:: fix electrode/conq
.. index:: fix electrode/thermo
.. index:: fix electrode/conp/intel
.. index:: fix electrode/conq/intel
.. index:: fix electrode/thermo/intel
fix electrode/conp command
==========================
Accelerator Variant: *electrode/conp/intel*
fix electrode/conq command
==========================
Accelerator Variant: *electrode/conq/intel*
fix electrode/thermo command
============================
Accelerator Variant: *electrode/thermo/intel*
Syntax
""""""
.. parsed-literal::
fix ID group-ID electrode/conp potential eta keyword values ...
fix ID group-ID electrode/conq charge eta keyword values ...
fix ID group-ID electrode/thermo potential eta temp T_v tau_v rng_v keyword values ...
* ID, group-ID are documented in fix command
* mode = electrode/conp or electrode/conq or electrode/thermo
* potential = electrode potential
* charge = electrode charge
* eta = reciprocal width of electrode charge smearing
* T_v = temperature of thermo-potentiostat
* tau_v = time constant of thermo-potentiostat
* rng_v = integer used to initialize random number generator
.. parsed-literal::
*symm(etry) on/off*
turn on/off charge neutrality constraint for the electrodes
*couple group-ID value*
group-ID = group of atoms treated as additional electrode
value = electric potential or charge on this electrode
*etypes values = atom types*
specify atom types exclusive to the electrode for optimized neighbor lists
*ffield on/off*
turn on/off finite-field implementation
*write_mat filename*
write elastance matrix to file
*write_inv filename*
write inverted matrix to file
*read_mat filename*
read elastance matrix from file
*read_inv filename*
read inverted matrix from file
Examples
""""""""
.. code-block:: LAMMPS
fix fxconp bot electrode/conp -1.0 1.805 couple top 1.0 couple ref 0.0 write_inv inv.csv symm on
fix fxconp electrodes electrode/conq 0.0 1.805
fix fxconp bot electrode/thermo -1.0 1.805 temp 298 100 couple top 1.0
Description
"""""""""""
fix electrode/conp mode implements a constant potential method (CPM)
(:ref:`Siepmann <Siepmann>`, :ref:`Reed <Reed3>`). Charges of groups specified
via group-ID and optionally with the `couple` keyword are adapted to meet their respective
potential at every time step. An arbitrary number of electrodes can be set but
the respective groups may not overlap. Electrode charges have a Gaussian charge
distribution with reciprocal width eta. The energy minimization is achieved via
matrix inversion :ref:`(Wang) <Wang5>`.
fix electrode/conq enforces a total charge specified in the input on each electrode. The energy is
minimized w.r.t. the charge distribution within the electrode.
fix electrode/thermo implements a thermo-potentiostat :ref:`(Deissenbeck)
<Deissenbeck>`. Temperature and time constant of the thermo-potentiostat need
to be specified using the temp keyword. Currently, only two electrodes are possible with
this style.
This fix necessitates the use of a long range solver that calculates and provides the matrix
of electrode-electrode interactions and a vector of electrode-electrolyte
interactions. The Kspace styles *ewald/electrode*, *pppm/electrode* and
*pppm/electrode/intel* are created specifically for this task
:ref:`(Ahrens-Iwers) <Ahrens-Iwers>`.
For systems with non-periodic boundaries in one or two directions dipole
corrections are available with the :doc:`kspace_modify <kspace_modify>`. For
ewald/electrode a two-dimensional Ewald summation :ref:`(Hu) <Hu>` can be used
by setting "slab ew2d":
.. code-block:: LAMMPS
kspace_modify slab <slab_factor>
kspace_modify wire <wire_factor>
kspace_modify slab ew2d
Two implementations for the calculation of the elastance matrix are available
with pppm and can be selected using the *amat onestep/twostep* keyword.
*onestep* is the default; *twostep* can be faster for large electrodes and a
moderate mesh size but requires more memory.
.. code-block:: LAMMPS
kspace_modify amat onestep/twostep
The *fix_modify tf* option enables the Thomas-Fermi metallicity model
(:ref:`Scalfi <Scalfi>`) and allows parameters to be set for each atom type.
.. code-block:: LAMMPS
fix_modify ID tf type length voronoi
If this option is used parameters must be set for all atom types of the electrode.
The *fix_modify timer* option turns on (off) additional timer outputs in the log
file, for code developers to track optimization.
.. code-block:: LAMMPS
fix_modify ID timer on/off
The *fix_modify set* options allow calculated quantities to be accessed via
internal variables. Currently four types of quantities can be accessed:
.. code-block:: LAMMPS
fix-modify ID set v group-ID variablename
fix-modify ID set qsb group-ID variablename
fix-modify ID set mc group-ID1 group-ID2 variablename
fix-modify ID set me group-ID1 group-ID2 variablename
One use case is to output the potential that is internally calculated and
applied to each electrode group by *fix electrode/conq* or *fix electrode/thermo*.
For that case the *v* option makes *fix electrode* update the variable
*variablename* with the potential applied to group *group-ID*, where *group-ID*
must be a group whose charges are updated by *fix electrode* and *variablename*
must be an internal-style variable:
.. code-block:: LAMMPS
fix conq bot electrode/conq -1.0 1.979 couple top 1.0
variable vbot internal 0.0
fix_modify conq set v bot vbot
The *qsb* option similarly outputs the total updated charge of the group if its
potential were 0.0V. The *mc* option requires two *group-IDs*, and outputs the
entry \{*group-ID1*, *group-ID2*\} of the (symmetric) *macro-capacitance* matrix
(MC) which relates the electrodes' applied potentials (V), total charges (Q), and
total charges at 0.0 V (Qsb):
.. math::
\mathbf{Q} = \mathbf{Q}_{SB} + \mathbf{MC} \cdot \mathbf{V}
Lastly, the *me* option also requires two *group-IDs* and outputs the entry
\{*group-ID1*, *group-ID2*\} of the *macro-elastance* matrix, which is the
inverse of the macro-capacitance matrix. (As the names denote, the
macro-capacitance matrix gives electrode charges from potentials, and the
macro-elastance matrix gives electrode potentials from charges).
.. warning::
Positions of electrode particles have to be immobilized at all times.
The parallelization for the fix works best if electrode atoms are evenly
distributed across processors. For a system with two electrodes at the bottom
and top of the cell this can be achieved with *processors * * 2*, or with the
line
.. code-block:: LAMMPS
if "$(extract_setting(world_size) % 2) == 0" then "processors * * 2"
which avoids an error if the script is run on an odd number of processors (such
as on just one processor for testing).
----------
.. include:: accel_styles.rst
----------
.. _Siepmann:
**(Siepmann)** Siepmann and Sprik, J. Chem. Phys. 102, 511 (1995).
.. _Reed3:
**(Reed)** Reed *et al.*, J. Chem. Phys. 126, 084704 (2007).
.. _Wang5:
**(Wang)** Wang *et al.*, J. Chem. Phys. 141, 184102 (2014).
.. _Deissenbeck:
**(Deissenbeck)** Deissenbeck *et al.*, Phys. Rev. Letters 126, 136803 (2021).
.. _Ahrens-Iwers:
**(Ahrens-Iwers)** Ahrens-Iwers and Meissner, J. Chem. Phys. 155, 104104 (2021).
.. _Hu:
**(Hu)** Hu, J. Chem. Theory Comput. 10, 5254 (2014).
.. _Scalfi:
**(Scalfi)** Scalfi *et al.*, J. Chem. Phys., 153, 174704 (2020).

View File

@ -51,9 +51,13 @@ Syntax
*slab* value = volfactor or *nozforce*
volfactor = ratio of the total extended volume used in the
2d approximation compared with the volume of the simulation domain
*ew2d* EW2D correction (available with ELECTRODE package)
*nozforce* turns off kspace forces in the z direction
*splittol* value = tol
tol = relative size of two eigenvalues (see discussion below)
*wire* value = volfactor (available with ELECTRODE package)
volfactor = ratio of the total extended dimension used in the 1d
approximation compared with the dimension of the simulation domain
Examples
""""""""

View File

@ -4,6 +4,7 @@
.. index:: kspace_style ewald/disp
.. index:: kspace_style ewald/disp/dipole
.. index:: kspace_style ewald/omp
.. index:: kspace_style ewald/electrode
.. index:: kspace_style pppm
.. index:: kspace_style pppm/kk
.. index:: kspace_style pppm/omp
@ -23,6 +24,8 @@
.. index:: kspace_style pppm/stagger
.. index:: kspace_style pppm/tip4p
.. index:: kspace_style pppm/tip4p/omp
.. index:: kspace_style pppm/electrode
.. index:: kspace_style pppm/electrode/intel
.. index:: kspace_style msm
.. index:: kspace_style msm/omp
.. index:: kspace_style msm/cg
@ -40,7 +43,7 @@ Syntax
kspace_style style value
* style = *none* or *ewald* or *ewald/dipole* or *ewald/dipole/spin* or *ewald/disp* or *ewald/disp/dipole* or *ewald/omp* or *pppm* or *pppm/cg* or *pppm/disp* or *pppm/tip4p* or *pppm/stagger* or *pppm/disp/tip4p* or *pppm/gpu* or *pppm/intel* or *pppm/disp/intel* or *pppm/kk* or *pppm/omp* or *pppm/cg/omp* or *pppm/disp/tip4p/omp* or *pppm/tip4p/omp* or *pppm/dielectic* or *pppm/disp/dielectric* or *msm* or *msm/cg* or *msm/omp* or *msm/cg/omp* or *msm/dielectric* or *scafacos*
* style = *none* or *ewald* or *ewald/dipole* or *ewald/dipole/spin* or *ewald/disp* or *ewald/disp/dipole* or *ewald/omp* or *ewald/electrode* or *pppm* or *pppm/cg* or *pppm/disp* or *pppm/tip4p* or *pppm/stagger* or *pppm/disp/tip4p* or *pppm/gpu* or *pppm/intel* or *pppm/disp/intel* or *pppm/kk* or *pppm/omp* or *pppm/cg/omp* or *pppm/disp/tip4p/omp* or *pppm/tip4p/omp* or *pppm/dielectic* or *pppm/disp/dielectric* or *pppm/electrode* or *pppm/electrode/intel* or *msm* or *msm/cg* or *msm/omp* or *msm/cg/omp* or *msm/dielectric* or *scafacos*
.. parsed-literal::
@ -57,6 +60,8 @@ Syntax
accuracy = desired relative error in forces
*ewald/omp* value = accuracy
accuracy = desired relative error in forces
*ewald/electrode* value = accuracy
accuracy = desired relative error in forces
*pppm* value = accuracy
accuracy = desired relative error in forces
*pppm/cg* values = accuracy (smallq)
@ -97,6 +102,10 @@ Syntax
accuracy = desired relative error in forces
*pppm/disp/dielectric* value = accuracy
accuracy = desired relative error in forces
*pppm/electrode* value = accuracy
accuracy = desired relative error in forces
*pppm/electrode/intel* value = accuracy
accuracy = desired relative error in forces
*msm* value = accuracy
accuracy = desired relative error in forces
*msm/cg* value = accuracy (smallq)
@ -273,6 +282,13 @@ parameters and how to choose them is described in
----------
The *electrode* styles add methods that are required for the constant potential
method implemented in :doc:`fix electrode/* <fix_electrode_conp>`. The styles
*ewald/electrode*, *pppm/electrode* and *pppm/electrode/intel* are available.
These styles do not support the `kspace_modify slab nozforce` command.
----------
The *msm* style invokes a multi-level summation method MSM solver,
:ref:`(Hardy) <Hardy2006>` or :ref:`(Hardy2) <Hardy2009>`, which maps atom charge
to a 3d mesh, and uses a multi-level hierarchy of coarser and coarser

View File

@ -48,6 +48,7 @@ agilio
Agilio
agni
Agnolin
Ahrens
Ai
Aidan
aij
@ -512,6 +513,8 @@ configfile
configurational
conformational
Connor
conp
conq
ConstMatrix
Contrib
cooperativity
@ -650,6 +653,7 @@ deepskyblue
defgrad
defn
deformable
Deissenbeck
del
delaystep
deleteIDs
@ -869,6 +873,7 @@ Eisenforschung
Ejtehadi
El
elaplong
elastance
Electroneg
electronegative
electronegativity
@ -982,6 +987,7 @@ evector
Everaers
Evgeny
evirials
ew
ewald
Ewald
excitations
@ -1494,6 +1500,7 @@ iva
Ivanov
Ivector
Iw
Iwers
iwyu
ixcm
ixx
@ -1979,6 +1986,7 @@ mediumvioletred
Mees
Mehl
Mei
Meissner
Melchor
Meloni
Melrose
@ -2007,6 +2015,7 @@ mesoscopic
metadata
metadynamics
Metadynamics
metallicity
Methfessel
methine
Metin
@ -2663,6 +2672,7 @@ postfixed
postfixes
Postma
Potapkin
potentiostat
potin
Pourtois
powderblue
@ -2766,6 +2776,7 @@ qopenmp
qoverride
qqr
qqrd
Qsb
qtb
quadratically
quadrupolar
@ -2937,6 +2948,7 @@ Rmin
RMS
rmsd
rnage
rng
rNEMD
ro
Rochus
@ -3012,6 +3024,7 @@ Scalable
scalexy
scalexz
scaleyz
Scalfi
Schaik
Schilfgarde
Schimansky
@ -3160,6 +3173,7 @@ SPH
Spickermann
splined
spparks
Sprik
Springer
springgreen
spx

View File

@ -0,0 +1,27 @@
These examples demonstrate the use of the ELECTRODE package for constant potential molecular dynamics.
planar/
au-vac.data -- gold electrodes with vacuum
in.planar* -- comparison of gold electrodes with vacuum to theoretical capacitance of planar capacitor
-- 5x, further labeled by long-range solver (ewald / pppm) and boundary correction (ew2d / ew3dc / ffield)
-- the pppm-ew2d combination would not give correct results and will throw an error if selected
test.sh -- run all in.planar files and check charge at 1.2V and %difference from theoretical (last column)
graph-il/
graph-il.data -- graphene electrodes with electrolyte (coarse-grained BMIm-PF6)
in.conp -- reference run at constant potential
in.etypes -- type-based smart neighborlists
in.ffield -- finite field method with fully periodic cell
in.ramp -- equal-style ramping potential difference
in.conq -- constrained electrode total charges
in.conq2 -- constrained electrode total charges via dynamically-set potentials
in.thermo -- thermalize electrolyte with thermopotentiostat instead of NVT
au-aq/
au-aq.data -- gold electrodes with electrolyte (SPC water + NaCl)
in.ffield -- finite field method with fully periodic cell
in.tf -- Thomas-Fermi metallicity model with more delocalized charges
# future work:
# in.cylinder -- comparison of carbon nanotube to theoretical induced charge for charge near circular conductor

View File

@ -0,0 +1 @@
log.lammps*

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,11 @@
# electrodes with constant potential using finite field
# for z-periodic gold-saline electrochemical cell
boundary p p p # ffield uses periodic z-boundary and no slab
include settings.mod # styles, groups, computes and fixes
fix conp bot electrode/conp -1.0 1.805132 couple top 1.0 symm on ffield yes etypes 6*7
thermo 50
thermo_style custom step temp c_ctemp epair etotal c_qtop c_qbot c_qztop c_qzbot
run 500

View File

@ -0,0 +1,15 @@
# electrodes with constant potential using finite field
# for z-periodic gold-saline electrochemical cell
# using Thomas-Fermi metallicity model: electrode q and qz will be
# smaller because of more delocalized charge
boundary p p p # ffield uses periodic z-boundary and no slab
include settings.mod # styles, groups, computes and fixes
fix conp bot electrode/conp -1.0 1.805132 couple top 1.0 symm on ffield yes etypes 6*7
fix_modify conp tf 6 1.0 18.1715745
fix_modify conp tf 7 1.0 18.1715745
thermo 50
thermo_style custom step temp c_ctemp epair etotal c_qtop c_qbot c_qztop c_qzbot
run 500

View File

@ -0,0 +1,150 @@
LAMMPS (24 Mar 2022)
# electrodes with constant potential using finite field
# for z-periodic gold-saline electrochemical cell
boundary p p p # ffield uses periodic z-boundary and no slab
include settings.mod # styles, groups, computes and fixes
units real
# distribute electrode atoms among all processors:
if "$(extract_setting(world_size) % 2) == 0" then "processors * * 2"
atom_style full
pair_style lj/cut/coul/long 15
bond_style harmonic
angle_style harmonic
kspace_style pppm/electrode 1e-7
read_data "data.au-aq"
Reading data file ...
orthogonal box = (0 0 0) to (36.629993 36.629993 107.95213)
1 by 1 by 1 MPI processor grid
reading atoms ...
9798 atoms
reading velocities ...
9798 velocities
scanning bonds ...
2 = max bonds/atom
scanning angles ...
1 = max angles/atom
reading bonds ...
4320 bonds
reading angles ...
2160 angles
Finding 1-2 1-3 1-4 neighbors ...
special bond factors lj: 0 0 0
special bond factors coul: 0 0 0
2 = max # of 1-2 neighbors
1 = max # of 1-3 neighbors
1 = max # of 1-4 neighbors
2 = max # of special neighbors
special bonds CPU = 0.002 seconds
read_data CPU = 0.051 seconds
group bot type 6
1620 atoms in group bot
group top type 7
1620 atoms in group top
group SPC type 1 2 3
6480 atoms in group SPC
group electrolyte type 1 2 3 4 5
6558 atoms in group electrolyte
fix nvt electrolyte nvt temp 298.0 298.0 241
fix shake SPC shake 1e-4 20 0 b 1 2 a 1
0 = # of size 2 clusters
0 = # of size 3 clusters
0 = # of size 4 clusters
2160 = # of frozen angles
find clusters CPU = 0.002 seconds
variable q atom q
variable qz atom q*(z-lz/2)
compute qtop top reduce sum v_q
compute qbot bot reduce sum v_q
compute qztop top reduce sum v_qz
compute qzbot bot reduce sum v_qz
compute ctemp electrolyte temp
fix conp bot electrode/conp -1.0 1.805132 couple top 1.0 symm on ffield yes etypes 6*7
3240 atoms in group conp_group
thermo 50
thermo_style custom step temp c_ctemp epair etotal c_qtop c_qbot c_qztop c_qzbot
run 500
PPPM/electrode initialization ...
using 12-bit tables for long-range coulomb (src/kspace.cpp:342)
G vector (1/distance) = 0.24017705
grid = 54 54 120
stencil order = 5
estimated absolute RMS force accuracy = 3.6312561e-05
estimated relative force accuracy = 1.093542e-07
using double precision MKL FFT
3d grid and FFT values/proc = 472567 349920
generated 21 of 21 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update every 1 steps, delay 10 steps, check yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 17
ghost atom cutoff = 17
binsize = 8.5, bins = 5 5 13
3 neighbor lists, perpetual/occasional/extra = 2 1 0
(1) pair lj/cut/coul/long, perpetual
attributes: half, newton on
pair build: half/bin/newton
stencil: half/bin/3d
bin: standard
(2) fix electrode/conp, occasional, skip from (1)
attributes: half, newton on
pair build: skip
stencil: none
bin: none
(3) fix electrode/conp, perpetual, skip from (1)
attributes: half, newton on
pair build: skip
stencil: none
bin: none
Per MPI rank memory allocation (min/avg/max) = 194.6 | 194.6 | 194.6 Mbytes
Step Temp c_ctemp E_pair TotEng c_qtop c_qbot c_qztop c_qzbot
0 171.61215 298.06731 -39212.819 -35306.164 4.1391573 -4.1391573 78.718381 131.56372
50 147.03139 255.37383 -39870.139 -36523.051 4.1312167 -4.1312167 78.563872 131.30255
100 149.89027 260.33932 -39878.859 -36466.689 4.0217834 -4.0217834 76.482548 127.82573
150 151.7382 263.54893 -39873.178 -36418.942 4.0469977 -4.0469977 76.967548 128.59855
200 151.7508 263.57081 -39827.015 -36372.492 4.1830375 -4.1830375 79.554159 132.93925
250 152.61146 265.06566 -39791.293 -36317.177 4.1835865 -4.1835865 79.56665 132.97185
300 153.51486 266.63475 -39751.841 -36257.16 4.1571861 -4.1571861 79.061431 132.12905
350 156.35115 271.561 -39754.955 -36195.708 4.3498059 -4.3498059 82.720202 138.28678
400 156.26118 271.40474 -39690.781 -36133.582 4.3444079 -4.3444079 82.619396 138.11873
450 158.54164 275.36558 -39681.083 -36071.97 4.2020488 -4.2020488 79.912674 133.55185
500 161.40138 280.33258 -39684.185 -36009.972 4.3021924 -4.3021924 81.807527 136.7464
Loop time of 246.197 on 1 procs for 500 steps with 9798 atoms
Performance: 0.175 ns/day, 136.776 hours/ns, 2.031 timesteps/s
356.3% CPU use with 1 MPI tasks x no OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 105.64 | 105.64 | 105.64 | 0.0 | 42.91
Bond | 0.0010592 | 0.0010592 | 0.0010592 | 0.0 | 0.00
Kspace | 37.643 | 37.643 | 37.643 | 0.0 | 15.29
Neigh | 5.8827 | 5.8827 | 5.8827 | 0.0 | 2.39
Comm | 0.18181 | 0.18181 | 0.18181 | 0.0 | 0.07
Output | 0.0055762 | 0.0055762 | 0.0055762 | 0.0 | 0.00
Modify | 96.78 | 96.78 | 96.78 | 0.0 | 39.31
Other | | 0.06346 | | | 0.03
Nlocal: 9798 ave 9798 max 9798 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 31695 ave 31695 max 31695 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 8.25614e+06 ave 8.25614e+06 max 8.25614e+06 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 8256142
Ave neighs/atom = 842.63544
Ave special neighs/atom = 1.3227189
Neighbor list builds = 22
Dangerous builds = 0
Total wall time: 0:19:39

View File

@ -0,0 +1,151 @@
LAMMPS (24 Mar 2022)
# electrodes with constant potential using finite field
# for z-periodic gold-saline electrochemical cell
boundary p p p # ffield uses periodic z-boundary and no slab
include settings.mod # styles, groups, computes and fixes
units real
# distribute electrode atoms among all processors:
if "$(extract_setting(world_size) % 2) == 0" then "processors * * 2"
processors * * 2
atom_style full
pair_style lj/cut/coul/long 15
bond_style harmonic
angle_style harmonic
kspace_style pppm/electrode 1e-7
read_data "data.au-aq"
Reading data file ...
orthogonal box = (0 0 0) to (36.629993 36.629993 107.95213)
2 by 1 by 2 MPI processor grid
reading atoms ...
9798 atoms
reading velocities ...
9798 velocities
scanning bonds ...
2 = max bonds/atom
scanning angles ...
1 = max angles/atom
reading bonds ...
4320 bonds
reading angles ...
2160 angles
Finding 1-2 1-3 1-4 neighbors ...
special bond factors lj: 0 0 0
special bond factors coul: 0 0 0
2 = max # of 1-2 neighbors
1 = max # of 1-3 neighbors
1 = max # of 1-4 neighbors
2 = max # of special neighbors
special bonds CPU = 0.002 seconds
read_data CPU = 0.149 seconds
group bot type 6
1620 atoms in group bot
group top type 7
1620 atoms in group top
group SPC type 1 2 3
6480 atoms in group SPC
group electrolyte type 1 2 3 4 5
6558 atoms in group electrolyte
fix nvt electrolyte nvt temp 298.0 298.0 241
fix shake SPC shake 1e-4 20 0 b 1 2 a 1
0 = # of size 2 clusters
0 = # of size 3 clusters
0 = # of size 4 clusters
2160 = # of frozen angles
find clusters CPU = 0.003 seconds
variable q atom q
variable qz atom q*(z-lz/2)
compute qtop top reduce sum v_q
compute qbot bot reduce sum v_q
compute qztop top reduce sum v_qz
compute qzbot bot reduce sum v_qz
compute ctemp electrolyte temp
fix conp bot electrode/conp -1.0 1.805132 couple top 1.0 symm on ffield yes etypes 6*7
3240 atoms in group conp_group
thermo 50
thermo_style custom step temp c_ctemp epair etotal c_qtop c_qbot c_qztop c_qzbot
run 500
PPPM/electrode initialization ...
using 12-bit tables for long-range coulomb (src/kspace.cpp:342)
G vector (1/distance) = 0.24017705
grid = 54 54 120
stencil order = 5
estimated absolute RMS force accuracy = 3.6312561e-05
estimated relative force accuracy = 1.093542e-07
using double precision MKL FFT
3d grid and FFT values/proc = 138958 87480
generated 21 of 21 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update every 1 steps, delay 10 steps, check yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 17
ghost atom cutoff = 17
binsize = 8.5, bins = 5 5 13
3 neighbor lists, perpetual/occasional/extra = 2 1 0
(1) pair lj/cut/coul/long, perpetual
attributes: half, newton on
pair build: half/bin/newton
stencil: half/bin/3d
bin: standard
(2) fix electrode/conp, occasional, skip from (1)
attributes: half, newton on
pair build: skip
stencil: none
bin: none
(3) fix electrode/conp, perpetual, skip from (1)
attributes: half, newton on
pair build: skip
stencil: none
bin: none
Per MPI rank memory allocation (min/avg/max) = 118.1 | 120.6 | 123.1 Mbytes
Step Temp c_ctemp E_pair TotEng c_qtop c_qbot c_qztop c_qzbot
0 171.61215 298.06731 -39212.819 -35306.164 4.1391573 -4.1391573 78.718381 131.56372
50 147.03139 255.37383 -39870.139 -36523.051 4.1312167 -4.1312167 78.563872 131.30255
100 149.89027 260.33932 -39878.859 -36466.689 4.0217834 -4.0217834 76.482548 127.82573
150 151.7382 263.54893 -39873.178 -36418.942 4.0469977 -4.0469977 76.967548 128.59855
200 151.7508 263.57081 -39827.015 -36372.492 4.1830375 -4.1830375 79.554159 132.93925
250 152.61146 265.06566 -39791.293 -36317.177 4.1835865 -4.1835865 79.56665 132.97185
300 153.51486 266.63475 -39751.841 -36257.16 4.1571861 -4.1571861 79.061431 132.12905
350 156.35115 271.561 -39754.955 -36195.708 4.3498059 -4.3498059 82.7202 138.28678
400 156.26118 271.40474 -39690.781 -36133.582 4.3444079 -4.3444079 82.619398 138.11873
450 158.54163 275.36558 -39681.083 -36071.97 4.2020488 -4.2020488 79.912675 133.55185
500 161.40138 280.33257 -39684.185 -36009.972 4.3021924 -4.3021924 81.807527 136.7464
Loop time of 111.902 on 4 procs for 500 steps with 9798 atoms
Performance: 0.386 ns/day, 62.168 hours/ns, 4.468 timesteps/s
97.2% CPU use with 4 MPI tasks x no OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 21.816 | 31.136 | 40.866 | 166.5 | 27.82
Bond | 0.00073413 | 0.00080346 | 0.00084203 | 0.0 | 0.00
Kspace | 29.546 | 39.137 | 48.326 | 146.4 | 34.97
Neigh | 2.5867 | 2.5872 | 2.5877 | 0.0 | 2.31
Comm | 0.33289 | 0.33603 | 0.33791 | 0.3 | 0.30
Output | 0.0022537 | 0.0030028 | 0.005192 | 2.3 | 0.00
Modify | 38.498 | 38.635 | 38.77 | 2.2 | 34.53
Other | | 0.06679 | | | 0.06
Nlocal: 2449.5 ave 2908 max 2012 min
Histogram: 2 0 0 0 0 0 0 0 0 2
Nghost: 19345.5 ave 20244 max 18492 min
Histogram: 2 0 0 0 0 0 0 0 0 2
Neighs: 2.06404e+06 ave 2.7528e+06 max 1.40672e+06 min
Histogram: 2 0 0 0 0 0 0 0 0 2
Total # of neighbors = 8256142
Ave neighs/atom = 842.63544
Ave special neighs/atom = 1.3227189
Neighbor list builds = 22
Dangerous builds = 0
Total wall time: 0:07:48

View File

@ -0,0 +1,154 @@
LAMMPS (24 Mar 2022)
# electrodes with constant potential using finite field
# for z-periodic gold-saline electrochemical cell
# using Thomas-Fermi metallicity model: electrode q and qz will be
# smaller because of more delocalized charge
boundary p p p # ffield uses periodic z-boundary and no slab
include settings.mod # styles, groups, computes and fixes
units real
# distribute electrode atoms among all processors:
if "$(extract_setting(world_size) % 2) == 0" then "processors * * 2"
atom_style full
pair_style lj/cut/coul/long 15
bond_style harmonic
angle_style harmonic
kspace_style pppm/electrode 1e-7
read_data "data.au-aq"
Reading data file ...
orthogonal box = (0 0 0) to (36.629993 36.629993 107.95213)
1 by 1 by 1 MPI processor grid
reading atoms ...
9798 atoms
reading velocities ...
9798 velocities
scanning bonds ...
2 = max bonds/atom
scanning angles ...
1 = max angles/atom
reading bonds ...
4320 bonds
reading angles ...
2160 angles
Finding 1-2 1-3 1-4 neighbors ...
special bond factors lj: 0 0 0
special bond factors coul: 0 0 0
2 = max # of 1-2 neighbors
1 = max # of 1-3 neighbors
1 = max # of 1-4 neighbors
2 = max # of special neighbors
special bonds CPU = 0.010 seconds
read_data CPU = 0.115 seconds
group bot type 6
1620 atoms in group bot
group top type 7
1620 atoms in group top
group SPC type 1 2 3
6480 atoms in group SPC
group electrolyte type 1 2 3 4 5
6558 atoms in group electrolyte
fix nvt electrolyte nvt temp 298.0 298.0 241
fix shake SPC shake 1e-4 20 0 b 1 2 a 1
0 = # of size 2 clusters
0 = # of size 3 clusters
0 = # of size 4 clusters
2160 = # of frozen angles
find clusters CPU = 0.010 seconds
variable q atom q
variable qz atom q*(z-lz/2)
compute qtop top reduce sum v_q
compute qbot bot reduce sum v_q
compute qztop top reduce sum v_qz
compute qzbot bot reduce sum v_qz
compute ctemp electrolyte temp
fix conp bot electrode/conp -1.0 1.805132 couple top 1.0 symm on ffield yes etypes 6*7
3240 atoms in group conp_group
fix_modify conp tf 6 1.0 18.1715745
fix_modify conp tf 7 1.0 18.1715745
thermo 50
thermo_style custom step temp c_ctemp epair etotal c_qtop c_qbot c_qztop c_qzbot
run 500
PPPM/electrode initialization ...
using 12-bit tables for long-range coulomb (src/kspace.cpp:342)
G vector (1/distance) = 0.24017705
grid = 54 54 120
stencil order = 5
estimated absolute RMS force accuracy = 3.6312561e-05
estimated relative force accuracy = 1.093542e-07
using double precision MKL FFT
3d grid and FFT values/proc = 472567 349920
generated 21 of 21 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update every 1 steps, delay 10 steps, check yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 17
ghost atom cutoff = 17
binsize = 8.5, bins = 5 5 13
3 neighbor lists, perpetual/occasional/extra = 2 1 0
(1) pair lj/cut/coul/long, perpetual
attributes: half, newton on
pair build: half/bin/newton
stencil: half/bin/3d
bin: standard
(2) fix electrode/conp, occasional, skip from (1)
attributes: half, newton on
pair build: skip
stencil: none
bin: none
(3) fix electrode/conp, perpetual, skip from (1)
attributes: half, newton on
pair build: skip
stencil: none
bin: none
Per MPI rank memory allocation (min/avg/max) = 194.6 | 194.6 | 194.6 Mbytes
Step Temp c_ctemp E_pair TotEng c_qtop c_qbot c_qztop c_qzbot
0 171.61215 298.06731 -39190.106 -35283.45 4.0804484 -4.0804484 79.075127 131.20697
50 147.14308 255.56782 -39849.964 -36500.334 3.9990346 -3.9990346 77.497181 128.57759
100 149.94935 260.44194 -39857.533 -36444.019 3.8613914 -3.8613914 74.82985 124.15315
150 151.95924 263.93285 -39855.567 -36396.299 3.8677064 -3.8677064 74.957279 124.33201
200 151.66737 263.42591 -39802.585 -36349.961 3.99842 -3.99842 77.491015 128.54496
250 152.36874 264.64408 -39763.306 -36294.716 3.9925863 -3.9925863 77.379445 128.37226
300 153.83916 267.19802 -39737.075 -36235.012 3.94995 -3.94995 76.553896 127.00395
350 155.88897 270.75827 -39722.265 -36173.539 4.0598524 -4.0598524 78.679643 130.5394
400 156.51993 271.85415 -39674.759 -36111.669 4.1312899 -4.1312899 80.060369 132.83599
450 160.21339 278.26919 -39697.962 -36050.793 3.9068098 -3.9068098 75.713484 125.59216
500 161.63639 280.74075 -39669.412 -35989.849 3.9261656 -3.9261656 76.0806 126.22255
Loop time of 280.183 on 1 procs for 500 steps with 9798 atoms
Performance: 0.154 ns/day, 155.657 hours/ns, 1.785 timesteps/s
341.9% CPU use with 1 MPI tasks x no OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 119.69 | 119.69 | 119.69 | 0.0 | 42.72
Bond | 0.0010952 | 0.0010952 | 0.0010952 | 0.0 | 0.00
Kspace | 42.137 | 42.137 | 42.137 | 0.0 | 15.04
Neigh | 6.5403 | 6.5403 | 6.5403 | 0.0 | 2.33
Comm | 0.19411 | 0.19411 | 0.19411 | 0.0 | 0.07
Output | 0.0053644 | 0.0053644 | 0.0053644 | 0.0 | 0.00
Modify | 111.54 | 111.54 | 111.54 | 0.0 | 39.81
Other | | 0.07244 | | | 0.03
Nlocal: 9798 ave 9798 max 9798 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 31718 ave 31718 max 31718 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 8.25685e+06 ave 8.25685e+06 max 8.25685e+06 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 8256852
Ave neighs/atom = 842.7079
Ave special neighs/atom = 1.3227189
Neighbor list builds = 23
Dangerous builds = 0
Total wall time: 0:21:11

View File

@ -0,0 +1,155 @@
LAMMPS (24 Mar 2022)
# electrodes with constant potential using finite field
# for z-periodic gold-saline electrochemical cell
# using Thomas-Fermi metallicity model: electrode q and qz will be
# smaller because of more delocalized charge
boundary p p p # ffield uses periodic z-boundary and no slab
include settings.mod # styles, groups, computes and fixes
units real
# distribute electrode atoms among all processors:
if "$(extract_setting(world_size) % 2) == 0" then "processors * * 2"
processors * * 2
atom_style full
pair_style lj/cut/coul/long 15
bond_style harmonic
angle_style harmonic
kspace_style pppm/electrode 1e-7
read_data "data.au-aq"
Reading data file ...
orthogonal box = (0 0 0) to (36.629993 36.629993 107.95213)
2 by 1 by 2 MPI processor grid
reading atoms ...
9798 atoms
reading velocities ...
9798 velocities
scanning bonds ...
2 = max bonds/atom
scanning angles ...
1 = max angles/atom
reading bonds ...
4320 bonds
reading angles ...
2160 angles
Finding 1-2 1-3 1-4 neighbors ...
special bond factors lj: 0 0 0
special bond factors coul: 0 0 0
2 = max # of 1-2 neighbors
1 = max # of 1-3 neighbors
1 = max # of 1-4 neighbors
2 = max # of special neighbors
special bonds CPU = 0.002 seconds
read_data CPU = 0.091 seconds
group bot type 6
1620 atoms in group bot
group top type 7
1620 atoms in group top
group SPC type 1 2 3
6480 atoms in group SPC
group electrolyte type 1 2 3 4 5
6558 atoms in group electrolyte
fix nvt electrolyte nvt temp 298.0 298.0 241
fix shake SPC shake 1e-4 20 0 b 1 2 a 1
0 = # of size 2 clusters
0 = # of size 3 clusters
0 = # of size 4 clusters
2160 = # of frozen angles
find clusters CPU = 0.001 seconds
variable q atom q
variable qz atom q*(z-lz/2)
compute qtop top reduce sum v_q
compute qbot bot reduce sum v_q
compute qztop top reduce sum v_qz
compute qzbot bot reduce sum v_qz
compute ctemp electrolyte temp
fix conp bot electrode/conp -1.0 1.805132 couple top 1.0 symm on ffield yes etypes 6*7
3240 atoms in group conp_group
fix_modify conp tf 6 1.0 18.1715745
fix_modify conp tf 7 1.0 18.1715745
thermo 50
thermo_style custom step temp c_ctemp epair etotal c_qtop c_qbot c_qztop c_qzbot
run 500
PPPM/electrode initialization ...
using 12-bit tables for long-range coulomb (src/kspace.cpp:342)
G vector (1/distance) = 0.24017705
grid = 54 54 120
stencil order = 5
estimated absolute RMS force accuracy = 3.6312561e-05
estimated relative force accuracy = 1.093542e-07
using double precision MKL FFT
3d grid and FFT values/proc = 138958 87480
generated 21 of 21 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update every 1 steps, delay 10 steps, check yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 17
ghost atom cutoff = 17
binsize = 8.5, bins = 5 5 13
3 neighbor lists, perpetual/occasional/extra = 2 1 0
(1) pair lj/cut/coul/long, perpetual
attributes: half, newton on
pair build: half/bin/newton
stencil: half/bin/3d
bin: standard
(2) fix electrode/conp, occasional, skip from (1)
attributes: half, newton on
pair build: skip
stencil: none
bin: none
(3) fix electrode/conp, perpetual, skip from (1)
attributes: half, newton on
pair build: skip
stencil: none
bin: none
Per MPI rank memory allocation (min/avg/max) = 118.1 | 120.6 | 123.1 Mbytes
Step Temp c_ctemp E_pair TotEng c_qtop c_qbot c_qztop c_qzbot
0 171.61215 298.06731 -39190.106 -35283.45 4.0804484 -4.0804484 79.075127 131.20697
50 147.14308 255.56782 -39849.964 -36500.334 3.9990346 -3.9990346 77.497181 128.57759
100 149.94935 260.44194 -39857.533 -36444.019 3.8613914 -3.8613914 74.82985 124.15315
150 151.95924 263.93285 -39855.567 -36396.299 3.8677064 -3.8677064 74.957279 124.33201
200 151.66737 263.42591 -39802.585 -36349.961 3.99842 -3.99842 77.491015 128.54496
250 152.36874 264.64408 -39763.306 -36294.716 3.9925863 -3.9925863 77.379445 128.37226
300 153.83916 267.19802 -39737.075 -36235.012 3.94995 -3.94995 76.553896 127.00395
350 155.88897 270.75827 -39722.265 -36173.539 4.0598524 -4.0598524 78.679643 130.5394
400 156.51993 271.85415 -39674.759 -36111.669 4.1312899 -4.1312899 80.060369 132.83599
450 160.21339 278.26919 -39697.962 -36050.793 3.9068098 -3.9068098 75.713485 125.59216
500 161.63639 280.74075 -39669.412 -35989.849 3.9261654 -3.9261654 76.080597 126.22255
Loop time of 110.716 on 4 procs for 500 steps with 9798 atoms
Performance: 0.390 ns/day, 61.509 hours/ns, 4.516 timesteps/s
97.2% CPU use with 4 MPI tasks x no OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 21.17 | 30.449 | 39.65 | 164.9 | 27.50
Bond | 0.0007313 | 0.00077537 | 0.00081477 | 0.0 | 0.00
Kspace | 29.854 | 38.911 | 48.058 | 143.8 | 35.14
Neigh | 2.7206 | 2.7213 | 2.722 | 0.0 | 2.46
Comm | 0.33023 | 0.33225 | 0.33384 | 0.2 | 0.30
Output | 0.0024528 | 0.0027565 | 0.0035754 | 0.9 | 0.00
Modify | 38.091 | 38.233 | 38.365 | 2.1 | 34.53
Other | | 0.06636 | | | 0.06
Nlocal: 2449.5 ave 2908 max 2017 min
Histogram: 2 0 0 0 0 0 0 0 0 2
Nghost: 19351.2 ave 20266 max 18479 min
Histogram: 2 0 0 0 0 0 0 0 0 2
Neighs: 2.06421e+06 ave 2.7551e+06 max 1.40237e+06 min
Histogram: 2 0 0 0 0 0 0 0 0 2
Total # of neighbors = 8256853
Ave neighs/atom = 842.708
Ave special neighs/atom = 1.3227189
Neighbor list builds = 23
Dangerous builds = 0
Total wall time: 0:08:22

View File

@ -0,0 +1,29 @@
units real
# distribute electrode atoms among all processors:
if "$(extract_setting(world_size) % 2) == 0" then "processors * * 2"
atom_style full
pair_style lj/cut/coul/long 15
bond_style harmonic
angle_style harmonic
kspace_style pppm/electrode 1e-7
read_data "data.au-aq"
group bot type 6
group top type 7
group SPC type 1 2 3
group electrolyte type 1 2 3 4 5
fix nvt electrolyte nvt temp 298.0 298.0 241
fix shake SPC shake 1e-4 20 0 b 1 2 a 1
variable q atom q
variable qz atom q*(z-lz/2)
compute qtop top reduce sum v_q
compute qbot bot reduce sum v_q
compute qztop top reduce sum v_qz
compute qzbot bot reduce sum v_qz
compute ctemp electrolyte temp

View File

@ -0,0 +1 @@
log.lammps*

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,12 @@
# electrodes with constant potential
# for graphene-ionic liquid supercapacitor
boundary p p f # slab calculation
include settings.mod # styles, groups, computes and fixes
kspace_modify slab 3.0
fix conp bot electrode/conp -1.0 1.979 couple top 1.0 symm on
thermo 50
thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop
run 500

View File

@ -0,0 +1,18 @@
# electrodes with constrained total charges
# for graphene-ionic liquid supercapacitor
boundary p p f # slab calculation
include settings.mod # styles, groups, computes and fixes
kspace_modify slab 3.0
fix conq bot electrode/conq -1.0 1.979 couple top 1.0 etypes 5 # conq doesn't take symm option
# ask fix conq to output electrode potentials to internal variables
variable vbot internal 0.0
variable vtop internal 0.0
fix_modify conq set v bot vbot
fix_modify conq set v top vtop
thermo 50
thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop v_vbot v_vtop
run 500

View File

@ -0,0 +1,35 @@
# electrodes with constrained total charges imposed from dynamically computed potentials
# for graphene-ionic liquid supercapacitor
boundary p p f # slab calculation
include settings.mod # styles, groups, computes and fixes
kspace_modify slab 3.0
fix conp bot electrode/conp v_vbot 1.979 couple top v_vtop etypes 5
# get the four entries of electrode elastance matrix
variable me00 internal 0.0
variable me01 internal 0.0
variable me10 internal 0.0
variable me11 internal 0.0
fix_modify conp set me bot bot me00
fix_modify conp set me bot top me01
fix_modify conp set me top bot me10
fix_modify conp set me top top me11
# get the 0V charges (qsb), and excess charge required to reach preset total charges
variable qsb_bot internal 0.0
variable qsb_top internal 0.0
fix_modify conp set qsb bot qsb_bot
fix_modify conp set qsb top qsb_top
variable qex_bot equal -1.0-v_qsb_bot # difference between desired and 0V charge
variable qex_top equal 1.0-v_qsb_top # difference between desired and 0V charge
# calculate imposed potential as elastance * excess charge
# note: fix will wait until the run setup to look for its potential variables
variable vbot equal v_me00*v_qex_bot+v_me01*v_qex_top
variable vtop equal v_me10*v_qex_bot+v_me11*v_qex_top
thermo 50
thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop v_vbot v_vtop
run 500

View File

@ -0,0 +1,12 @@
# electrodes with constant potential and smart neighborlists
# for graphene-ionic liquid supercapacitor
boundary p p f # slab calculation
include settings.mod # styles, groups, computes and fixes
kspace_modify slab 3.0
fix conp bot electrode/conp -1.0 1.979 couple top 1.0 symm on etypes 5
thermo 50
thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop
run 500

View File

@ -0,0 +1,11 @@
# electrodes with constant potential using finite field
# for z-periodic graphene-ionic liquid supercapacitor
boundary p p p # ffield uses periodic z-boundary and no slab
include settings.mod # styles, groups, computes and fixes
fix conp bot electrode/conp -1.0 1.979 couple top 1.0 symm on etypes 5 ffield yes
thermo 50
thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop
run 500

View File

@ -0,0 +1,13 @@
# electrodes with equal-style ramped (electrode-)constant potential
# for graphene-ionic liquid supercapacitor
boundary p p f # slab calculation
include settings.mod # styles, groups, computes and fixes
kspace_modify slab 3.0
variable v equal ramp(2,4)
fix conp bot electrode/conp 0.0 1.979 couple top v_v symm on etypes 5
thermo 50
thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop v_v
run 500

View File

@ -0,0 +1,19 @@
# electrodes with thermopotentiostat
# for graphene-ionic liquid supercapacitor
boundary p p f # slab calculation
include settings.mod # styles, groups, computes and fixes
kspace_modify slab 3.0
unfix nvt # remove NVT thermostat included from "settings.mod"
fix conpthermo bot electrode/thermo -1.0 1.979 couple top 1.0 etypes 5 temp 500 100 7 # temp tau rng
# to compare to regular constant potential, switch previous line to this:
#fix conp bot electrode/conp -1.0 1.979 couple top 1.0 etypes 5 symm on
fix nve electrolyte nve
# note ionic liquid does not reach 500K immediately
# because its thermal response time is finite
# run this about 10k steps (10ps) to reach preset temperature
thermo 50
thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop
run 500

View File

@ -0,0 +1,142 @@
LAMMPS (24 Mar 2022)
# electrodes with constant potential
# for graphene-ionic liquid supercapacitor
boundary p p f # slab calculation
include settings.mod # styles, groups, computes and fixes
# set boundary in main script because ffield is periodic
units real
# distribute electrode atoms among all processors:
if "$(extract_setting(world_size) % 2) == 0" then "processors * * 2"
atom_style full
pair_style lj/cut/coul/long 16
bond_style harmonic
angle_style harmonic
kspace_style pppm/electrode 1e-7
# kspace_modify in main script because ffield is periodic
read_data "data.graph-il"
Reading data file ...
orthogonal box = (0 0 -68) to (32.2 34.4 68)
1 by 1 by 1 MPI processor grid
reading atoms ...
3776 atoms
scanning bonds ...
2 = max bonds/atom
scanning angles ...
1 = max angles/atom
reading bonds ...
640 bonds
reading angles ...
320 angles
Finding 1-2 1-3 1-4 neighbors ...
special bond factors lj: 0 0 0
special bond factors coul: 0 0 0
2 = max # of 1-2 neighbors
1 = max # of 1-3 neighbors
1 = max # of 1-4 neighbors
2 = max # of special neighbors
special bonds CPU = 0.001 seconds
read_data CPU = 0.036 seconds
group bot molecule 641
416 atoms in group bot
group top molecule 642
416 atoms in group top
group bmi type 1 2 3
960 atoms in group bmi
group electrolyte type 1 2 3 4
1280 atoms in group electrolyte
fix nvt electrolyte nvt temp 500.0 500.0 100
fix shake bmi shake 1e-4 20 0 b 1 2 a 1
0 = # of size 2 clusters
0 = # of size 3 clusters
0 = # of size 4 clusters
320 = # of frozen angles
find clusters CPU = 0.001 seconds
variable q atom q
compute qtop top reduce sum v_q
compute qbot bot reduce sum v_q
compute ctemp electrolyte temp
kspace_modify slab 3.0
fix conp bot electrode/conp -1.0 1.979 couple top 1.0 symm on
832 atoms in group conp_group
thermo 50
thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop
run 500
PPPM/electrode initialization ...
using 12-bit tables for long-range coulomb (src/kspace.cpp:342)
G vector (1/distance) = 0.20904498
grid = 32 32 200
stencil order = 5
estimated absolute RMS force accuracy = 3.7023506e-05
estimated relative force accuracy = 1.1149519e-07
using double precision MKL FFT
3d grid and FFT values/proc = 307242 204800
generated 10 of 10 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update every 1 steps, delay 10 steps, check yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 18
ghost atom cutoff = 18
binsize = 9, bins = 4 4 16
2 neighbor lists, perpetual/occasional/extra = 2 0 0
(1) pair lj/cut/coul/long, perpetual
attributes: half, newton on
pair build: half/bin/newton
stencil: half/bin/3d
bin: standard
(2) fix electrode/conp, perpetual, copy from (1)
attributes: half, newton on
pair build: copy
stencil: none
bin: none
Per MPI rank memory allocation (min/avg/max) = 57.15 | 57.15 | 57.15 Mbytes
Step Temp c_ctemp E_pair TotEng c_qbot c_qtop
0 0 0 25137191 25137191 0.0085142912 -0.0085142912
50 17.83755 64.26354 25137031 25137214 0.0045923944 -0.0045923944
100 48.393682 174.34846 25136774 25137273 -0.009514517 0.009514517
150 70.421272 253.7075 25136655 25137380 -0.033017005 0.033017005
200 82.204844 296.16031 25136667 25137514 -0.063668175 0.063668175
250 87.54223 315.38937 25136757 25137659 -0.096776257 0.096776257
300 91.704746 330.38571 25136865 25137810 -0.1283784 0.1283784
350 100.36017 361.56871 25136934 25137968 -0.15649799 0.15649799
400 111.37575 401.25467 25136986 25138133 -0.18065435 0.18065435
450 121.79848 438.80476 25137043 25138298 -0.19979365 0.19979365
500 126.95916 457.39718 25137145 25138453 -0.21037535 0.21037535
Loop time of 103.439 on 1 procs for 500 steps with 3776 atoms
Performance: 0.418 ns/day, 57.466 hours/ns, 4.834 timesteps/s
393.6% CPU use with 1 MPI tasks x no OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 19.309 | 19.309 | 19.309 | 0.0 | 18.67
Bond | 0.0018867 | 0.0018867 | 0.0018867 | 0.0 | 0.00
Kspace | 23.047 | 23.047 | 23.047 | 0.0 | 22.28
Neigh | 0.25707 | 0.25707 | 0.25707 | 0.0 | 0.25
Comm | 0.070734 | 0.070734 | 0.070734 | 0.0 | 0.07
Output | 0.0023085 | 0.0023085 | 0.0023085 | 0.0 | 0.00
Modify | 60.73 | 60.73 | 60.73 | 0.0 | 58.71
Other | | 0.01994 | | | 0.02
Nlocal: 3776 ave 3776 max 3776 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 12509 ave 12509 max 12509 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 1.72633e+06 ave 1.72633e+06 max 1.72633e+06 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 1726328
Ave neighs/atom = 457.18432
Ave special neighs/atom = 0.50847458
Neighbor list builds = 7
Dangerous builds = 0
Total wall time: 0:03:10

View File

@ -0,0 +1,143 @@
LAMMPS (24 Mar 2022)
# electrodes with constant potential
# for graphene-ionic liquid supercapacitor
boundary p p f # slab calculation
include settings.mod # styles, groups, computes and fixes
# set boundary in main script because ffield is periodic
units real
# distribute electrode atoms among all processors:
if "$(extract_setting(world_size) % 2) == 0" then "processors * * 2"
processors * * 2
atom_style full
pair_style lj/cut/coul/long 16
bond_style harmonic
angle_style harmonic
kspace_style pppm/electrode 1e-7
# kspace_modify in main script because ffield is periodic
read_data "data.graph-il"
Reading data file ...
orthogonal box = (0 0 -68) to (32.2 34.4 68)
1 by 2 by 2 MPI processor grid
reading atoms ...
3776 atoms
scanning bonds ...
2 = max bonds/atom
scanning angles ...
1 = max angles/atom
reading bonds ...
640 bonds
reading angles ...
320 angles
Finding 1-2 1-3 1-4 neighbors ...
special bond factors lj: 0 0 0
special bond factors coul: 0 0 0
2 = max # of 1-2 neighbors
1 = max # of 1-3 neighbors
1 = max # of 1-4 neighbors
2 = max # of special neighbors
special bonds CPU = 0.001 seconds
read_data CPU = 0.014 seconds
group bot molecule 641
416 atoms in group bot
group top molecule 642
416 atoms in group top
group bmi type 1 2 3
960 atoms in group bmi
group electrolyte type 1 2 3 4
1280 atoms in group electrolyte
fix nvt electrolyte nvt temp 500.0 500.0 100
fix shake bmi shake 1e-4 20 0 b 1 2 a 1
0 = # of size 2 clusters
0 = # of size 3 clusters
0 = # of size 4 clusters
320 = # of frozen angles
find clusters CPU = 0.001 seconds
variable q atom q
compute qtop top reduce sum v_q
compute qbot bot reduce sum v_q
compute ctemp electrolyte temp
kspace_modify slab 3.0
fix conp bot electrode/conp -1.0 1.979 couple top 1.0 symm on
832 atoms in group conp_group
thermo 50
thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop
run 500
PPPM/electrode initialization ...
using 12-bit tables for long-range coulomb (src/kspace.cpp:342)
G vector (1/distance) = 0.20904498
grid = 32 32 200
stencil order = 5
estimated absolute RMS force accuracy = 3.7023506e-05
estimated relative force accuracy = 1.1149519e-07
using double precision MKL FFT
3d grid and FFT values/proc = 151593 85504
generated 10 of 10 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update every 1 steps, delay 10 steps, check yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 18
ghost atom cutoff = 18
binsize = 9, bins = 4 4 16
2 neighbor lists, perpetual/occasional/extra = 2 0 0
(1) pair lj/cut/coul/long, perpetual
attributes: half, newton on
pair build: half/bin/newton
stencil: half/bin/3d
bin: standard
(2) fix electrode/conp, perpetual, copy from (1)
attributes: half, newton on
pair build: copy
stencil: none
bin: none
Per MPI rank memory allocation (min/avg/max) = 23.13 | 26.96 | 30.79 Mbytes
Step Temp c_ctemp E_pair TotEng c_qbot c_qtop
0 0 0 25137191 25137191 0.0085142912 -0.0085142912
50 17.83755 64.26354 25137031 25137214 0.0045923944 -0.0045923944
100 48.393682 174.34846 25136774 25137273 -0.009514517 0.009514517
150 70.421272 253.7075 25136655 25137380 -0.033017005 0.033017005
200 82.204844 296.16031 25136667 25137514 -0.063668175 0.063668175
250 87.54223 315.38937 25136757 25137659 -0.096776257 0.096776257
300 91.704746 330.38571 25136865 25137810 -0.1283784 0.1283784
350 100.36017 361.56871 25136934 25137968 -0.15649799 0.15649799
400 111.37575 401.25467 25136986 25138133 -0.18065435 0.18065435
450 121.79848 438.80476 25137043 25138298 -0.19979365 0.19979365
500 126.95916 457.39718 25137145 25138453 -0.21037535 0.21037535
Loop time of 49.6656 on 4 procs for 500 steps with 3776 atoms
Performance: 0.870 ns/day, 27.592 hours/ns, 10.067 timesteps/s
95.1% CPU use with 4 MPI tasks x no OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 5.968 | 6.1677 | 6.382 | 6.5 | 12.42
Bond | 0.00071151 | 0.00078617 | 0.00090387 | 0.0 | 0.00
Kspace | 17.345 | 17.558 | 17.755 | 3.8 | 35.35
Neigh | 0.10939 | 0.10945 | 0.10948 | 0.0 | 0.22
Comm | 0.15295 | 0.15474 | 0.15699 | 0.4 | 0.31
Output | 0.00074458 | 0.0010336 | 0.0018799 | 1.5 | 0.00
Modify | 25.634 | 25.641 | 25.645 | 0.1 | 51.63
Other | | 0.03276 | | | 0.07
Nlocal: 944 ave 951 max 941 min
Histogram: 1 2 0 0 0 0 0 0 0 1
Nghost: 5923.25 ave 5941 max 5906 min
Histogram: 1 0 0 1 0 0 1 0 0 1
Neighs: 431582 ave 442090 max 419903 min
Histogram: 1 1 0 0 0 0 0 0 0 2
Total # of neighbors = 1726328
Ave neighs/atom = 457.18432
Ave special neighs/atom = 0.50847458
Neighbor list builds = 7
Dangerous builds = 0
Total wall time: 0:01:11

View File

@ -0,0 +1,153 @@
LAMMPS (24 Mar 2022)
# electrodes with constrained total charges
# for graphene-ionic liquid supercapacitor
boundary p p f # slab calculation
include settings.mod # styles, groups, computes and fixes
# set boundary in main script because ffield is periodic
units real
# distribute electrode atoms among all processors:
if "$(extract_setting(world_size) % 2) == 0" then "processors * * 2"
atom_style full
pair_style lj/cut/coul/long 16
bond_style harmonic
angle_style harmonic
kspace_style pppm/electrode 1e-7
# kspace_modify in main script because ffield is periodic
read_data "data.graph-il"
Reading data file ...
orthogonal box = (0 0 -68) to (32.2 34.4 68)
1 by 1 by 1 MPI processor grid
reading atoms ...
3776 atoms
scanning bonds ...
2 = max bonds/atom
scanning angles ...
1 = max angles/atom
reading bonds ...
640 bonds
reading angles ...
320 angles
Finding 1-2 1-3 1-4 neighbors ...
special bond factors lj: 0 0 0
special bond factors coul: 0 0 0
2 = max # of 1-2 neighbors
1 = max # of 1-3 neighbors
1 = max # of 1-4 neighbors
2 = max # of special neighbors
special bonds CPU = 0.001 seconds
read_data CPU = 0.012 seconds
group bot molecule 641
416 atoms in group bot
group top molecule 642
416 atoms in group top
group bmi type 1 2 3
960 atoms in group bmi
group electrolyte type 1 2 3 4
1280 atoms in group electrolyte
fix nvt electrolyte nvt temp 500.0 500.0 100
fix shake bmi shake 1e-4 20 0 b 1 2 a 1
0 = # of size 2 clusters
0 = # of size 3 clusters
0 = # of size 4 clusters
320 = # of frozen angles
find clusters CPU = 0.000 seconds
variable q atom q
compute qtop top reduce sum v_q
compute qbot bot reduce sum v_q
compute ctemp electrolyte temp
kspace_modify slab 3.0
fix conq bot electrode/conq -1.0 1.979 couple top 1.0 etypes 5 # conq doesn't take symm option
832 atoms in group conp_group
# ask fix conq to output electrode potentials to internal variables
variable vbot internal 0.0
variable vtop internal 0.0
fix_modify conq set v bot vbot
fix_modify conq set v top vtop
thermo 50
thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop v_vbot v_vtop
run 500
PPPM/electrode initialization ...
using 12-bit tables for long-range coulomb (src/kspace.cpp:342)
G vector (1/distance) = 0.20904498
grid = 32 32 200
stencil order = 5
estimated absolute RMS force accuracy = 3.7023506e-05
estimated relative force accuracy = 1.1149519e-07
using double precision MKL FFT
3d grid and FFT values/proc = 307242 204800
generated 10 of 10 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update every 1 steps, delay 10 steps, check yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 18
ghost atom cutoff = 18
binsize = 9, bins = 4 4 16
3 neighbor lists, perpetual/occasional/extra = 2 1 0
(1) pair lj/cut/coul/long, perpetual
attributes: half, newton on
pair build: half/bin/newton
stencil: half/bin/3d
bin: standard
(2) fix electrode/conq, occasional, skip from (1)
attributes: half, newton on
pair build: skip
stencil: none
bin: none
(3) fix electrode/conq, perpetual, skip from (1)
attributes: half, newton on
pair build: skip
stencil: none
bin: none
Per MPI rank memory allocation (min/avg/max) = 56.89 | 56.89 | 56.89 Mbytes
Step Temp c_ctemp E_pair TotEng c_qbot c_qtop v_vbot v_vtop
0 0 0 25136984 25136984 -1 1 -9.931852 10.097344
50 20.206425 72.797911 25136825 25137033 -1 1 -9.4359366 9.5964514
100 55.931663 201.50563 25136587 25137163 -1 1 -8.0440112 8.1861787
150 81.389273 293.22204 25136533 25137371 -1 1 -6.1113109 6.2267114
200 92.867946 334.57639 25136646 25137603 -1 1 -4.1857807 4.2740694
250 97.518304 351.33028 25136809 25137814 -1 1 -2.8383703 2.9101475
300 102.36577 368.79431 25136933 25137987 -1 1 -2.3831643 2.4461115
350 113.66597 409.50566 25136960 25138131 -1 1 -2.7083563 2.7457811
400 122.8443 442.57252 25136991 25138256 -1 1 -3.4311003 3.3941657
450 128.63713 463.44243 25137048 25138373 -1 1 -4.132871 3.9852959
500 131.18361 472.61665 25137142 25138493 -1 1 -4.5104095 4.2567261
Loop time of 48.9361 on 1 procs for 500 steps with 3776 atoms
Performance: 0.883 ns/day, 27.187 hours/ns, 10.217 timesteps/s
393.9% CPU use with 1 MPI tasks x no OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 17.652 | 17.652 | 17.652 | 0.0 | 36.07
Bond | 0.0010418 | 0.0010418 | 0.0010418 | 0.0 | 0.00
Kspace | 16.566 | 16.566 | 16.566 | 0.0 | 33.85
Neigh | 0.21584 | 0.21584 | 0.21584 | 0.0 | 0.44
Comm | 0.04167 | 0.04167 | 0.04167 | 0.0 | 0.09
Output | 0.0014585 | 0.0014585 | 0.0014585 | 0.0 | 0.00
Modify | 14.445 | 14.445 | 14.445 | 0.0 | 29.52
Other | | 0.0134 | | | 0.03
Nlocal: 3776 ave 3776 max 3776 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 12510 ave 12510 max 12510 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 1.72559e+06 ave 1.72559e+06 max 1.72559e+06 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 1725588
Ave neighs/atom = 456.98835
Ave special neighs/atom = 0.50847458
Neighbor list builds = 6
Dangerous builds = 0
Total wall time: 0:01:43

View File

@ -0,0 +1,154 @@
LAMMPS (24 Mar 2022)
# electrodes with constrained total charges
# for graphene-ionic liquid supercapacitor
boundary p p f # slab calculation
include settings.mod # styles, groups, computes and fixes
# set boundary in main script because ffield is periodic
units real
# distribute electrode atoms among all processors:
if "$(extract_setting(world_size) % 2) == 0" then "processors * * 2"
processors * * 2
atom_style full
pair_style lj/cut/coul/long 16
bond_style harmonic
angle_style harmonic
kspace_style pppm/electrode 1e-7
# kspace_modify in main script because ffield is periodic
read_data "data.graph-il"
Reading data file ...
orthogonal box = (0 0 -68) to (32.2 34.4 68)
1 by 2 by 2 MPI processor grid
reading atoms ...
3776 atoms
scanning bonds ...
2 = max bonds/atom
scanning angles ...
1 = max angles/atom
reading bonds ...
640 bonds
reading angles ...
320 angles
Finding 1-2 1-3 1-4 neighbors ...
special bond factors lj: 0 0 0
special bond factors coul: 0 0 0
2 = max # of 1-2 neighbors
1 = max # of 1-3 neighbors
1 = max # of 1-4 neighbors
2 = max # of special neighbors
special bonds CPU = 0.001 seconds
read_data CPU = 0.020 seconds
group bot molecule 641
416 atoms in group bot
group top molecule 642
416 atoms in group top
group bmi type 1 2 3
960 atoms in group bmi
group electrolyte type 1 2 3 4
1280 atoms in group electrolyte
fix nvt electrolyte nvt temp 500.0 500.0 100
fix shake bmi shake 1e-4 20 0 b 1 2 a 1
0 = # of size 2 clusters
0 = # of size 3 clusters
0 = # of size 4 clusters
320 = # of frozen angles
find clusters CPU = 0.001 seconds
variable q atom q
compute qtop top reduce sum v_q
compute qbot bot reduce sum v_q
compute ctemp electrolyte temp
kspace_modify slab 3.0
fix conq bot electrode/conq -1.0 1.979 couple top 1.0 etypes 5 # conq doesn't take symm option
832 atoms in group conp_group
# ask fix conq to output electrode potentials to internal variables
variable vbot internal 0.0
variable vtop internal 0.0
fix_modify conq set v bot vbot
fix_modify conq set v top vtop
thermo 50
thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop v_vbot v_vtop
run 500
PPPM/electrode initialization ...
using 12-bit tables for long-range coulomb (src/kspace.cpp:342)
G vector (1/distance) = 0.20904498
grid = 32 32 200
stencil order = 5
estimated absolute RMS force accuracy = 3.7023506e-05
estimated relative force accuracy = 1.1149519e-07
using double precision MKL FFT
3d grid and FFT values/proc = 151593 85504
generated 10 of 10 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update every 1 steps, delay 10 steps, check yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 18
ghost atom cutoff = 18
binsize = 9, bins = 4 4 16
3 neighbor lists, perpetual/occasional/extra = 2 1 0
(1) pair lj/cut/coul/long, perpetual
attributes: half, newton on
pair build: half/bin/newton
stencil: half/bin/3d
bin: standard
(2) fix electrode/conq, occasional, skip from (1)
attributes: half, newton on
pair build: skip
stencil: none
bin: none
(3) fix electrode/conq, perpetual, skip from (1)
attributes: half, newton on
pair build: skip
stencil: none
bin: none
Per MPI rank memory allocation (min/avg/max) = 23.63 | 27.46 | 31.29 Mbytes
Step Temp c_ctemp E_pair TotEng c_qbot c_qtop v_vbot v_vtop
0 0 0 25136984 25136984 -1 1 -9.931852 10.097344
50 20.206425 72.797911 25136825 25137033 -1 1 -9.4359366 9.5964514
100 55.931663 201.50563 25136587 25137163 -1 1 -8.0440112 8.1861787
150 81.389273 293.22204 25136533 25137371 -1 1 -6.1113109 6.2267114
200 92.867946 334.57639 25136646 25137603 -1 1 -4.1857807 4.2740694
250 97.518304 351.33028 25136809 25137814 -1 1 -2.8383703 2.9101475
300 102.36577 368.79431 25136933 25137987 -1 1 -2.3831643 2.4461115
350 113.66597 409.50566 25136960 25138131 -1 1 -2.7083563 2.7457811
400 122.8443 442.57252 25136991 25138256 -1 1 -3.4311003 3.3941657
450 128.63713 463.44243 25137048 25138373 -1 1 -4.132871 3.9852959
500 131.18361 472.61665 25137142 25138493 -1 1 -4.5104095 4.2567261
Loop time of 28.8336 on 4 procs for 500 steps with 3776 atoms
Performance: 1.498 ns/day, 16.019 hours/ns, 17.341 timesteps/s
94.1% CPU use with 4 MPI tasks x no OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 5.7721 | 5.9353 | 6.144 | 6.0 | 20.58
Bond | 0.00057855 | 0.00067043 | 0.00074793 | 0.0 | 0.00
Kspace | 13.485 | 13.694 | 13.857 | 4.0 | 47.49
Neigh | 0.092021 | 0.092044 | 0.092068 | 0.0 | 0.32
Comm | 0.11486 | 0.11638 | 0.11801 | 0.4 | 0.40
Output | 0.00090452 | 0.001109 | 0.0017097 | 1.0 | 0.00
Modify | 8.974 | 8.9761 | 8.978 | 0.1 | 31.13
Other | | 0.01837 | | | 0.06
Nlocal: 944 ave 948 max 940 min
Histogram: 1 0 0 1 0 0 1 0 0 1
Nghost: 5920.5 ave 5941 max 5899 min
Histogram: 1 0 0 0 1 1 0 0 0 1
Neighs: 431397 ave 442329 max 421103 min
Histogram: 2 0 0 0 0 0 0 0 1 1
Total # of neighbors = 1725588
Ave neighs/atom = 456.98835
Ave special neighs/atom = 0.50847458
Neighbor list builds = 6
Dangerous builds = 0
Total wall time: 0:00:51

View File

@ -0,0 +1,170 @@
LAMMPS (24 Mar 2022)
# electrodes with constrained total charges imposed from dynamically computed potentials
# for graphene-ionic liquid supercapacitor
boundary p p f # slab calculation
include settings.mod # styles, groups, computes and fixes
# set boundary in main script because ffield is periodic
units real
# distribute electrode atoms among all processors:
if "$(extract_setting(world_size) % 2) == 0" then "processors * * 2"
atom_style full
pair_style lj/cut/coul/long 16
bond_style harmonic
angle_style harmonic
kspace_style pppm/electrode 1e-7
# kspace_modify in main script because ffield is periodic
read_data "data.graph-il"
Reading data file ...
orthogonal box = (0 0 -68) to (32.2 34.4 68)
1 by 1 by 1 MPI processor grid
reading atoms ...
3776 atoms
scanning bonds ...
2 = max bonds/atom
scanning angles ...
1 = max angles/atom
reading bonds ...
640 bonds
reading angles ...
320 angles
Finding 1-2 1-3 1-4 neighbors ...
special bond factors lj: 0 0 0
special bond factors coul: 0 0 0
2 = max # of 1-2 neighbors
1 = max # of 1-3 neighbors
1 = max # of 1-4 neighbors
2 = max # of special neighbors
special bonds CPU = 0.001 seconds
read_data CPU = 0.031 seconds
group bot molecule 641
416 atoms in group bot
group top molecule 642
416 atoms in group top
group bmi type 1 2 3
960 atoms in group bmi
group electrolyte type 1 2 3 4
1280 atoms in group electrolyte
fix nvt electrolyte nvt temp 500.0 500.0 100
fix shake bmi shake 1e-4 20 0 b 1 2 a 1
0 = # of size 2 clusters
0 = # of size 3 clusters
0 = # of size 4 clusters
320 = # of frozen angles
find clusters CPU = 0.001 seconds
variable q atom q
compute qtop top reduce sum v_q
compute qbot bot reduce sum v_q
compute ctemp electrolyte temp
kspace_modify slab 3.0
fix conp bot electrode/conp v_vbot 1.979 couple top v_vtop etypes 5
832 atoms in group conp_group
# get the four entries of electrode elastance matrix
variable me00 internal 0.0
variable me01 internal 0.0
variable me10 internal 0.0
variable me11 internal 0.0
fix_modify conp set me bot bot me00
fix_modify conp set me bot top me01
fix_modify conp set me top bot me10
fix_modify conp set me top top me11
# get the 0V charges (qsb), and excess charge required to reach preset total charges
variable qsb_bot internal 0.0
variable qsb_top internal 0.0
fix_modify conp set qsb bot qsb_bot
fix_modify conp set qsb top qsb_top
variable qex_bot equal -1.0-v_qsb_bot # difference between desired and 0V charge
variable qex_top equal 1.0-v_qsb_top # difference between desired and 0V charge
# calculate imposed potential as elastance * excess charge
# note: fix will wait until the run setup to look for its potential variables
variable vbot equal v_me00*v_qex_bot+v_me01*v_qex_top
variable vtop equal v_me10*v_qex_bot+v_me11*v_qex_top
thermo 50
thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop v_vbot v_vtop
run 500
PPPM/electrode initialization ...
using 12-bit tables for long-range coulomb (src/kspace.cpp:342)
G vector (1/distance) = 0.20904498
grid = 32 32 200
stencil order = 5
estimated absolute RMS force accuracy = 3.7023506e-05
estimated relative force accuracy = 1.1149519e-07
using double precision MKL FFT
3d grid and FFT values/proc = 307242 204800
generated 10 of 10 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update every 1 steps, delay 10 steps, check yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 18
ghost atom cutoff = 18
binsize = 9, bins = 4 4 16
3 neighbor lists, perpetual/occasional/extra = 2 1 0
(1) pair lj/cut/coul/long, perpetual
attributes: half, newton on
pair build: half/bin/newton
stencil: half/bin/3d
bin: standard
(2) fix electrode/conp, occasional, skip from (1)
attributes: half, newton on
pair build: skip
stencil: none
bin: none
(3) fix electrode/conp, perpetual, skip from (1)
attributes: half, newton on
pair build: skip
stencil: none
bin: none
Per MPI rank memory allocation (min/avg/max) = 56.89 | 56.89 | 56.89 Mbytes
Step Temp c_ctemp E_pair TotEng c_qbot c_qtop v_vbot v_vtop
0 0 0 25136984 25136984 -1 1 -9.931852 10.097344
50 20.206425 72.797911 25136825 25137033 -1 1 -9.4359366 9.5964514
100 55.931663 201.50563 25136587 25137163 -1 1 -8.0440112 8.1861787
150 81.389273 293.22204 25136533 25137371 -1 1 -6.1113109 6.2267114
200 92.867946 334.57639 25136646 25137603 -1 1 -4.1857807 4.2740694
250 97.518304 351.33028 25136809 25137814 -1 1 -2.8383703 2.9101475
300 102.36577 368.79431 25136933 25137987 -1 1 -2.3831643 2.4461115
350 113.66597 409.50566 25136960 25138131 -1 1 -2.7083563 2.7457811
400 122.8443 442.57252 25136991 25138256 -1 1 -3.4311003 3.3941657
450 128.63713 463.44243 25137048 25138373 -1 1 -4.132871 3.9852959
500 131.18361 472.61665 25137142 25138493 -1 1 -4.5104095 4.2567261
Loop time of 62.9692 on 1 procs for 500 steps with 3776 atoms
Performance: 0.686 ns/day, 34.983 hours/ns, 7.940 timesteps/s
393.7% CPU use with 1 MPI tasks x no OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 20.307 | 20.307 | 20.307 | 0.0 | 32.25
Bond | 0.0020074 | 0.0020074 | 0.0020074 | 0.0 | 0.00
Kspace | 23.562 | 23.562 | 23.562 | 0.0 | 37.42
Neigh | 0.26149 | 0.26149 | 0.26149 | 0.0 | 0.42
Comm | 0.059436 | 0.059436 | 0.059436 | 0.0 | 0.09
Output | 0.0023888 | 0.0023888 | 0.0023888 | 0.0 | 0.00
Modify | 18.756 | 18.756 | 18.756 | 0.0 | 29.79
Other | | 0.01897 | | | 0.03
Nlocal: 3776 ave 3776 max 3776 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 12510 ave 12510 max 12510 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 1.72559e+06 ave 1.72559e+06 max 1.72559e+06 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 1725588
Ave neighs/atom = 456.98835
Ave special neighs/atom = 0.50847458
Neighbor list builds = 6
Dangerous builds = 0
Total wall time: 0:02:26

View File

@ -0,0 +1,171 @@
LAMMPS (24 Mar 2022)
# electrodes with constrained total charges imposed from dynamically computed potentials
# for graphene-ionic liquid supercapacitor
boundary p p f # slab calculation
include settings.mod # styles, groups, computes and fixes
# set boundary in main script because ffield is periodic
units real
# distribute electrode atoms among all processors:
if "$(extract_setting(world_size) % 2) == 0" then "processors * * 2"
processors * * 2
atom_style full
pair_style lj/cut/coul/long 16
bond_style harmonic
angle_style harmonic
kspace_style pppm/electrode 1e-7
# kspace_modify in main script because ffield is periodic
read_data "data.graph-il"
Reading data file ...
orthogonal box = (0 0 -68) to (32.2 34.4 68)
1 by 2 by 2 MPI processor grid
reading atoms ...
3776 atoms
scanning bonds ...
2 = max bonds/atom
scanning angles ...
1 = max angles/atom
reading bonds ...
640 bonds
reading angles ...
320 angles
Finding 1-2 1-3 1-4 neighbors ...
special bond factors lj: 0 0 0
special bond factors coul: 0 0 0
2 = max # of 1-2 neighbors
1 = max # of 1-3 neighbors
1 = max # of 1-4 neighbors
2 = max # of special neighbors
special bonds CPU = 0.001 seconds
read_data CPU = 0.019 seconds
group bot molecule 641
416 atoms in group bot
group top molecule 642
416 atoms in group top
group bmi type 1 2 3
960 atoms in group bmi
group electrolyte type 1 2 3 4
1280 atoms in group electrolyte
fix nvt electrolyte nvt temp 500.0 500.0 100
fix shake bmi shake 1e-4 20 0 b 1 2 a 1
0 = # of size 2 clusters
0 = # of size 3 clusters
0 = # of size 4 clusters
320 = # of frozen angles
find clusters CPU = 0.001 seconds
variable q atom q
compute qtop top reduce sum v_q
compute qbot bot reduce sum v_q
compute ctemp electrolyte temp
kspace_modify slab 3.0
fix conp bot electrode/conp v_vbot 1.979 couple top v_vtop etypes 5
832 atoms in group conp_group
# get the four entries of electrode elastance matrix
variable me00 internal 0.0
variable me01 internal 0.0
variable me10 internal 0.0
variable me11 internal 0.0
fix_modify conp set me bot bot me00
fix_modify conp set me bot top me01
fix_modify conp set me top bot me10
fix_modify conp set me top top me11
# get the 0V charges (qsb), and excess charge required to reach preset total charges
variable qsb_bot internal 0.0
variable qsb_top internal 0.0
fix_modify conp set qsb bot qsb_bot
fix_modify conp set qsb top qsb_top
variable qex_bot equal -1.0-v_qsb_bot # difference between desired and 0V charge
variable qex_top equal 1.0-v_qsb_top # difference between desired and 0V charge
# calculate imposed potential as elastance * excess charge
# note: fix will wait until the run setup to look for its potential variables
variable vbot equal v_me00*v_qex_bot+v_me01*v_qex_top
variable vtop equal v_me10*v_qex_bot+v_me11*v_qex_top
thermo 50
thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop v_vbot v_vtop
run 500
PPPM/electrode initialization ...
using 12-bit tables for long-range coulomb (src/kspace.cpp:342)
G vector (1/distance) = 0.20904498
grid = 32 32 200
stencil order = 5
estimated absolute RMS force accuracy = 3.7023506e-05
estimated relative force accuracy = 1.1149519e-07
using double precision MKL FFT
3d grid and FFT values/proc = 151593 85504
generated 10 of 10 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update every 1 steps, delay 10 steps, check yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 18
ghost atom cutoff = 18
binsize = 9, bins = 4 4 16
3 neighbor lists, perpetual/occasional/extra = 2 1 0
(1) pair lj/cut/coul/long, perpetual
attributes: half, newton on
pair build: half/bin/newton
stencil: half/bin/3d
bin: standard
(2) fix electrode/conp, occasional, skip from (1)
attributes: half, newton on
pair build: skip
stencil: none
bin: none
(3) fix electrode/conp, perpetual, skip from (1)
attributes: half, newton on
pair build: skip
stencil: none
bin: none
Per MPI rank memory allocation (min/avg/max) = 23.63 | 27.46 | 31.29 Mbytes
Step Temp c_ctemp E_pair TotEng c_qbot c_qtop v_vbot v_vtop
0 0 0 25136984 25136984 -1 1 -9.931852 10.097344
50 20.206425 72.797911 25136825 25137033 -1 1 -9.4359366 9.5964514
100 55.931663 201.50563 25136587 25137163 -1 1 -8.0440112 8.1861787
150 81.389273 293.22204 25136533 25137371 -1 1 -6.1113109 6.2267114
200 92.867946 334.57639 25136646 25137603 -1 1 -4.1857807 4.2740694
250 97.518304 351.33028 25136809 25137814 -1 1 -2.8383703 2.9101475
300 102.36577 368.79431 25136933 25137987 -1 1 -2.3831643 2.4461115
350 113.66597 409.50566 25136960 25138131 -1 1 -2.7083563 2.7457811
400 122.8443 442.57252 25136991 25138256 -1 1 -3.4311003 3.3941657
450 128.63713 463.44243 25137048 25138373 -1 1 -4.132871 3.9852959
500 131.18361 472.61665 25137142 25138493 -1 1 -4.5104095 4.2567261
Loop time of 33.4031 on 4 procs for 500 steps with 3776 atoms
Performance: 1.293 ns/day, 18.557 hours/ns, 14.969 timesteps/s
94.3% CPU use with 4 MPI tasks x no OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 7.1262 | 7.3913 | 7.611 | 6.8 | 22.13
Bond | 0.0007191 | 0.00079089 | 0.00087005 | 0.0 | 0.00
Kspace | 15.139 | 15.358 | 15.623 | 4.7 | 45.98
Neigh | 0.10374 | 0.10377 | 0.10383 | 0.0 | 0.31
Comm | 0.14245 | 0.14353 | 0.14563 | 0.3 | 0.43
Output | 0.0012987 | 0.0015671 | 0.0022434 | 1.0 | 0.00
Modify | 10.381 | 10.383 | 10.384 | 0.0 | 31.08
Other | | 0.02134 | | | 0.06
Nlocal: 944 ave 948 max 940 min
Histogram: 1 0 0 1 0 0 1 0 0 1
Nghost: 5920.5 ave 5941 max 5899 min
Histogram: 1 0 0 0 1 1 0 0 0 1
Neighs: 431397 ave 442329 max 421103 min
Histogram: 2 0 0 0 0 0 0 0 1 1
Total # of neighbors = 1725588
Ave neighs/atom = 456.98835
Ave special neighs/atom = 0.50847458
Neighbor list builds = 6
Dangerous builds = 0
Total wall time: 0:01:01

View File

@ -0,0 +1,147 @@
LAMMPS (24 Mar 2022)
# electrodes with constant potential and smart neighborlists
# for graphene-ionic liquid supercapacitor
boundary p p f # slab calculation
include settings.mod # styles, groups, computes and fixes
# set boundary in main script because ffield is periodic
units real
# distribute electrode atoms among all processors:
if "$(extract_setting(world_size) % 2) == 0" then "processors * * 2"
atom_style full
pair_style lj/cut/coul/long 16
bond_style harmonic
angle_style harmonic
kspace_style pppm/electrode 1e-7
# kspace_modify in main script because ffield is periodic
read_data "data.graph-il"
Reading data file ...
orthogonal box = (0 0 -68) to (32.2 34.4 68)
1 by 1 by 1 MPI processor grid
reading atoms ...
3776 atoms
scanning bonds ...
2 = max bonds/atom
scanning angles ...
1 = max angles/atom
reading bonds ...
640 bonds
reading angles ...
320 angles
Finding 1-2 1-3 1-4 neighbors ...
special bond factors lj: 0 0 0
special bond factors coul: 0 0 0
2 = max # of 1-2 neighbors
1 = max # of 1-3 neighbors
1 = max # of 1-4 neighbors
2 = max # of special neighbors
special bonds CPU = 0.001 seconds
read_data CPU = 0.024 seconds
group bot molecule 641
416 atoms in group bot
group top molecule 642
416 atoms in group top
group bmi type 1 2 3
960 atoms in group bmi
group electrolyte type 1 2 3 4
1280 atoms in group electrolyte
fix nvt electrolyte nvt temp 500.0 500.0 100
fix shake bmi shake 1e-4 20 0 b 1 2 a 1
0 = # of size 2 clusters
0 = # of size 3 clusters
0 = # of size 4 clusters
320 = # of frozen angles
find clusters CPU = 0.001 seconds
variable q atom q
compute qtop top reduce sum v_q
compute qbot bot reduce sum v_q
compute ctemp electrolyte temp
kspace_modify slab 3.0
fix conp bot electrode/conp -1.0 1.979 couple top 1.0 symm on etypes 5
832 atoms in group conp_group
thermo 50
thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop
run 500
PPPM/electrode initialization ...
using 12-bit tables for long-range coulomb (src/kspace.cpp:342)
G vector (1/distance) = 0.20904498
grid = 32 32 200
stencil order = 5
estimated absolute RMS force accuracy = 3.7023506e-05
estimated relative force accuracy = 1.1149519e-07
using double precision MKL FFT
3d grid and FFT values/proc = 307242 204800
generated 10 of 10 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update every 1 steps, delay 10 steps, check yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 18
ghost atom cutoff = 18
binsize = 9, bins = 4 4 16
3 neighbor lists, perpetual/occasional/extra = 2 1 0
(1) pair lj/cut/coul/long, perpetual
attributes: half, newton on
pair build: half/bin/newton
stencil: half/bin/3d
bin: standard
(2) fix electrode/conp, occasional, skip from (1)
attributes: half, newton on
pair build: skip
stencil: none
bin: none
(3) fix electrode/conp, perpetual, skip from (1)
attributes: half, newton on
pair build: skip
stencil: none
bin: none
Per MPI rank memory allocation (min/avg/max) = 56.89 | 56.89 | 56.89 Mbytes
Step Temp c_ctemp E_pair TotEng c_qbot c_qtop
0 0 0 25137191 25137191 0.0085142912 -0.0085142912
50 17.83755 64.26354 25137031 25137214 0.0045923944 -0.0045923944
100 48.393682 174.34846 25136774 25137273 -0.009514517 0.009514517
150 70.421272 253.7075 25136655 25137380 -0.033017005 0.033017005
200 82.204844 296.16031 25136667 25137514 -0.063668175 0.063668175
250 87.54223 315.38937 25136757 25137659 -0.096776257 0.096776257
300 91.704746 330.38571 25136865 25137810 -0.1283784 0.1283784
350 100.36017 361.56871 25136934 25137968 -0.15649799 0.15649799
400 111.37575 401.25467 25136986 25138133 -0.18065435 0.18065435
450 121.79848 438.80476 25137043 25138298 -0.19979365 0.19979365
500 126.95916 457.39718 25137145 25138453 -0.21037535 0.21037535
Loop time of 63.497 on 1 procs for 500 steps with 3776 atoms
Performance: 0.680 ns/day, 35.276 hours/ns, 7.874 timesteps/s
393.9% CPU use with 1 MPI tasks x no OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 20.628 | 20.628 | 20.628 | 0.0 | 32.49
Bond | 0.0019309 | 0.0019309 | 0.0019309 | 0.0 | 0.00
Kspace | 23.61 | 23.61 | 23.61 | 0.0 | 37.18
Neigh | 0.28156 | 0.28156 | 0.28156 | 0.0 | 0.44
Comm | 0.061191 | 0.061191 | 0.061191 | 0.0 | 0.10
Output | 0.0022666 | 0.0022666 | 0.0022666 | 0.0 | 0.00
Modify | 18.891 | 18.891 | 18.891 | 0.0 | 29.75
Other | | 0.02047 | | | 0.03
Nlocal: 3776 ave 3776 max 3776 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 12509 ave 12509 max 12509 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 1.72633e+06 ave 1.72633e+06 max 1.72633e+06 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 1726328
Ave neighs/atom = 457.18432
Ave special neighs/atom = 0.50847458
Neighbor list builds = 7
Dangerous builds = 0
Total wall time: 0:02:24

View File

@ -0,0 +1,148 @@
LAMMPS (24 Mar 2022)
# electrodes with constant potential and smart neighborlists
# for graphene-ionic liquid supercapacitor
boundary p p f # slab calculation
include settings.mod # styles, groups, computes and fixes
# set boundary in main script because ffield is periodic
units real
# distribute electrode atoms among all processors:
if "$(extract_setting(world_size) % 2) == 0" then "processors * * 2"
processors * * 2
atom_style full
pair_style lj/cut/coul/long 16
bond_style harmonic
angle_style harmonic
kspace_style pppm/electrode 1e-7
# kspace_modify in main script because ffield is periodic
read_data "data.graph-il"
Reading data file ...
orthogonal box = (0 0 -68) to (32.2 34.4 68)
1 by 2 by 2 MPI processor grid
reading atoms ...
3776 atoms
scanning bonds ...
2 = max bonds/atom
scanning angles ...
1 = max angles/atom
reading bonds ...
640 bonds
reading angles ...
320 angles
Finding 1-2 1-3 1-4 neighbors ...
special bond factors lj: 0 0 0
special bond factors coul: 0 0 0
2 = max # of 1-2 neighbors
1 = max # of 1-3 neighbors
1 = max # of 1-4 neighbors
2 = max # of special neighbors
special bonds CPU = 0.001 seconds
read_data CPU = 0.016 seconds
group bot molecule 641
416 atoms in group bot
group top molecule 642
416 atoms in group top
group bmi type 1 2 3
960 atoms in group bmi
group electrolyte type 1 2 3 4
1280 atoms in group electrolyte
fix nvt electrolyte nvt temp 500.0 500.0 100
fix shake bmi shake 1e-4 20 0 b 1 2 a 1
0 = # of size 2 clusters
0 = # of size 3 clusters
0 = # of size 4 clusters
320 = # of frozen angles
find clusters CPU = 0.001 seconds
variable q atom q
compute qtop top reduce sum v_q
compute qbot bot reduce sum v_q
compute ctemp electrolyte temp
kspace_modify slab 3.0
fix conp bot electrode/conp -1.0 1.979 couple top 1.0 symm on etypes 5
832 atoms in group conp_group
thermo 50
thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop
run 500
PPPM/electrode initialization ...
using 12-bit tables for long-range coulomb (src/kspace.cpp:342)
G vector (1/distance) = 0.20904498
grid = 32 32 200
stencil order = 5
estimated absolute RMS force accuracy = 3.7023506e-05
estimated relative force accuracy = 1.1149519e-07
using double precision MKL FFT
3d grid and FFT values/proc = 151593 85504
generated 10 of 10 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update every 1 steps, delay 10 steps, check yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 18
ghost atom cutoff = 18
binsize = 9, bins = 4 4 16
3 neighbor lists, perpetual/occasional/extra = 2 1 0
(1) pair lj/cut/coul/long, perpetual
attributes: half, newton on
pair build: half/bin/newton
stencil: half/bin/3d
bin: standard
(2) fix electrode/conp, occasional, skip from (1)
attributes: half, newton on
pair build: skip
stencil: none
bin: none
(3) fix electrode/conp, perpetual, skip from (1)
attributes: half, newton on
pair build: skip
stencil: none
bin: none
Per MPI rank memory allocation (min/avg/max) = 23.63 | 27.46 | 31.29 Mbytes
Step Temp c_ctemp E_pair TotEng c_qbot c_qtop
0 0 0 25137191 25137191 0.0085142912 -0.0085142912
50 17.83755 64.26354 25137031 25137214 0.0045923944 -0.0045923944
100 48.393682 174.34846 25136774 25137273 -0.009514517 0.009514517
150 70.421272 253.7075 25136655 25137380 -0.033017005 0.033017005
200 82.204844 296.16031 25136667 25137514 -0.063668175 0.063668175
250 87.54223 315.38937 25136757 25137659 -0.096776257 0.096776257
300 91.704746 330.38571 25136865 25137810 -0.1283784 0.1283784
350 100.36017 361.56871 25136934 25137968 -0.15649799 0.15649799
400 111.37575 401.25467 25136986 25138133 -0.18065435 0.18065435
450 121.79848 438.80476 25137043 25138298 -0.19979365 0.19979365
500 126.95916 457.39718 25137145 25138453 -0.21037535 0.21037535
Loop time of 30.7883 on 4 procs for 500 steps with 3776 atoms
Performance: 1.403 ns/day, 17.105 hours/ns, 16.240 timesteps/s
94.1% CPU use with 4 MPI tasks x no OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 6.5102 | 6.7303 | 6.9362 | 7.6 | 21.86
Bond | 0.00064504 | 0.00071061 | 0.000779 | 0.0 | 0.00
Kspace | 14.081 | 14.287 | 14.507 | 5.2 | 46.40
Neigh | 0.11831 | 0.11841 | 0.11851 | 0.0 | 0.38
Comm | 0.12216 | 0.12434 | 0.12651 | 0.6 | 0.40
Output | 0.00083347 | 0.0010533 | 0.0017069 | 1.2 | 0.00
Modify | 9.5052 | 9.5071 | 9.5093 | 0.1 | 30.88
Other | | 0.01927 | | | 0.06
Nlocal: 944 ave 951 max 941 min
Histogram: 1 2 0 0 0 0 0 0 0 1
Nghost: 5923.25 ave 5941 max 5906 min
Histogram: 1 0 0 1 0 0 1 0 0 1
Neighs: 431582 ave 442090 max 419903 min
Histogram: 1 1 0 0 0 0 0 0 0 2
Total # of neighbors = 1726328
Ave neighs/atom = 457.18432
Ave special neighs/atom = 0.50847458
Neighbor list builds = 7
Dangerous builds = 0
Total wall time: 0:00:56

View File

@ -0,0 +1,146 @@
LAMMPS (24 Mar 2022)
# electrodes with constant potential using finite field
# for z-periodic graphene-ionic liquid supercapacitor
boundary p p p # ffield uses periodic z-boundary and no slab
include settings.mod # styles, groups, computes and fixes
# set boundary in main script because ffield is periodic
units real
# distribute electrode atoms among all processors:
if "$(extract_setting(world_size) % 2) == 0" then "processors * * 2"
atom_style full
pair_style lj/cut/coul/long 16
bond_style harmonic
angle_style harmonic
kspace_style pppm/electrode 1e-7
# kspace_modify in main script because ffield is periodic
read_data "data.graph-il"
Reading data file ...
orthogonal box = (0 0 -68) to (32.2 34.4 68)
1 by 1 by 1 MPI processor grid
reading atoms ...
3776 atoms
scanning bonds ...
2 = max bonds/atom
scanning angles ...
1 = max angles/atom
reading bonds ...
640 bonds
reading angles ...
320 angles
Finding 1-2 1-3 1-4 neighbors ...
special bond factors lj: 0 0 0
special bond factors coul: 0 0 0
2 = max # of 1-2 neighbors
1 = max # of 1-3 neighbors
1 = max # of 1-4 neighbors
2 = max # of special neighbors
special bonds CPU = 0.001 seconds
read_data CPU = 0.022 seconds
group bot molecule 641
416 atoms in group bot
group top molecule 642
416 atoms in group top
group bmi type 1 2 3
960 atoms in group bmi
group electrolyte type 1 2 3 4
1280 atoms in group electrolyte
fix nvt electrolyte nvt temp 500.0 500.0 100
fix shake bmi shake 1e-4 20 0 b 1 2 a 1
0 = # of size 2 clusters
0 = # of size 3 clusters
0 = # of size 4 clusters
320 = # of frozen angles
find clusters CPU = 0.001 seconds
variable q atom q
compute qtop top reduce sum v_q
compute qbot bot reduce sum v_q
compute ctemp electrolyte temp
fix conp bot electrode/conp -1.0 1.979 couple top 1.0 symm on etypes 5 ffield yes
832 atoms in group conp_group
thermo 50
thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop
run 500
PPPM/electrode initialization ...
using 12-bit tables for long-range coulomb (src/kspace.cpp:342)
G vector (1/distance) = 0.20949995
grid = 32 32 90
stencil order = 5
estimated absolute RMS force accuracy = 3.5014341e-05
estimated relative force accuracy = 1.0544465e-07
using double precision MKL FFT
3d grid and FFT values/proc = 147537 92160
generated 10 of 10 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update every 1 steps, delay 10 steps, check yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 18
ghost atom cutoff = 18
binsize = 9, bins = 4 4 16
3 neighbor lists, perpetual/occasional/extra = 2 1 0
(1) pair lj/cut/coul/long, perpetual
attributes: half, newton on
pair build: half/bin/newton
stencil: half/bin/3d
bin: standard
(2) fix electrode/conp, occasional, skip from (1)
attributes: half, newton on
pair build: skip
stencil: none
bin: none
(3) fix electrode/conp, perpetual, skip from (1)
attributes: half, newton on
pair build: skip
stencil: none
bin: none
Per MPI rank memory allocation (min/avg/max) = 49.5 | 49.5 | 49.5 Mbytes
Step Temp c_ctemp E_pair TotEng c_qbot c_qtop
0 0 0 25137187 25137187 0.0085209384 -0.0085209384
50 17.837642 64.263873 25137027 25137211 0.0045513522 -0.0045513522
100 48.393984 174.34955 25136771 25137269 -0.0097291786 0.0097291786
150 70.421823 253.70949 25136651 25137377 -0.033522793 0.033522793
200 82.205535 296.1628 25136664 25137510 -0.064555648 0.064555648
250 87.542843 315.39158 25136754 25137655 -0.098075546 0.098075546
300 91.705733 330.38927 25136862 25137806 -0.13006751 0.13006751
350 100.36128 361.5727 25136930 25137964 -0.15852814 0.15852814
400 111.37586 401.25505 25136982 25138129 -0.18297207 0.18297207
450 121.79814 438.80351 25137039 25138294 -0.2023394 0.2023394
500 126.95882 457.39597 25137142 25138449 -0.21305221 0.21305221
Loop time of 36.7618 on 1 procs for 500 steps with 3776 atoms
Performance: 1.175 ns/day, 20.423 hours/ns, 13.601 timesteps/s
393.9% CPU use with 1 MPI tasks x no OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 19.737 | 19.737 | 19.737 | 0.0 | 53.69
Bond | 0.00092668 | 0.00092668 | 0.00092668 | 0.0 | 0.00
Kspace | 6.5854 | 6.5854 | 6.5854 | 0.0 | 17.91
Neigh | 0.33914 | 0.33914 | 0.33914 | 0.0 | 0.92
Comm | 0.090124 | 0.090124 | 0.090124 | 0.0 | 0.25
Output | 0.0013975 | 0.0013975 | 0.0013975 | 0.0 | 0.00
Modify | 9.9834 | 9.9834 | 9.9834 | 0.0 | 27.16
Other | | 0.02455 | | | 0.07
Nlocal: 3776 ave 3776 max 3776 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 23654 ave 23654 max 23654 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 1.86369e+06 ave 1.86369e+06 max 1.86369e+06 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 1863691
Ave neighs/atom = 493.56224
Ave special neighs/atom = 0.50847458
Neighbor list builds = 7
Dangerous builds = 0
Total wall time: 0:01:39

View File

@ -0,0 +1,147 @@
LAMMPS (24 Mar 2022)
# electrodes with constant potential using finite field
# for z-periodic graphene-ionic liquid supercapacitor
boundary p p p # ffield uses periodic z-boundary and no slab
include settings.mod # styles, groups, computes and fixes
# set boundary in main script because ffield is periodic
units real
# distribute electrode atoms among all processors:
if "$(extract_setting(world_size) % 2) == 0" then "processors * * 2"
processors * * 2
atom_style full
pair_style lj/cut/coul/long 16
bond_style harmonic
angle_style harmonic
kspace_style pppm/electrode 1e-7
# kspace_modify in main script because ffield is periodic
read_data "data.graph-il"
Reading data file ...
orthogonal box = (0 0 -68) to (32.2 34.4 68)
1 by 2 by 2 MPI processor grid
reading atoms ...
3776 atoms
scanning bonds ...
2 = max bonds/atom
scanning angles ...
1 = max angles/atom
reading bonds ...
640 bonds
reading angles ...
320 angles
Finding 1-2 1-3 1-4 neighbors ...
special bond factors lj: 0 0 0
special bond factors coul: 0 0 0
2 = max # of 1-2 neighbors
1 = max # of 1-3 neighbors
1 = max # of 1-4 neighbors
2 = max # of special neighbors
special bonds CPU = 0.001 seconds
read_data CPU = 0.016 seconds
group bot molecule 641
416 atoms in group bot
group top molecule 642
416 atoms in group top
group bmi type 1 2 3
960 atoms in group bmi
group electrolyte type 1 2 3 4
1280 atoms in group electrolyte
fix nvt electrolyte nvt temp 500.0 500.0 100
fix shake bmi shake 1e-4 20 0 b 1 2 a 1
0 = # of size 2 clusters
0 = # of size 3 clusters
0 = # of size 4 clusters
320 = # of frozen angles
find clusters CPU = 0.001 seconds
variable q atom q
compute qtop top reduce sum v_q
compute qbot bot reduce sum v_q
compute ctemp electrolyte temp
fix conp bot electrode/conp -1.0 1.979 couple top 1.0 symm on etypes 5 ffield yes
832 atoms in group conp_group
thermo 50
thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop
run 500
PPPM/electrode initialization ...
using 12-bit tables for long-range coulomb (src/kspace.cpp:342)
G vector (1/distance) = 0.20949995
grid = 32 32 90
stencil order = 5
estimated absolute RMS force accuracy = 3.5014341e-05
estimated relative force accuracy = 1.0544465e-07
using double precision MKL FFT
3d grid and FFT values/proc = 46644 23552
generated 10 of 10 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update every 1 steps, delay 10 steps, check yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 18
ghost atom cutoff = 18
binsize = 9, bins = 4 4 16
3 neighbor lists, perpetual/occasional/extra = 2 1 0
(1) pair lj/cut/coul/long, perpetual
attributes: half, newton on
pair build: half/bin/newton
stencil: half/bin/3d
bin: standard
(2) fix electrode/conp, occasional, skip from (1)
attributes: half, newton on
pair build: skip
stencil: none
bin: none
(3) fix electrode/conp, perpetual, skip from (1)
attributes: half, newton on
pair build: skip
stencil: none
bin: none
Per MPI rank memory allocation (min/avg/max) = 21.96 | 22.27 | 22.77 Mbytes
Step Temp c_ctemp E_pair TotEng c_qbot c_qtop
0 0 0 25137187 25137187 0.0085209384 -0.0085209384
50 17.837642 64.263873 25137027 25137211 0.0045513522 -0.0045513522
100 48.393984 174.34955 25136771 25137269 -0.0097291786 0.0097291786
150 70.421823 253.70949 25136651 25137377 -0.033522793 0.033522793
200 82.205535 296.1628 25136664 25137510 -0.064555648 0.064555648
250 87.542843 315.39158 25136754 25137655 -0.098075546 0.098075546
300 91.705733 330.38927 25136862 25137806 -0.13006751 0.13006751
350 100.36128 361.5727 25136930 25137964 -0.15852814 0.15852814
400 111.37586 401.25505 25136982 25138129 -0.18297207 0.18297207
450 121.79814 438.80351 25137039 25138294 -0.2023394 0.2023394
500 126.95882 457.39597 25137142 25138449 -0.21305221 0.21305221
Loop time of 19.3932 on 4 procs for 500 steps with 3776 atoms
Performance: 2.228 ns/day, 10.774 hours/ns, 25.782 timesteps/s
96.3% CPU use with 4 MPI tasks x no OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 7.1247 | 7.6399 | 8.1323 | 13.3 | 39.39
Bond | 0.00072445 | 0.00077581 | 0.00085933 | 0.0 | 0.00
Kspace | 5.098 | 5.5905 | 6.1036 | 15.6 | 28.83
Neigh | 0.145 | 0.14517 | 0.14532 | 0.0 | 0.75
Comm | 0.24683 | 0.25127 | 0.25907 | 1.0 | 1.30
Output | 0.00084146 | 0.0011298 | 0.0019741 | 1.5 | 0.01
Modify | 5.6957 | 5.7129 | 5.729 | 0.6 | 29.46
Other | | 0.05153 | | | 0.27
Nlocal: 944 ave 951 max 941 min
Histogram: 1 2 0 0 0 0 0 0 0 1
Nghost: 10122.8 ave 10136 max 10101 min
Histogram: 1 0 0 0 0 0 1 0 1 1
Neighs: 465923 ave 510116 max 422901 min
Histogram: 1 0 1 0 0 0 0 1 0 1
Total # of neighbors = 1863691
Ave neighs/atom = 493.56224
Ave special neighs/atom = 0.50847458
Neighbor list builds = 7
Dangerous builds = 0
Total wall time: 0:00:44

View File

@ -0,0 +1,148 @@
LAMMPS (24 Mar 2022)
# electrodes with equal-style ramped (electrode-)constant potential
# for graphene-ionic liquid supercapacitor
boundary p p f # slab calculation
include settings.mod # styles, groups, computes and fixes
# set boundary in main script because ffield is periodic
units real
# distribute electrode atoms among all processors:
if "$(extract_setting(world_size) % 2) == 0" then "processors * * 2"
atom_style full
pair_style lj/cut/coul/long 16
bond_style harmonic
angle_style harmonic
kspace_style pppm/electrode 1e-7
# kspace_modify in main script because ffield is periodic
read_data "data.graph-il"
Reading data file ...
orthogonal box = (0 0 -68) to (32.2 34.4 68)
1 by 1 by 1 MPI processor grid
reading atoms ...
3776 atoms
scanning bonds ...
2 = max bonds/atom
scanning angles ...
1 = max angles/atom
reading bonds ...
640 bonds
reading angles ...
320 angles
Finding 1-2 1-3 1-4 neighbors ...
special bond factors lj: 0 0 0
special bond factors coul: 0 0 0
2 = max # of 1-2 neighbors
1 = max # of 1-3 neighbors
1 = max # of 1-4 neighbors
2 = max # of special neighbors
special bonds CPU = 0.001 seconds
read_data CPU = 0.014 seconds
group bot molecule 641
416 atoms in group bot
group top molecule 642
416 atoms in group top
group bmi type 1 2 3
960 atoms in group bmi
group electrolyte type 1 2 3 4
1280 atoms in group electrolyte
fix nvt electrolyte nvt temp 500.0 500.0 100
fix shake bmi shake 1e-4 20 0 b 1 2 a 1
0 = # of size 2 clusters
0 = # of size 3 clusters
0 = # of size 4 clusters
320 = # of frozen angles
find clusters CPU = 0.001 seconds
variable q atom q
compute qtop top reduce sum v_q
compute qbot bot reduce sum v_q
compute ctemp electrolyte temp
kspace_modify slab 3.0
variable v equal ramp(2,4)
fix conp bot electrode/conp 0.0 1.979 couple top v_v symm on etypes 5
832 atoms in group conp_group
thermo 50
thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop v_v
run 500
PPPM/electrode initialization ...
using 12-bit tables for long-range coulomb (src/kspace.cpp:342)
G vector (1/distance) = 0.20904498
grid = 32 32 200
stencil order = 5
estimated absolute RMS force accuracy = 3.7023506e-05
estimated relative force accuracy = 1.1149519e-07
using double precision MKL FFT
3d grid and FFT values/proc = 307242 204800
generated 10 of 10 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update every 1 steps, delay 10 steps, check yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 18
ghost atom cutoff = 18
binsize = 9, bins = 4 4 16
3 neighbor lists, perpetual/occasional/extra = 2 1 0
(1) pair lj/cut/coul/long, perpetual
attributes: half, newton on
pair build: half/bin/newton
stencil: half/bin/3d
bin: standard
(2) fix electrode/conp, occasional, skip from (1)
attributes: half, newton on
pair build: skip
stencil: none
bin: none
(3) fix electrode/conp, perpetual, skip from (1)
attributes: half, newton on
pair build: skip
stencil: none
bin: none
Per MPI rank memory allocation (min/avg/max) = 56.89 | 56.89 | 56.89 Mbytes
Step Temp c_ctemp E_pair TotEng c_qbot c_qtop v_v
0 0 0 25137191 25137191 0.0085142912 -0.0085142912 2
50 17.839699 64.271283 25137031 25137214 -0.0067894391 0.0067894391 2.2
100 48.411618 174.41308 25136774 25137273 -0.033422174 0.033422174 2.4
150 70.478909 253.91515 25136654 25137380 -0.071583953 0.071583953 2.6
200 82.322716 296.58497 25136666 25137513 -0.11962095 0.11962095 2.8
250 87.739905 316.10153 25136754 25137658 -0.17281469 0.17281469 3
300 91.974584 331.35786 25136861 25137808 -0.22657123 0.22657123 3.2
350 100.73048 362.90284 25136928 25137965 -0.27817429 0.27817429 3.4
400 111.78597 402.73256 25136977 25138129 -0.32659395 0.32659395 3.6
450 122.14181 440.04167 25137033 25138291 -0.37054363 0.37054363 3.8
500 127.32331 458.70912 25137133 25138444 -0.40653009 0.40653009 4
Loop time of 50.8569 on 1 procs for 500 steps with 3776 atoms
Performance: 0.849 ns/day, 28.254 hours/ns, 9.831 timesteps/s
393.5% CPU use with 1 MPI tasks x no OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 18.166 | 18.166 | 18.166 | 0.0 | 35.72
Bond | 0.00091918 | 0.00091918 | 0.00091918 | 0.0 | 0.00
Kspace | 17.267 | 17.267 | 17.267 | 0.0 | 33.95
Neigh | 0.27635 | 0.27635 | 0.27635 | 0.0 | 0.54
Comm | 0.044714 | 0.044714 | 0.044714 | 0.0 | 0.09
Output | 0.0018345 | 0.0018345 | 0.0018345 | 0.0 | 0.00
Modify | 15.086 | 15.086 | 15.086 | 0.0 | 29.66
Other | | 0.01409 | | | 0.03
Nlocal: 3776 ave 3776 max 3776 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 12511 ave 12511 max 12511 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 1.72628e+06 ave 1.72628e+06 max 1.72628e+06 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 1726280
Ave neighs/atom = 457.17161
Ave special neighs/atom = 0.50847458
Neighbor list builds = 7
Dangerous builds = 0
Total wall time: 0:01:50

View File

@ -0,0 +1,149 @@
LAMMPS (24 Mar 2022)
# electrodes with equal-style ramped (electrode-)constant potential
# for graphene-ionic liquid supercapacitor
boundary p p f # slab calculation
include settings.mod # styles, groups, computes and fixes
# set boundary in main script because ffield is periodic
units real
# distribute electrode atoms among all processors:
if "$(extract_setting(world_size) % 2) == 0" then "processors * * 2"
processors * * 2
atom_style full
pair_style lj/cut/coul/long 16
bond_style harmonic
angle_style harmonic
kspace_style pppm/electrode 1e-7
# kspace_modify in main script because ffield is periodic
read_data "data.graph-il"
Reading data file ...
orthogonal box = (0 0 -68) to (32.2 34.4 68)
1 by 2 by 2 MPI processor grid
reading atoms ...
3776 atoms
scanning bonds ...
2 = max bonds/atom
scanning angles ...
1 = max angles/atom
reading bonds ...
640 bonds
reading angles ...
320 angles
Finding 1-2 1-3 1-4 neighbors ...
special bond factors lj: 0 0 0
special bond factors coul: 0 0 0
2 = max # of 1-2 neighbors
1 = max # of 1-3 neighbors
1 = max # of 1-4 neighbors
2 = max # of special neighbors
special bonds CPU = 0.001 seconds
read_data CPU = 0.024 seconds
group bot molecule 641
416 atoms in group bot
group top molecule 642
416 atoms in group top
group bmi type 1 2 3
960 atoms in group bmi
group electrolyte type 1 2 3 4
1280 atoms in group electrolyte
fix nvt electrolyte nvt temp 500.0 500.0 100
fix shake bmi shake 1e-4 20 0 b 1 2 a 1
0 = # of size 2 clusters
0 = # of size 3 clusters
0 = # of size 4 clusters
320 = # of frozen angles
find clusters CPU = 0.001 seconds
variable q atom q
compute qtop top reduce sum v_q
compute qbot bot reduce sum v_q
compute ctemp electrolyte temp
kspace_modify slab 3.0
variable v equal ramp(2,4)
fix conp bot electrode/conp 0.0 1.979 couple top v_v symm on etypes 5
832 atoms in group conp_group
thermo 50
thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop v_v
run 500
PPPM/electrode initialization ...
using 12-bit tables for long-range coulomb (src/kspace.cpp:342)
G vector (1/distance) = 0.20904498
grid = 32 32 200
stencil order = 5
estimated absolute RMS force accuracy = 3.7023506e-05
estimated relative force accuracy = 1.1149519e-07
using double precision MKL FFT
3d grid and FFT values/proc = 151593 85504
generated 10 of 10 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update every 1 steps, delay 10 steps, check yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 18
ghost atom cutoff = 18
binsize = 9, bins = 4 4 16
3 neighbor lists, perpetual/occasional/extra = 2 1 0
(1) pair lj/cut/coul/long, perpetual
attributes: half, newton on
pair build: half/bin/newton
stencil: half/bin/3d
bin: standard
(2) fix electrode/conp, occasional, skip from (1)
attributes: half, newton on
pair build: skip
stencil: none
bin: none
(3) fix electrode/conp, perpetual, skip from (1)
attributes: half, newton on
pair build: skip
stencil: none
bin: none
Per MPI rank memory allocation (min/avg/max) = 23.63 | 27.46 | 31.29 Mbytes
Step Temp c_ctemp E_pair TotEng c_qbot c_qtop v_v
0 0 0 25137191 25137191 0.0085142912 -0.0085142912 2
50 17.839699 64.271283 25137031 25137214 -0.0067894391 0.0067894391 2.2
100 48.411618 174.41308 25136774 25137273 -0.033422174 0.033422174 2.4
150 70.478909 253.91515 25136654 25137380 -0.071583953 0.071583953 2.6
200 82.322716 296.58497 25136666 25137513 -0.11962095 0.11962095 2.8
250 87.739905 316.10153 25136754 25137658 -0.17281469 0.17281469 3
300 91.974584 331.35786 25136861 25137808 -0.22657123 0.22657123 3.2
350 100.73048 362.90284 25136928 25137965 -0.27817429 0.27817429 3.4
400 111.78597 402.73256 25136977 25138129 -0.32659395 0.32659395 3.6
450 122.14181 440.04167 25137033 25138291 -0.37054363 0.37054363 3.8
500 127.32331 458.70912 25137133 25138444 -0.40653009 0.40653009 4
Loop time of 31.7642 on 4 procs for 500 steps with 3776 atoms
Performance: 1.360 ns/day, 17.647 hours/ns, 15.741 timesteps/s
94.1% CPU use with 4 MPI tasks x no OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 6.7949 | 7.0359 | 7.3092 | 7.9 | 22.15
Bond | 0.00069874 | 0.00073747 | 0.00077928 | 0.0 | 0.00
Kspace | 14.375 | 14.648 | 14.89 | 5.5 | 46.12
Neigh | 0.12057 | 0.1206 | 0.12062 | 0.0 | 0.38
Comm | 0.13412 | 0.13439 | 0.13483 | 0.1 | 0.42
Output | 0.0010019 | 0.0013088 | 0.0020937 | 1.3 | 0.00
Modify | 9.8017 | 9.8025 | 9.8031 | 0.0 | 30.86
Other | | 0.02036 | | | 0.06
Nlocal: 944 ave 951 max 941 min
Histogram: 1 2 0 0 0 0 0 0 0 1
Nghost: 5924.75 ave 5941 max 5910 min
Histogram: 1 0 0 1 0 1 0 0 0 1
Neighs: 431570 ave 442073 max 419253 min
Histogram: 1 1 0 0 0 0 0 0 0 2
Total # of neighbors = 1726280
Ave neighs/atom = 457.17161
Ave special neighs/atom = 0.50847458
Neighbor list builds = 7
Dangerous builds = 0
Total wall time: 0:00:58

View File

@ -0,0 +1,154 @@
LAMMPS (24 Mar 2022)
# electrodes with thermopotentiostat
# for graphene-ionic liquid supercapacitor
boundary p p f # slab calculation
include settings.mod # styles, groups, computes and fixes
# set boundary in main script because ffield is periodic
units real
# distribute electrode atoms among all processors:
if "$(extract_setting(world_size) % 2) == 0" then "processors * * 2"
atom_style full
pair_style lj/cut/coul/long 16
bond_style harmonic
angle_style harmonic
kspace_style pppm/electrode 1e-7
# kspace_modify in main script because ffield is periodic
read_data "data.graph-il"
Reading data file ...
orthogonal box = (0 0 -68) to (32.2 34.4 68)
1 by 1 by 1 MPI processor grid
reading atoms ...
3776 atoms
scanning bonds ...
2 = max bonds/atom
scanning angles ...
1 = max angles/atom
reading bonds ...
640 bonds
reading angles ...
320 angles
Finding 1-2 1-3 1-4 neighbors ...
special bond factors lj: 0 0 0
special bond factors coul: 0 0 0
2 = max # of 1-2 neighbors
1 = max # of 1-3 neighbors
1 = max # of 1-4 neighbors
2 = max # of special neighbors
special bonds CPU = 0.002 seconds
read_data CPU = 0.024 seconds
group bot molecule 641
416 atoms in group bot
group top molecule 642
416 atoms in group top
group bmi type 1 2 3
960 atoms in group bmi
group electrolyte type 1 2 3 4
1280 atoms in group electrolyte
fix nvt electrolyte nvt temp 500.0 500.0 100
fix shake bmi shake 1e-4 20 0 b 1 2 a 1
0 = # of size 2 clusters
0 = # of size 3 clusters
0 = # of size 4 clusters
320 = # of frozen angles
find clusters CPU = 0.000 seconds
variable q atom q
compute qtop top reduce sum v_q
compute qbot bot reduce sum v_q
compute ctemp electrolyte temp
kspace_modify slab 3.0
unfix nvt # remove NVT thermostat included from "settings.mod"
fix conpthermo bot electrode/thermo -1.0 1.979 couple top 1.0 etypes 5 temp 500 100 7 # temp tau rng
832 atoms in group conp_group
# to compare to regular constant potential, switch previous line to this:
#fix conp bot electrode/conp -1.0 1.979 couple top 1.0 etypes 5 symm on
fix nve electrolyte nve
# note ionic liquid does not reach 500K immediately
# because its thermal response time is finite
# run this about 10k steps (10ps) to reach preset temperature
thermo 50
thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop
run 500
PPPM/electrode initialization ...
using 12-bit tables for long-range coulomb (src/kspace.cpp:342)
G vector (1/distance) = 0.20904498
grid = 32 32 200
stencil order = 5
estimated absolute RMS force accuracy = 3.7023506e-05
estimated relative force accuracy = 1.1149519e-07
using double precision MKL FFT
3d grid and FFT values/proc = 307242 204800
generated 10 of 10 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update every 1 steps, delay 10 steps, check yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 18
ghost atom cutoff = 18
binsize = 9, bins = 4 4 16
3 neighbor lists, perpetual/occasional/extra = 2 1 0
(1) pair lj/cut/coul/long, perpetual
attributes: half, newton on
pair build: half/bin/newton
stencil: half/bin/3d
bin: standard
(2) fix electrode/thermo, occasional, skip from (1)
attributes: half, newton on
pair build: skip
stencil: none
bin: none
(3) fix electrode/thermo, perpetual, skip from (1)
attributes: half, newton on
pair build: skip
stencil: none
bin: none
Per MPI rank memory allocation (min/avg/max) = 56.89 | 56.89 | 56.89 Mbytes
Step Temp c_ctemp E_pair TotEng c_qbot c_qtop
0 0 0 25137187 25137187 0.12767613 -0.12767613
50 16.63971 59.94807 25137031 25137203 0.11714714 -0.11714714
100 40.785523 146.93846 25136782 25137202 0.1278358 -0.1278358
150 53.394067 192.3634 25136654 25137204 0.080257143 -0.080257143
200 56.419019 203.26143 25136624 25137205 0.024756489 -0.024756489
250 54.922935 197.87147 25136640 25137205 -0.024533719 0.024533719
300 52.884861 190.52888 25136660 25137205 -0.066341094 0.066341094
350 52.41676 188.84244 25136666 25137206 -0.089546252 0.089546252
400 54.366979 195.86852 25136646 25137206 -0.10239753 0.10239753
450 54.906542 197.81241 25136642 25137208 -0.099987401 0.099987401
500 54.33841 195.7656 25136642 25137201 -0.21295942 0.21295942
Loop time of 49.9831 on 1 procs for 500 steps with 3776 atoms
Performance: 0.864 ns/day, 27.768 hours/ns, 10.003 timesteps/s
393.3% CPU use with 1 MPI tasks x no OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 17.01 | 17.01 | 17.01 | 0.0 | 34.03
Bond | 0.0010374 | 0.0010374 | 0.0010374 | 0.0 | 0.00
Kspace | 18.096 | 18.096 | 18.096 | 0.0 | 36.20
Neigh | 0.1828 | 0.1828 | 0.1828 | 0.0 | 0.37
Comm | 0.043856 | 0.043856 | 0.043856 | 0.0 | 0.09
Output | 0.0018373 | 0.0018373 | 0.0018373 | 0.0 | 0.00
Modify | 14.632 | 14.632 | 14.632 | 0.0 | 29.27
Other | | 0.01548 | | | 0.03
Nlocal: 3776 ave 3776 max 3776 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 12504 ave 12504 max 12504 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 1.72597e+06 ave 1.72597e+06 max 1.72597e+06 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 1725966
Ave neighs/atom = 457.08845
Ave special neighs/atom = 0.50847458
Neighbor list builds = 5
Dangerous builds = 0
Total wall time: 0:01:50

View File

@ -0,0 +1,155 @@
LAMMPS (24 Mar 2022)
# electrodes with thermopotentiostat
# for graphene-ionic liquid supercapacitor
boundary p p f # slab calculation
include settings.mod # styles, groups, computes and fixes
# set boundary in main script because ffield is periodic
units real
# distribute electrode atoms among all processors:
if "$(extract_setting(world_size) % 2) == 0" then "processors * * 2"
processors * * 2
atom_style full
pair_style lj/cut/coul/long 16
bond_style harmonic
angle_style harmonic
kspace_style pppm/electrode 1e-7
# kspace_modify in main script because ffield is periodic
read_data "data.graph-il"
Reading data file ...
orthogonal box = (0 0 -68) to (32.2 34.4 68)
1 by 2 by 2 MPI processor grid
reading atoms ...
3776 atoms
scanning bonds ...
2 = max bonds/atom
scanning angles ...
1 = max angles/atom
reading bonds ...
640 bonds
reading angles ...
320 angles
Finding 1-2 1-3 1-4 neighbors ...
special bond factors lj: 0 0 0
special bond factors coul: 0 0 0
2 = max # of 1-2 neighbors
1 = max # of 1-3 neighbors
1 = max # of 1-4 neighbors
2 = max # of special neighbors
special bonds CPU = 0.002 seconds
read_data CPU = 0.025 seconds
group bot molecule 641
416 atoms in group bot
group top molecule 642
416 atoms in group top
group bmi type 1 2 3
960 atoms in group bmi
group electrolyte type 1 2 3 4
1280 atoms in group electrolyte
fix nvt electrolyte nvt temp 500.0 500.0 100
fix shake bmi shake 1e-4 20 0 b 1 2 a 1
0 = # of size 2 clusters
0 = # of size 3 clusters
0 = # of size 4 clusters
320 = # of frozen angles
find clusters CPU = 0.001 seconds
variable q atom q
compute qtop top reduce sum v_q
compute qbot bot reduce sum v_q
compute ctemp electrolyte temp
kspace_modify slab 3.0
unfix nvt # remove NVT thermostat included from "settings.mod"
fix conpthermo bot electrode/thermo -1.0 1.979 couple top 1.0 etypes 5 temp 500 100 7 # temp tau rng
832 atoms in group conp_group
# to compare to regular constant potential, switch previous line to this:
#fix conp bot electrode/conp -1.0 1.979 couple top 1.0 etypes 5 symm on
fix nve electrolyte nve
# note ionic liquid does not reach 500K immediately
# because its thermal response time is finite
# run this about 10k steps (10ps) to reach preset temperature
thermo 50
thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop
run 500
PPPM/electrode initialization ...
using 12-bit tables for long-range coulomb (src/kspace.cpp:342)
G vector (1/distance) = 0.20904498
grid = 32 32 200
stencil order = 5
estimated absolute RMS force accuracy = 3.7023506e-05
estimated relative force accuracy = 1.1149519e-07
using double precision MKL FFT
3d grid and FFT values/proc = 151593 85504
generated 10 of 10 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update every 1 steps, delay 10 steps, check yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 18
ghost atom cutoff = 18
binsize = 9, bins = 4 4 16
3 neighbor lists, perpetual/occasional/extra = 2 1 0
(1) pair lj/cut/coul/long, perpetual
attributes: half, newton on
pair build: half/bin/newton
stencil: half/bin/3d
bin: standard
(2) fix electrode/thermo, occasional, skip from (1)
attributes: half, newton on
pair build: skip
stencil: none
bin: none
(3) fix electrode/thermo, perpetual, skip from (1)
attributes: half, newton on
pair build: skip
stencil: none
bin: none
Per MPI rank memory allocation (min/avg/max) = 23.63 | 27.46 | 31.29 Mbytes
Step Temp c_ctemp E_pair TotEng c_qbot c_qtop
0 0 0 25137187 25137187 0.12767613 -0.12767613
50 16.63971 59.94807 25137031 25137203 0.11714714 -0.11714714
100 40.785523 146.93846 25136782 25137202 0.1278358 -0.1278358
150 53.394067 192.3634 25136654 25137204 0.080257143 -0.080257143
200 56.419019 203.26143 25136624 25137205 0.024756489 -0.024756489
250 54.922935 197.87147 25136640 25137205 -0.024533719 0.024533719
300 52.884861 190.52888 25136660 25137205 -0.066341094 0.066341094
350 52.41676 188.84244 25136666 25137206 -0.089546252 0.089546252
400 54.366979 195.86852 25136646 25137206 -0.10239753 0.10239753
450 54.906542 197.81241 25136642 25137208 -0.099987401 0.099987401
500 54.33841 195.7656 25136642 25137201 -0.21295942 0.21295942
Loop time of 27.6772 on 4 procs for 500 steps with 3776 atoms
Performance: 1.561 ns/day, 15.376 hours/ns, 18.065 timesteps/s
91.7% CPU use with 4 MPI tasks x no OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 4.6214 | 4.8032 | 4.9546 | 6.5 | 17.35
Bond | 0.0005324 | 0.00060509 | 0.00069468 | 0.0 | 0.00
Kspace | 13.883 | 14.034 | 14.216 | 3.8 | 50.71
Neigh | 0.061704 | 0.061727 | 0.06176 | 0.0 | 0.22
Comm | 0.10101 | 0.10374 | 0.10645 | 0.8 | 0.37
Output | 0.00086818 | 0.0010909 | 0.001715 | 1.1 | 0.00
Modify | 8.65 | 8.6524 | 8.6545 | 0.1 | 31.26
Other | | 0.02055 | | | 0.07
Nlocal: 944 ave 951 max 940 min
Histogram: 1 1 1 0 0 0 0 0 0 1
Nghost: 5918.5 ave 5940 max 5899 min
Histogram: 1 0 1 0 0 0 1 0 0 1
Neighs: 431492 ave 442132 max 419533 min
Histogram: 1 1 0 0 0 0 0 0 0 2
Total # of neighbors = 1725966
Ave neighs/atom = 457.08845
Ave special neighs/atom = 0.50847458
Neighbor list builds = 5
Dangerous builds = 0
Total wall time: 0:00:50

View File

@ -0,0 +1,27 @@
# set boundary in main script because ffield is periodic
units real
# distribute electrode atoms among all processors:
if "$(extract_setting(world_size) % 2) == 0" then "processors * * 2"
atom_style full
pair_style lj/cut/coul/long 16
bond_style harmonic
angle_style harmonic
kspace_style pppm/electrode 1e-7
# kspace_modify in main script because ffield is periodic
read_data "data.graph-il"
group bot molecule 641
group top molecule 642
group bmi type 1 2 3
group electrolyte type 1 2 3 4
fix nvt electrolyte nvt temp 500.0 500.0 100
fix shake bmi shake 1e-4 20 0 b 1 2 a 1
variable q atom q
compute qtop top reduce sum v_q
compute qbot bot reduce sum v_q
compute ctemp electrolyte temp

View File

@ -0,0 +1 @@
log.lammps*

View File

@ -0,0 +1,600 @@
LAMMPS data file via write_data, version 24 Dec 2020, timestep = 0
288 atoms
2 atom types
0.285001 25.325067 xlo xhi
-0.368323 24.671743 ylo yhi
-1.043333 43.303354 zlo zhi
Masses
1 196.966553
2 196.966553
Pair Coeffs # lj/cut/coul/long
1 0 0
2 0 0
Atoms # full
2 1 1 -0.002921 2.086672 2.086672 8 0 0 0
3 1 1 -0.04033 2.086672 0 10.086673 0 1 0
5 1 1 -0.000757 4.173345 0 8 0 1 0
6 1 1 -0.000483 6.260016 2.086672 8 0 0 0
7 1 1 -0.02377 6.260016 0 10.086673 0 1 0
8 1 1 -0.031311 4.173345 2.086672 10.086673 0 0 0
9 1 1 -0.002302 8.346689 0 8 0 1 0
12 1 1 -0.03014 8.346689 2.086672 10.086673 0 0 0
26 1 1 -3e-05 2.086672 6.260016 8 0 0 0
27 1 1 -0.011104 2.086672 4.173345 10.086673 0 0 0
29 1 1 0.000807 4.173345 4.173345 8 0 0 0
30 1 1 -0.000974 6.260016 6.260016 8 0 0 0
31 1 1 -0.017105 6.260016 4.173345 10.086673 0 0 0
32 1 1 -0.010937 4.173345 6.260016 10.086673 0 0 0
33 1 1 0.001587 8.346689 4.173345 8 0 0 0
36 1 1 0.004269 8.346689 6.260016 10.086673 0 0 0
10 1 1 -0.000534 10.433361 2.086672 8 0 0 0
11 1 1 -0.006246 10.433361 0 10.086673 0 1 0
13 1 1 0.000222 12.520033 0 8 0 1 0
14 1 1 -0.000958 14.606705 2.086672 8 0 0 0
15 1 1 -0.024586 14.606705 0 10.086673 0 1 0
16 1 1 -0.032305 12.520033 2.086672 10.086673 0 0 0
17 1 1 -0.001102 16.693378 0 8 0 1 0
20 1 1 -0.015815 16.693378 2.086672 10.086673 0 0 0
34 1 1 0.001733 10.433361 6.260016 8 0 0 0
35 1 1 -0.001065 10.433361 4.173345 10.086673 0 0 0
37 1 1 -0.000623 12.520033 4.173345 8 0 0 0
38 1 1 -0.003876 14.606705 6.260016 8 0 0 0
39 1 1 -0.030292 14.606705 4.173345 10.086673 0 0 0
40 1 1 -0.024863 12.520033 6.260016 10.086673 0 0 0
41 1 1 -0.000446 16.693378 4.173345 8 0 0 0
44 1 1 -0.044616 16.693378 6.260016 10.086673 0 0 0
1 1 1 -0.00023 25.040066 0 8 0 1 0
4 1 1 -0.012754 25.040066 2.086672 10.086673 0 0 0
18 1 1 0.00046 18.780048 2.086672 8 0 0 0
19 1 1 -0.011993 18.780048 0 10.086673 0 1 0
21 1 1 0.001654 20.86672 0 8 0 1 0
22 1 1 0.000999 22.953394 2.086672 8 0 0 0
23 1 1 -0.010485 22.953394 0 10.086673 0 1 0
24 1 1 -0.038444 20.86672 2.086672 10.086673 0 0 0
25 1 1 3.8e-05 25.040066 4.173345 8 0 0 0
28 1 1 -0.032472 25.040066 6.260016 10.086673 0 0 0
42 1 1 -0.002036 18.780048 6.260016 8 0 0 0
43 1 1 -0.031052 18.780048 4.173345 10.086673 0 0 0
45 1 1 -0.001031 20.86672 4.173345 8 0 0 0
46 1 1 -0.00021 22.953394 6.260016 8 0 0 0
47 1 1 -0.004291 22.953394 4.173345 10.086673 0 0 0
48 1 1 -0.020295 20.86672 6.260016 10.086673 0 0 0
50 1 1 -0.00328 2.086672 10.433361 8 0 0 0
51 1 1 -0.037649 2.086672 8.346689 10.086673 0 0 0
53 1 1 -0.000151 4.173345 8.346689 8 0 0 0
54 1 1 -0.000508 6.260016 10.433361 8 0 0 0
55 1 1 -0.014809 6.260016 8.346689 10.086673 0 0 0
56 1 1 -0.016074 4.173345 10.433361 10.086673 0 0 0
57 1 1 0.00092 8.346689 8.346689 8 0 0 0
60 1 1 -0.037118 8.346689 10.433361 10.086673 0 0 0
74 1 1 -0.000342 2.086672 14.606705 8 0 0 0
75 1 1 -0.027442 2.086672 12.520033 10.086673 0 0 0
77 1 1 0.000536 4.173345 12.520033 8 0 0 0
78 1 1 -0.000368 6.260016 14.606705 8 0 0 0
79 1 1 -0.022015 6.260016 12.520033 10.086673 0 0 0
80 1 1 0.003048 4.173345 14.606705 10.086673 0 0 0
81 1 1 -0.002516 8.346689 12.520033 8 0 0 0
84 1 1 -0.004673 8.346689 14.606705 10.086673 0 0 0
58 1 1 -0.003585 10.433361 10.433361 8 0 0 0
59 1 1 -0.015447 10.433361 8.346689 10.086673 0 0 0
61 1 1 -0.000856 12.520033 8.346689 8 0 0 0
62 1 1 0.001309 14.606705 10.433361 8 0 0 0
63 1 1 -0.034936 14.606705 8.346689 10.086673 0 0 0
64 1 1 -0.022444 12.520033 10.433361 10.086673 0 0 0
65 1 1 -0.00144 16.693378 8.346689 8 0 0 0
68 1 1 -0.008916 16.693378 10.433361 10.086673 0 0 0
82 1 1 0.002034 10.433361 14.606705 8 0 0 0
83 1 1 -0.012341 10.433361 12.520033 10.086673 0 0 0
85 1 1 0.000168 12.520033 12.520033 8 0 0 0
86 1 1 0.000653 14.606705 14.606705 8 0 0 0
87 1 1 0.007996 14.606705 12.520033 10.086673 0 0 0
88 1 1 0.015522 12.520033 14.606705 10.086673 0 0 0
89 1 1 -2.2e-05 16.693378 12.520033 8 0 0 0
92 1 1 -0.001057 16.693378 14.606705 10.086673 0 0 0
49 1 1 -0.006345 25.040066 8.346689 8 0 0 0
52 1 1 -0.05504 25.040066 10.433361 10.086673 0 0 0
66 1 1 -0.004359 18.780048 10.433361 8 0 0 0
67 1 1 -0.02956 18.780048 8.346689 10.086673 0 0 0
69 1 1 0.0004 20.86672 8.346689 8 0 0 0
70 1 1 0.000209 22.953394 10.433361 8 0 0 0
71 1 1 -0.017199 22.953394 8.346689 10.086673 0 0 0
72 1 1 -0.03354 20.86672 10.433361 10.086673 0 0 0
73 1 1 -8e-05 25.040066 12.520033 8 0 0 0
76 1 1 -0.025027 25.040066 14.606705 10.086673 0 0 0
90 1 1 0.000716 18.780048 14.606705 8 0 0 0
91 1 1 -0.013279 18.780048 12.520033 10.086673 0 0 0
93 1 1 -0.000971 20.86672 12.520033 8 0 0 0
94 1 1 -0.000871 22.953394 14.606705 8 0 0 0
95 1 1 -0.014468 22.953394 12.520033 10.086673 0 0 0
96 1 1 -0.028593 20.86672 14.606705 10.086673 0 0 0
98 1 1 -0.001941 2.086672 18.780048 8 0 0 0
99 1 1 -0.015815 2.086672 16.693378 10.086673 0 0 0
101 1 1 0.000289 4.173345 16.693378 8 0 0 0
102 1 1 7.1e-05 6.260016 18.780048 8 0 0 0
103 1 1 -0.03149 6.260016 16.693378 10.086673 0 0 0
104 1 1 -0.033754 4.173345 18.780048 10.086673 0 0 0
105 1 1 -0.003025 8.346689 16.693378 8 0 0 0
108 1 1 -0.025007 8.346689 18.780048 10.086673 0 0 0
122 1 1 0.000623 2.086672 22.953394 8 0 0 0
123 1 1 -0.007516 2.086672 20.86672 10.086673 0 0 0
125 1 1 0.000878 4.173345 20.86672 8 0 0 0
126 1 1 -0.001576 6.260016 22.953394 8 0 0 0
127 1 1 -0.029629 6.260016 20.86672 10.086673 0 0 0
128 1 1 0.004728 4.173345 22.953394 10.086673 0 0 0
129 1 1 -0.003433 8.346689 20.86672 8 0 0 0
132 1 1 -0.043264 8.346689 22.953394 10.086673 0 0 0
106 1 1 -4.9e-05 10.433361 18.780048 8 0 0 0
107 1 1 -0.026304 10.433361 16.693378 10.086673 0 0 0
109 1 1 0.001185 12.520033 16.693378 8 0 0 0
110 1 1 -0.000778 14.606705 18.780048 8 0 0 0
111 1 1 -0.020266 14.606705 16.693378 10.086673 0 0 0
112 1 1 -0.010312 12.520033 18.780048 10.086673 0 0 0
113 1 1 -0.000613 16.693378 16.693378 8 0 0 0
116 1 1 -0.029068 16.693378 18.780048 10.086673 0 0 0
130 1 1 -0.000577 10.433361 22.953394 8 0 0 0
131 1 1 -0.026467 10.433361 20.86672 10.086673 0 0 0
133 1 1 -0.000921 12.520033 20.86672 8 0 0 0
134 1 1 -0.000361 14.606705 22.953394 8 0 0 0
135 1 1 -0.017852 14.606705 20.86672 10.086673 0 0 0
136 1 1 -0.021653 12.520033 22.953394 10.086673 0 0 0
137 1 1 0.000268 16.693378 20.86672 8 0 0 0
140 1 1 -0.01542 16.693378 22.953394 10.086673 0 0 0
97 1 1 -0.000311 25.040066 16.693378 8 0 0 0
100 1 1 -0.012408 25.040066 18.780048 10.086673 0 0 0
114 1 1 -0.000958 18.780048 18.780048 8 0 0 0
115 1 1 -0.036602 18.780048 16.693378 10.086673 0 0 0
117 1 1 -0.005554 20.86672 16.693378 8 0 0 0
118 1 1 0.000738 22.953394 18.780048 8 0 0 0
119 1 1 -0.027189 22.953394 16.693378 10.086673 0 0 0
120 1 1 -0.023111 20.86672 18.780048 10.086673 0 0 0
121 1 1 7.5e-05 25.040066 20.86672 8 0 0 0
124 1 1 -0.014682 25.040066 22.953394 10.086673 0 0 0
138 1 1 -0.000345 18.780048 22.953394 8 0 0 0
139 1 1 -0.00903 18.780048 20.86672 10.086673 0 0 0
141 1 1 0.000128 20.86672 20.86672 8 0 0 0
142 1 1 0.000334 22.953394 22.953394 8 0 0 0
143 1 1 -0.002285 22.953394 20.86672 10.086673 0 0 0
144 1 1 -0.00745 20.86672 22.953394 10.086673 0 0 0
146 2 2 0.022955 2.086672 2.086672 32.173344 0 0 0
147 2 2 0.000876 2.086672 0 34.260021 0 1 0
149 2 2 0.027435 4.173345 0 32.173344 0 1 0
150 2 2 0.020862 6.260016 2.086672 32.173344 0 0 0
151 2 2 0.001578 6.260016 0 34.260021 0 1 0
152 2 2 0.001014 4.173345 2.086672 34.260021 0 0 0
153 2 2 0.021009 8.346689 0 32.173344 0 1 0
156 2 2 0.001184 8.346689 2.086672 34.260021 0 0 0
170 2 2 0.008185 2.086672 6.260016 32.173344 0 0 0
171 2 2 0.001602 2.086672 4.173345 34.260021 0 0 0
173 2 2 0.022473 4.173345 4.173345 32.173344 0 0 0
174 2 2 0.03292 6.260016 6.260016 32.173344 0 0 0
175 2 2 0.002046 6.260016 4.173345 34.260021 0 0 0
176 2 2 0.000803 4.173345 6.260016 34.260021 0 0 0
177 2 2 0.032031 8.346689 4.173345 32.173344 0 0 0
180 2 2 0.002258 8.346689 6.260016 34.260021 0 0 0
154 2 2 0.01514 10.433361 2.086672 32.173344 0 0 0
155 2 2 0.001872 10.433361 0 34.260021 0 1 0
157 2 2 0.004752 12.520033 0 32.173344 0 1 0
158 2 2 0.005408 14.606705 2.086672 32.173344 0 0 0
159 2 2 0.000237 14.606705 0 34.260021 0 1 0
160 2 2 0.001509 12.520033 2.086672 34.260021 0 0 0
161 2 2 0.012702 16.693378 0 32.173344 0 1 0
164 2 2 0.000611 16.693378 2.086672 34.260021 0 0 0
178 2 2 0.02783 10.433361 6.260016 32.173344 0 0 0
179 2 2 0.001241 10.433361 4.173345 34.260021 0 0 0
181 2 2 0.019546 12.520033 4.173345 32.173344 0 0 0
182 2 2 0.016796 14.606705 6.260016 32.173344 0 0 0
183 2 2 0.00231 14.606705 4.173345 34.260021 0 0 0
184 2 2 0.001481 12.520033 6.260016 34.260021 0 0 0
185 2 2 0.014646 16.693378 4.173345 32.173344 0 0 0
188 2 2 0.000878 16.693378 6.260016 34.260021 0 0 0
145 2 2 0.019659 25.040066 0 32.173344 0 1 0
148 2 2 0.00156 25.040066 2.086672 34.260021 0 0 0
162 2 2 0.017746 18.780048 2.086672 32.173344 0 0 0
163 2 2 0.001489 18.780048 0 34.260021 0 1 0
165 2 2 0.034109 20.86672 0 32.173344 0 1 0
166 2 2 0.031678 22.953394 2.086672 32.173344 0 0 0
167 2 2 0.002473 22.953394 0 34.260021 0 1 0
168 2 2 0.002352 20.86672 2.086672 34.260021 0 0 0
169 2 2 0.014267 25.040066 4.173345 32.173344 0 0 0
172 2 2 0.000168 25.040066 6.260016 34.260021 0 0 0
186 2 2 0.008992 18.780048 6.260016 32.173344 0 0 0
187 2 2 0.000504 18.780048 4.173345 34.260021 0 0 0
189 2 2 0.021772 20.86672 4.173345 32.173344 0 0 0
190 2 2 0.01304 22.953394 6.260016 32.173344 0 0 0
191 2 2 0.00118 22.953394 4.173345 34.260021 0 0 0
192 2 2 0.001457 20.86672 6.260016 34.260021 0 0 0
194 2 2 0.025689 2.086672 10.433361 32.173344 0 0 0
195 2 2 0.000649 2.086672 8.346689 34.260021 0 0 0
197 2 2 0.015557 4.173345 8.346689 32.173344 0 0 0
198 2 2 0.025584 6.260016 10.433361 32.173344 0 0 0
199 2 2 0.002292 6.260016 8.346689 34.260021 0 0 0
200 2 2 0.000819 4.173345 10.433361 34.260021 0 0 0
201 2 2 0.035591 8.346689 8.346689 32.173344 0 0 0
204 2 2 0.002678 8.346689 10.433361 34.260021 0 0 0
218 2 2 0.021343 2.086672 14.606705 32.173344 0 0 0
219 2 2 0.001799 2.086672 12.520033 34.260021 0 0 0
221 2 2 0.022952 4.173345 12.520033 32.173344 0 0 0
222 2 2 0.012325 6.260016 14.606705 32.173344 0 0 0
223 2 2 0.001876 6.260016 12.520033 34.260021 0 0 0
224 2 2 0.001718 4.173345 14.606705 34.260021 0 0 0
225 2 2 0.023719 8.346689 12.520033 32.173344 0 0 0
228 2 2 0.000744 8.346689 14.606705 34.260021 0 0 0
202 2 2 0.015873 10.433361 10.433361 32.173344 0 0 0
203 2 2 0.000758 10.433361 8.346689 34.260021 0 0 0
205 2 2 0.008097 12.520033 8.346689 32.173344 0 0 0
206 2 2 0.015646 14.606705 10.433361 32.173344 0 0 0
207 2 2 0.001702 14.606705 8.346689 34.260021 0 0 0
208 2 2 0.000994 12.520033 10.433361 34.260021 0 0 0
209 2 2 0.017819 16.693378 8.346689 32.173344 0 0 0
212 2 2 0.001677 16.693378 10.433361 34.260021 0 0 0
226 2 2 0.004714 10.433361 14.606705 32.173344 0 0 0
227 2 2 0.001251 10.433361 12.520033 34.260021 0 0 0
229 2 2 0.018756 12.520033 12.520033 32.173344 0 0 0
230 2 2 -0.00689 14.606705 14.606705 32.173344 0 0 0
231 2 2 0.000922 14.606705 12.520033 34.260021 0 0 0
232 2 2 -0.002432 12.520033 14.606705 34.260021 0 0 0
233 2 2 0.015625 16.693378 12.520033 32.173344 0 0 0
236 2 2 0.001044 16.693378 14.606705 34.260021 0 0 0
193 2 2 0.001698 25.040066 8.346689 32.173344 0 0 0
196 2 2 0.00215 25.040066 10.433361 34.260021 0 0 0
210 2 2 0.029386 18.780048 10.433361 32.173344 0 0 0
211 2 2 0.000676 18.780048 8.346689 34.260021 0 0 0
213 2 2 0.020182 20.86672 8.346689 32.173344 0 0 0
214 2 2 0.02881 22.953394 10.433361 32.173344 0 0 0
215 2 2 0.002276 22.953394 8.346689 34.260021 0 0 0
216 2 2 0.003118 20.86672 10.433361 34.260021 0 0 0
217 2 2 0.012257 25.040066 12.520033 32.173344 0 0 0
220 2 2 0.001591 25.040066 14.606705 34.260021 0 0 0
234 2 2 -0.009585 18.780048 14.606705 32.173344 0 0 0
235 2 2 0.001459 18.780048 12.520033 34.260021 0 0 0
237 2 2 0.020359 20.86672 12.520033 32.173344 0 0 0
238 2 2 0.004616 22.953394 14.606705 32.173344 0 0 0
239 2 2 0.000697 22.953394 12.520033 34.260021 0 0 0
240 2 2 5e-06 20.86672 14.606705 34.260021 0 0 0
242 2 2 0.034403 2.086672 18.780048 32.173344 0 0 0
243 2 2 0.002402 2.086672 16.693378 34.260021 0 0 0
245 2 2 0.021827 4.173345 16.693378 32.173344 0 0 0
246 2 2 0.011918 6.260016 18.780048 32.173344 0 0 0
247 2 2 0.000792 6.260016 16.693378 34.260021 0 0 0
248 2 2 0.002071 4.173345 18.780048 34.260021 0 0 0
249 2 2 -0.002694 8.346689 16.693378 32.173344 0 0 0
252 2 2 0.000351 8.346689 18.780048 34.260021 0 0 0
266 2 2 0.037372 2.086672 22.953394 32.173344 0 0 0
267 2 2 0.002492 2.086672 20.86672 34.260021 0 0 0
269 2 2 0.03734 4.173345 20.86672 32.173344 0 0 0
270 2 2 0.015818 6.260016 22.953394 32.173344 0 0 0
271 2 2 -0.0001 6.260016 20.86672 34.260021 0 0 0
272 2 2 0.002801 4.173345 22.953394 34.260021 0 0 0
273 2 2 0.017084 8.346689 20.86672 32.173344 0 0 0
276 2 2 0.001644 8.346689 22.953394 34.260021 0 0 0
250 2 2 -0.000573 10.433361 18.780048 32.173344 0 0 0
251 2 2 0.000448 10.433361 16.693378 34.260021 0 0 0
253 2 2 0.001141 12.520033 16.693378 32.173344 0 0 0
254 2 2 0.015575 14.606705 18.780048 32.173344 0 0 0
255 2 2 0.000258 14.606705 16.693378 34.260021 0 0 0
256 2 2 0.000372 12.520033 18.780048 34.260021 0 0 0
257 2 2 0.011285 16.693378 16.693378 32.173344 0 0 0
260 2 2 0.001199 16.693378 18.780048 34.260021 0 0 0
274 2 2 0.031072 10.433361 22.953394 32.173344 0 0 0
275 2 2 -0.00031 10.433361 20.86672 34.260021 0 0 0
277 2 2 -0.004414 12.520033 20.86672 32.173344 0 0 0
278 2 2 0.017397 14.606705 22.953394 32.173344 0 0 0
279 2 2 0.001344 14.606705 20.86672 34.260021 0 0 0
280 2 2 0.000672 12.520033 22.953394 34.260021 0 0 0
281 2 2 0.0252 16.693378 20.86672 32.173344 0 0 0
284 2 2 0.001824 16.693378 22.953394 34.260021 0 0 0
241 2 2 0.029057 25.040066 16.693378 32.173344 0 0 0
244 2 2 0.001076 25.040066 18.780048 34.260021 0 0 0
258 2 2 0.035183 18.780048 18.780048 32.173344 0 0 0
259 2 2 0.0002 18.780048 16.693378 34.260021 0 0 0
261 2 2 0.034083 20.86672 16.693378 32.173344 0 0 0
262 2 2 0.036995 22.953394 18.780048 32.173344 0 0 0
263 2 2 0.001484 22.953394 16.693378 34.260021 0 0 0
264 2 2 0.00377 20.86672 18.780048 34.260021 0 0 0
265 2 2 0.024028 25.040066 20.86672 32.173344 0 0 0
268 2 2 0.001334 25.040066 22.953394 34.260021 0 0 0
282 2 2 0.030927 18.780048 22.953394 32.173344 0 0 0
283 2 2 0.002185 18.780048 20.86672 34.260021 0 0 0
285 2 2 0.043618 20.86672 20.86672 32.173344 0 0 0
286 2 2 0.030615 22.953394 22.953394 32.173344 0 0 0
287 2 2 0.001068 22.953394 20.86672 34.260021 0 0 0
288 2 2 0.001887 20.86672 22.953394 34.260021 0 0 0
Velocities
2 0 0 0
3 0 0 0
5 0 0 0
6 0 0 0
7 0 0 0
8 0 0 0
9 0 0 0
12 0 0 0
26 0 0 0
27 0 0 0
29 0 0 0
30 0 0 0
31 0 0 0
32 0 0 0
33 0 0 0
36 0 0 0
10 0 0 0
11 0 0 0
13 0 0 0
14 0 0 0
15 0 0 0
16 0 0 0
17 0 0 0
20 0 0 0
34 0 0 0
35 0 0 0
37 0 0 0
38 0 0 0
39 0 0 0
40 0 0 0
41 0 0 0
44 0 0 0
1 0 0 0
4 0 0 0
18 0 0 0
19 0 0 0
21 0 0 0
22 0 0 0
23 0 0 0
24 0 0 0
25 0 0 0
28 0 0 0
42 0 0 0
43 0 0 0
45 0 0 0
46 0 0 0
47 0 0 0
48 0 0 0
50 0 0 0
51 0 0 0
53 0 0 0
54 0 0 0
55 0 0 0
56 0 0 0
57 0 0 0
60 0 0 0
74 0 0 0
75 0 0 0
77 0 0 0
78 0 0 0
79 0 0 0
80 0 0 0
81 0 0 0
84 0 0 0
58 0 0 0
59 0 0 0
61 0 0 0
62 0 0 0
63 0 0 0
64 0 0 0
65 0 0 0
68 0 0 0
82 0 0 0
83 0 0 0
85 0 0 0
86 0 0 0
87 0 0 0
88 0 0 0
89 0 0 0
92 0 0 0
49 0 0 0
52 0 0 0
66 0 0 0
67 0 0 0
69 0 0 0
70 0 0 0
71 0 0 0
72 0 0 0
73 0 0 0
76 0 0 0
90 0 0 0
91 0 0 0
93 0 0 0
94 0 0 0
95 0 0 0
96 0 0 0
98 0 0 0
99 0 0 0
101 0 0 0
102 0 0 0
103 0 0 0
104 0 0 0
105 0 0 0
108 0 0 0
122 0 0 0
123 0 0 0
125 0 0 0
126 0 0 0
127 0 0 0
128 0 0 0
129 0 0 0
132 0 0 0
106 0 0 0
107 0 0 0
109 0 0 0
110 0 0 0
111 0 0 0
112 0 0 0
113 0 0 0
116 0 0 0
130 0 0 0
131 0 0 0
133 0 0 0
134 0 0 0
135 0 0 0
136 0 0 0
137 0 0 0
140 0 0 0
97 0 0 0
100 0 0 0
114 0 0 0
115 0 0 0
117 0 0 0
118 0 0 0
119 0 0 0
120 0 0 0
121 0 0 0
124 0 0 0
138 0 0 0
139 0 0 0
141 0 0 0
142 0 0 0
143 0 0 0
144 0 0 0
146 0 0 0
147 0 0 0
149 0 0 0
150 0 0 0
151 0 0 0
152 0 0 0
153 0 0 0
156 0 0 0
170 0 0 0
171 0 0 0
173 0 0 0
174 0 0 0
175 0 0 0
176 0 0 0
177 0 0 0
180 0 0 0
154 0 0 0
155 0 0 0
157 0 0 0
158 0 0 0
159 0 0 0
160 0 0 0
161 0 0 0
164 0 0 0
178 0 0 0
179 0 0 0
181 0 0 0
182 0 0 0
183 0 0 0
184 0 0 0
185 0 0 0
188 0 0 0
145 0 0 0
148 0 0 0
162 0 0 0
163 0 0 0
165 0 0 0
166 0 0 0
167 0 0 0
168 0 0 0
169 0 0 0
172 0 0 0
186 0 0 0
187 0 0 0
189 0 0 0
190 0 0 0
191 0 0 0
192 0 0 0
194 0 0 0
195 0 0 0
197 0 0 0
198 0 0 0
199 0 0 0
200 0 0 0
201 0 0 0
204 0 0 0
218 0 0 0
219 0 0 0
221 0 0 0
222 0 0 0
223 0 0 0
224 0 0 0
225 0 0 0
228 0 0 0
202 0 0 0
203 0 0 0
205 0 0 0
206 0 0 0
207 0 0 0
208 0 0 0
209 0 0 0
212 0 0 0
226 0 0 0
227 0 0 0
229 0 0 0
230 0 0 0
231 0 0 0
232 0 0 0
233 0 0 0
236 0 0 0
193 0 0 0
196 0 0 0
210 0 0 0
211 0 0 0
213 0 0 0
214 0 0 0
215 0 0 0
216 0 0 0
217 0 0 0
220 0 0 0
234 0 0 0
235 0 0 0
237 0 0 0
238 0 0 0
239 0 0 0
240 0 0 0
242 0 0 0
243 0 0 0
245 0 0 0
246 0 0 0
247 0 0 0
248 0 0 0
249 0 0 0
252 0 0 0
266 0 0 0
267 0 0 0
269 0 0 0
270 0 0 0
271 0 0 0
272 0 0 0
273 0 0 0
276 0 0 0
250 0 0 0
251 0 0 0
253 0 0 0
254 0 0 0
255 0 0 0
256 0 0 0
257 0 0 0
260 0 0 0
274 0 0 0
275 0 0 0
277 0 0 0
278 0 0 0
279 0 0 0
280 0 0 0
281 0 0 0
284 0 0 0
241 0 0 0
244 0 0 0
258 0 0 0
259 0 0 0
261 0 0 0
262 0 0 0
263 0 0 0
264 0 0 0
265 0 0 0
268 0 0 0
282 0 0 0
283 0 0 0
285 0 0 0
286 0 0 0
287 0 0 0
288 0 0 0

View File

@ -0,0 +1,14 @@
boundary p p f
kspace_style ewald/electrode 1.0e-7
kspace_modify slab ew2d
include "settings.mod" # styles, computes, groups and fixes
# constant potential electrodes with ramping potential difference
fix conp bot electrode/conp 0 1.979 couple top v_v symm on
thermo 1
# thermo: step, imposed potential, bottom charge, top charge, theory charge, percent deviation
thermo_style custom step v_v c_qbot c_qtop v_qtheory v_percdev
run 10

View File

@ -0,0 +1,14 @@
boundary p p f
kspace_style ewald/electrode 1.0e-7
kspace_modify slab 3.0 # ew3dc
include "settings.mod" # styles, computes, groups and fixes
# constant potential electrodes with ramping potential difference
fix conp bot electrode/conp 0 1.979 couple top v_v symm on
thermo 1
# thermo: step, imposed potential, bottom charge, top charge, theory charge, percent deviation
thermo_style custom step v_v c_qbot c_qtop v_qtheory v_percdev
run 10

View File

@ -0,0 +1,13 @@
boundary p p p # finite field, fully periodic
kspace_style ewald/electrode 1.0e-7
include "settings.mod" # styles, computes, groups and fixes
# constant potential electrodes with ramping potential difference
fix conp bot electrode/conp 0 1.979 couple top v_v symm on ffield yes
thermo 1
# thermo: step, imposed potential, bottom charge, top charge, theory charge, percent deviation
thermo_style custom step v_v c_qbot c_qtop v_qtheory v_percdev
run 10

View File

@ -0,0 +1,15 @@
boundary p p f
kspace_style pppm/electrode 1.0e-7
kspace_modify slab 3.0
include "settings.mod" # styles, computes, groups and fixes
# constant potential electrodes with ramping potential difference
fix conp bot electrode/conp 0 1.979 couple top v_v symm on
thermo 1
# thermo: step, imposed potential, bottom charge, top charge, theory charge, percent deviation
thermo_style custom step v_v c_qbot c_qtop v_qtheory v_percdev
run 10

View File

@ -0,0 +1,13 @@
boundary p p p # finite field, fully periodic
kspace_style pppm/electrode 1.0e-7
include "settings.mod" # styles, computes, groups and fixes
# constant potential electrodes with ramping potential difference
fix conp bot electrode/conp 0 1.979 couple top v_v symm on ffield yes
thermo 1
# thermo: step, imposed potential, bottom charge, top charge, theory charge, percent deviation
thermo_style custom step v_v c_qbot c_qtop v_qtheory v_percdev
run 10

View File

@ -0,0 +1,139 @@
LAMMPS (24 Mar 2022)
boundary p p f
kspace_style ewald/electrode 1.0e-7
kspace_modify slab ew2d
include "settings.mod" # styles, computes, groups and fixes
# set boundary in main script because ffield is periodic
units real
# distribute electrode atoms among all processors:
if "$(extract_setting(world_size) % 2) == 0" then "processors * * 2"
atom_style full
pair_style lj/cut/coul/long 14
# kspace_style and _modify in main script to test different approaches
read_data "data.au-vac"
Reading data file ...
orthogonal box = (0.285001 -0.368323 -1.043333) to (25.325067 24.671743 43.303354)
1 by 1 by 1 MPI processor grid
reading atoms ...
288 atoms
reading velocities ...
288 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.006 seconds
group bot molecule 1
144 atoms in group bot
group top molecule 2
144 atoms in group top
# ramping potential difference
variable v equal ramp(0,2)
# get electrode charges
variable q atom q
compute qbot bot reduce sum v_q
compute qtop top reduce sum v_q
# get theoretical charges:
# calculate distance dz between electrodes
compute zbot bot reduce max z
compute ztop top reduce min z
variable dz equal c_ztop-c_zbot
# calculate theoretical capacitance as eps0 * area / dz
variable eps0 equal 55.26349406/10000 # epsilon zero
variable capac equal "v_eps0 * lx * ly / v_dz"
# calculate theoretical charges and deviation of constant potential charges from theory
variable qtheory equal "v_capac * v_v"
variable percdev equal "100 * (c_qtop - v_qtheory) / (v_qtheory + 1e-9)" # avoid divide-by-zero
# constant potential electrodes with ramping potential difference
fix conp bot electrode/conp 0 1.979 couple top v_v symm on
288 atoms in group conp_group
thermo 1
# thermo: step, imposed potential, bottom charge, top charge, theory charge, percent deviation
thermo_style custom step v_v c_qbot c_qtop v_qtheory v_percdev
run 10
WARNING: No fixes with time integration, atoms won't move (src/verlet.cpp:60)
Ewald/electrode initialization ...
WARNING: System is not charge neutral, net charge = 0.000219 (src/kspace.cpp:327)
using 12-bit tables for long-range coulomb (src/kspace.cpp:342)
G vector (1/distance) = 0.15955673
estimated absolute RMS force accuracy = 4.0330163e-05
estimated relative force accuracy = 1.2145309e-07
KSpace vectors: actual max1d max3d = 90 5 665
kxmax kymax kzmax = 3 3 5
generated 1 of 1 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update every 1 steps, delay 10 steps, check yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 16
ghost atom cutoff = 16
binsize = 8, bins = 4 4 6
2 neighbor lists, perpetual/occasional/extra = 2 0 0
(1) pair lj/cut/coul/long, perpetual
attributes: half, newton on
pair build: half/bin/newton
stencil: half/bin/3d
bin: standard
(2) fix electrode/conp, perpetual, copy from (1)
attributes: half, newton on
pair build: copy
stencil: none
bin: none
Per MPI rank memory allocation (min/avg/max) = 15.93 | 15.93 | 15.93 Mbytes
Step v_v c_qbot c_qtop v_qtheory v_percdev
0 0 0 0 0 0
1 0.2 -0.030920491 0.030920491 0.031376826 -1.4543703
2 0.4 -0.061840982 0.061840982 0.062753652 -1.4543704
3 0.6 -0.092761473 0.092761473 0.094130479 -1.4543704
4 0.8 -0.12368196 0.12368196 0.1255073 -1.4543704
5 1 -0.15460245 0.15460245 0.15688413 -1.4543704
6 1.2 -0.18552295 0.18552295 0.18826096 -1.4543704
7 1.4 -0.21644344 0.21644344 0.21963778 -1.4543704
8 1.6 -0.24736393 0.24736393 0.25101461 -1.4543704
9 1.8 -0.27828442 0.27828442 0.28239144 -1.4543704
10 2 -0.30920491 0.30920491 0.31376826 -1.4543704
Loop time of 0.0912872 on 1 procs for 10 steps with 288 atoms
Performance: 9.465 ns/day, 2.536 hours/ns, 109.544 timesteps/s
400.1% CPU use with 1 MPI tasks x no OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 0.0086713 | 0.0086713 | 0.0086713 | 0.0 | 9.50
Bond | 3.759e-06 | 3.759e-06 | 3.759e-06 | 0.0 | 0.00
Kspace | 0.04575 | 0.04575 | 0.04575 | 0.0 | 50.12
Neigh | 0 | 0 | 0 | 0.0 | 0.00
Comm | 0.00018224 | 0.00018224 | 0.00018224 | 0.0 | 0.20
Output | 0.0027569 | 0.0027569 | 0.0027569 | 0.0 | 3.02
Modify | 0.03386 | 0.03386 | 0.03386 | 0.0 | 37.09
Other | | 6.314e-05 | | | 0.07
Nlocal: 288 ave 288 max 288 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 1170 ave 1170 max 1170 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 26496 ave 26496 max 26496 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 26496
Ave neighs/atom = 92
Ave special neighs/atom = 0
Neighbor list builds = 0
Dangerous builds = 0
Total wall time: 0:00:00

View File

@ -0,0 +1,140 @@
LAMMPS (24 Mar 2022)
boundary p p f
kspace_style ewald/electrode 1.0e-7
kspace_modify slab ew2d
include "settings.mod" # styles, computes, groups and fixes
# set boundary in main script because ffield is periodic
units real
# distribute electrode atoms among all processors:
if "$(extract_setting(world_size) % 2) == 0" then "processors * * 2"
processors * * 2
atom_style full
pair_style lj/cut/coul/long 14
# kspace_style and _modify in main script to test different approaches
read_data "data.au-vac"
Reading data file ...
orthogonal box = (0.285001 -0.368323 -1.043333) to (25.325067 24.671743 43.303354)
1 by 2 by 2 MPI processor grid
reading atoms ...
288 atoms
reading velocities ...
288 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.001 seconds
read_data CPU = 0.008 seconds
group bot molecule 1
144 atoms in group bot
group top molecule 2
144 atoms in group top
# ramping potential difference
variable v equal ramp(0,2)
# get electrode charges
variable q atom q
compute qbot bot reduce sum v_q
compute qtop top reduce sum v_q
# get theoretical charges:
# calculate distance dz between electrodes
compute zbot bot reduce max z
compute ztop top reduce min z
variable dz equal c_ztop-c_zbot
# calculate theoretical capacitance as eps0 * area / dz
variable eps0 equal 55.26349406/10000 # epsilon zero
variable capac equal "v_eps0 * lx * ly / v_dz"
# calculate theoretical charges and deviation of constant potential charges from theory
variable qtheory equal "v_capac * v_v"
variable percdev equal "100 * (c_qtop - v_qtheory) / (v_qtheory + 1e-9)" # avoid divide-by-zero
# constant potential electrodes with ramping potential difference
fix conp bot electrode/conp 0 1.979 couple top v_v symm on
288 atoms in group conp_group
thermo 1
# thermo: step, imposed potential, bottom charge, top charge, theory charge, percent deviation
thermo_style custom step v_v c_qbot c_qtop v_qtheory v_percdev
run 10
WARNING: No fixes with time integration, atoms won't move (src/verlet.cpp:60)
Ewald/electrode initialization ...
WARNING: System is not charge neutral, net charge = 0.000219 (src/kspace.cpp:327)
using 12-bit tables for long-range coulomb (src/kspace.cpp:342)
G vector (1/distance) = 0.15955673
estimated absolute RMS force accuracy = 4.0330163e-05
estimated relative force accuracy = 1.2145309e-07
KSpace vectors: actual max1d max3d = 90 5 665
kxmax kymax kzmax = 3 3 5
generated 1 of 1 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update every 1 steps, delay 10 steps, check yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 16
ghost atom cutoff = 16
binsize = 8, bins = 4 4 6
2 neighbor lists, perpetual/occasional/extra = 2 0 0
(1) pair lj/cut/coul/long, perpetual
attributes: half, newton on
pair build: half/bin/newton
stencil: half/bin/3d
bin: standard
(2) fix electrode/conp, perpetual, copy from (1)
attributes: half, newton on
pair build: copy
stencil: none
bin: none
Per MPI rank memory allocation (min/avg/max) = 15.96 | 15.96 | 15.96 Mbytes
Step v_v c_qbot c_qtop v_qtheory v_percdev
0 0 0 0 0 0
1 0.2 -0.030920491 0.030920491 0.031376826 -1.4543703
2 0.4 -0.061840982 0.061840982 0.062753652 -1.4543704
3 0.6 -0.092761473 0.092761473 0.094130479 -1.4543704
4 0.8 -0.12368196 0.12368196 0.1255073 -1.4543704
5 1 -0.15460245 0.15460245 0.15688413 -1.4543704
6 1.2 -0.18552295 0.18552295 0.18826096 -1.4543704
7 1.4 -0.21644344 0.21644344 0.21963778 -1.4543704
8 1.6 -0.24736393 0.24736393 0.25101461 -1.4543704
9 1.8 -0.27828442 0.27828442 0.28239144 -1.4543704
10 2 -0.30920491 0.30920491 0.31376826 -1.4543704
Loop time of 0.0456609 on 4 procs for 10 steps with 288 atoms
Performance: 18.922 ns/day, 1.268 hours/ns, 219.006 timesteps/s
86.7% CPU use with 4 MPI tasks x no OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 0.0019389 | 0.0024013 | 0.0030807 | 0.9 | 5.26
Bond | 1.493e-06 | 1.7132e-06 | 1.935e-06 | 0.0 | 0.00
Kspace | 0.016165 | 0.016695 | 0.017072 | 0.3 | 36.56
Neigh | 0 | 0 | 0 | 0.0 | 0.00
Comm | 0.0030891 | 0.0037595 | 0.0040145 | 0.6 | 8.23
Output | 0.0024177 | 0.0027885 | 0.0037099 | 1.0 | 6.11
Modify | 0.01944 | 0.019746 | 0.020327 | 0.2 | 43.24
Other | | 0.0002691 | | | 0.59
Nlocal: 72 ave 72 max 72 min
Histogram: 4 0 0 0 0 0 0 0 0 0
Nghost: 1062 ave 1062 max 1062 min
Histogram: 4 0 0 0 0 0 0 0 0 0
Neighs: 6624 ave 6936 max 6312 min
Histogram: 2 0 0 0 0 0 0 0 0 2
Total # of neighbors = 26496
Ave neighs/atom = 92
Ave special neighs/atom = 0
Neighbor list builds = 0
Dangerous builds = 0
Total wall time: 0:00:00

View File

@ -0,0 +1,139 @@
LAMMPS (24 Mar 2022)
boundary p p f
kspace_style ewald/electrode 1.0e-7
kspace_modify slab 3.0 # ew3dc
include "settings.mod" # styles, computes, groups and fixes
# set boundary in main script because ffield is periodic
units real
# distribute electrode atoms among all processors:
if "$(extract_setting(world_size) % 2) == 0" then "processors * * 2"
atom_style full
pair_style lj/cut/coul/long 14
# kspace_style and _modify in main script to test different approaches
read_data "data.au-vac"
Reading data file ...
orthogonal box = (0.285001 -0.368323 -1.043333) to (25.325067 24.671743 43.303354)
1 by 1 by 1 MPI processor grid
reading atoms ...
288 atoms
reading velocities ...
288 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.007 seconds
group bot molecule 1
144 atoms in group bot
group top molecule 2
144 atoms in group top
# ramping potential difference
variable v equal ramp(0,2)
# get electrode charges
variable q atom q
compute qbot bot reduce sum v_q
compute qtop top reduce sum v_q
# get theoretical charges:
# calculate distance dz between electrodes
compute zbot bot reduce max z
compute ztop top reduce min z
variable dz equal c_ztop-c_zbot
# calculate theoretical capacitance as eps0 * area / dz
variable eps0 equal 55.26349406/10000 # epsilon zero
variable capac equal "v_eps0 * lx * ly / v_dz"
# calculate theoretical charges and deviation of constant potential charges from theory
variable qtheory equal "v_capac * v_v"
variable percdev equal "100 * (c_qtop - v_qtheory) / (v_qtheory + 1e-9)" # avoid divide-by-zero
# constant potential electrodes with ramping potential difference
fix conp bot electrode/conp 0 1.979 couple top v_v symm on
288 atoms in group conp_group
thermo 1
# thermo: step, imposed potential, bottom charge, top charge, theory charge, percent deviation
thermo_style custom step v_v c_qbot c_qtop v_qtheory v_percdev
run 10
WARNING: No fixes with time integration, atoms won't move (src/verlet.cpp:60)
Ewald/electrode initialization ...
WARNING: System is not charge neutral, net charge = 0.000219 (src/kspace.cpp:327)
using 12-bit tables for long-range coulomb (src/kspace.cpp:342)
G vector (1/distance) = 0.15955673
estimated absolute RMS force accuracy = 3.1187248e-05
estimated relative force accuracy = 9.3919471e-08
KSpace vectors: actual max1d max3d = 266 12 7812
kxmax kymax kzmax = 3 3 12
generated 1 of 1 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update every 1 steps, delay 10 steps, check yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 16
ghost atom cutoff = 16
binsize = 8, bins = 4 4 6
2 neighbor lists, perpetual/occasional/extra = 2 0 0
(1) pair lj/cut/coul/long, perpetual
attributes: half, newton on
pair build: half/bin/newton
stencil: half/bin/3d
bin: standard
(2) fix electrode/conp, perpetual, copy from (1)
attributes: half, newton on
pair build: copy
stencil: none
bin: none
Per MPI rank memory allocation (min/avg/max) = 27.27 | 27.27 | 27.27 Mbytes
Step v_v c_qbot c_qtop v_qtheory v_percdev
0 0 0 0 0 0
1 0.2 -0.030925182 0.030925182 0.031376826 -1.4394194
2 0.4 -0.061850364 0.061850364 0.062753652 -1.4394194
3 0.6 -0.092775546 0.092775546 0.094130479 -1.4394194
4 0.8 -0.12370073 0.12370073 0.1255073 -1.4394195
5 1 -0.15462591 0.15462591 0.15688413 -1.4394195
6 1.2 -0.18555109 0.18555109 0.18826096 -1.4394195
7 1.4 -0.21647627 0.21647627 0.21963778 -1.4394195
8 1.6 -0.24740146 0.24740146 0.25101461 -1.4394195
9 1.8 -0.27832664 0.27832664 0.28239144 -1.4394195
10 2 -0.30925182 0.30925182 0.31376826 -1.4394195
Loop time of 0.0672288 on 1 procs for 10 steps with 288 atoms
Performance: 12.852 ns/day, 1.867 hours/ns, 148.746 timesteps/s
400.4% CPU use with 1 MPI tasks x no OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 0.0071442 | 0.0071442 | 0.0071442 | 0.0 | 10.63
Bond | 2.976e-06 | 2.976e-06 | 2.976e-06 | 0.0 | 0.00
Kspace | 0.0097903 | 0.0097903 | 0.0097903 | 0.0 | 14.56
Neigh | 0 | 0 | 0 | 0.0 | 0.00
Comm | 0.00023514 | 0.00023514 | 0.00023514 | 0.0 | 0.35
Output | 0.0029795 | 0.0029795 | 0.0029795 | 0.0 | 4.43
Modify | 0.047009 | 0.047009 | 0.047009 | 0.0 | 69.92
Other | | 6.809e-05 | | | 0.10
Nlocal: 288 ave 288 max 288 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 1170 ave 1170 max 1170 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 26496 ave 26496 max 26496 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 26496
Ave neighs/atom = 92
Ave special neighs/atom = 0
Neighbor list builds = 0
Dangerous builds = 0
Total wall time: 0:00:00

View File

@ -0,0 +1,140 @@
LAMMPS (24 Mar 2022)
boundary p p f
kspace_style ewald/electrode 1.0e-7
kspace_modify slab 3.0 # ew3dc
include "settings.mod" # styles, computes, groups and fixes
# set boundary in main script because ffield is periodic
units real
# distribute electrode atoms among all processors:
if "$(extract_setting(world_size) % 2) == 0" then "processors * * 2"
processors * * 2
atom_style full
pair_style lj/cut/coul/long 14
# kspace_style and _modify in main script to test different approaches
read_data "data.au-vac"
Reading data file ...
orthogonal box = (0.285001 -0.368323 -1.043333) to (25.325067 24.671743 43.303354)
1 by 2 by 2 MPI processor grid
reading atoms ...
288 atoms
reading velocities ...
288 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.008 seconds
read_data CPU = 0.123 seconds
group bot molecule 1
144 atoms in group bot
group top molecule 2
144 atoms in group top
# ramping potential difference
variable v equal ramp(0,2)
# get electrode charges
variable q atom q
compute qbot bot reduce sum v_q
compute qtop top reduce sum v_q
# get theoretical charges:
# calculate distance dz between electrodes
compute zbot bot reduce max z
compute ztop top reduce min z
variable dz equal c_ztop-c_zbot
# calculate theoretical capacitance as eps0 * area / dz
variable eps0 equal 55.26349406/10000 # epsilon zero
variable capac equal "v_eps0 * lx * ly / v_dz"
# calculate theoretical charges and deviation of constant potential charges from theory
variable qtheory equal "v_capac * v_v"
variable percdev equal "100 * (c_qtop - v_qtheory) / (v_qtheory + 1e-9)" # avoid divide-by-zero
# constant potential electrodes with ramping potential difference
fix conp bot electrode/conp 0 1.979 couple top v_v symm on
288 atoms in group conp_group
thermo 1
# thermo: step, imposed potential, bottom charge, top charge, theory charge, percent deviation
thermo_style custom step v_v c_qbot c_qtop v_qtheory v_percdev
run 10
WARNING: No fixes with time integration, atoms won't move (src/verlet.cpp:60)
Ewald/electrode initialization ...
WARNING: System is not charge neutral, net charge = 0.000219 (src/kspace.cpp:327)
using 12-bit tables for long-range coulomb (src/kspace.cpp:342)
G vector (1/distance) = 0.15955673
estimated absolute RMS force accuracy = 3.1187248e-05
estimated relative force accuracy = 9.3919471e-08
KSpace vectors: actual max1d max3d = 266 12 7812
kxmax kymax kzmax = 3 3 12
generated 1 of 1 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update every 1 steps, delay 10 steps, check yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 16
ghost atom cutoff = 16
binsize = 8, bins = 4 4 6
2 neighbor lists, perpetual/occasional/extra = 2 0 0
(1) pair lj/cut/coul/long, perpetual
attributes: half, newton on
pair build: half/bin/newton
stencil: half/bin/3d
bin: standard
(2) fix electrode/conp, perpetual, copy from (1)
attributes: half, newton on
pair build: copy
stencil: none
bin: none
Per MPI rank memory allocation (min/avg/max) = 27.31 | 27.31 | 27.31 Mbytes
Step v_v c_qbot c_qtop v_qtheory v_percdev
0 0 0 0 0 0
1 0.2 -0.030925182 0.030925182 0.031376826 -1.4394194
2 0.4 -0.061850364 0.061850364 0.062753652 -1.4394194
3 0.6 -0.092775546 0.092775546 0.094130479 -1.4394194
4 0.8 -0.12370073 0.12370073 0.1255073 -1.4394195
5 1 -0.15462591 0.15462591 0.15688413 -1.4394195
6 1.2 -0.18555109 0.18555109 0.18826096 -1.4394195
7 1.4 -0.21647627 0.21647627 0.21963778 -1.4394195
8 1.6 -0.24740146 0.24740146 0.25101461 -1.4394195
9 1.8 -0.27832664 0.27832664 0.28239144 -1.4394195
10 2 -0.30925182 0.30925182 0.31376826 -1.4394195
Loop time of 0.0459561 on 4 procs for 10 steps with 288 atoms
Performance: 18.801 ns/day, 1.277 hours/ns, 217.599 timesteps/s
95.8% CPU use with 4 MPI tasks x no OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 0.0021527 | 0.0026891 | 0.0037845 | 1.3 | 5.85
Bond | 1.303e-06 | 1.9462e-06 | 3.206e-06 | 0.0 | 0.00
Kspace | 0.0066254 | 0.0077509 | 0.0083577 | 0.8 | 16.87
Neigh | 0 | 0 | 0 | 0.0 | 0.00
Comm | 0.00285 | 0.0057275 | 0.0067088 | 2.2 | 12.46
Output | 0.0024325 | 0.0034682 | 0.0065316 | 3.0 | 7.55
Modify | 0.025911 | 0.025969 | 0.026007 | 0.0 | 56.51
Other | | 0.0003494 | | | 0.76
Nlocal: 72 ave 72 max 72 min
Histogram: 4 0 0 0 0 0 0 0 0 0
Nghost: 1062 ave 1062 max 1062 min
Histogram: 4 0 0 0 0 0 0 0 0 0
Neighs: 6624 ave 6936 max 6312 min
Histogram: 2 0 0 0 0 0 0 0 0 2
Total # of neighbors = 26496
Ave neighs/atom = 92
Ave special neighs/atom = 0
Neighbor list builds = 0
Dangerous builds = 0
Total wall time: 0:00:00

View File

@ -0,0 +1,138 @@
LAMMPS (24 Mar 2022)
boundary p p p # finite field, fully periodic
kspace_style ewald/electrode 1.0e-7
include "settings.mod" # styles, computes, groups and fixes
# set boundary in main script because ffield is periodic
units real
# distribute electrode atoms among all processors:
if "$(extract_setting(world_size) % 2) == 0" then "processors * * 2"
atom_style full
pair_style lj/cut/coul/long 14
# kspace_style and _modify in main script to test different approaches
read_data "data.au-vac"
Reading data file ...
orthogonal box = (0.285001 -0.368323 -1.043333) to (25.325067 24.671743 43.303354)
1 by 1 by 1 MPI processor grid
reading atoms ...
288 atoms
reading velocities ...
288 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.001 seconds
read_data CPU = 0.010 seconds
group bot molecule 1
144 atoms in group bot
group top molecule 2
144 atoms in group top
# ramping potential difference
variable v equal ramp(0,2)
# get electrode charges
variable q atom q
compute qbot bot reduce sum v_q
compute qtop top reduce sum v_q
# get theoretical charges:
# calculate distance dz between electrodes
compute zbot bot reduce max z
compute ztop top reduce min z
variable dz equal c_ztop-c_zbot
# calculate theoretical capacitance as eps0 * area / dz
variable eps0 equal 55.26349406/10000 # epsilon zero
variable capac equal "v_eps0 * lx * ly / v_dz"
# calculate theoretical charges and deviation of constant potential charges from theory
variable qtheory equal "v_capac * v_v"
variable percdev equal "100 * (c_qtop - v_qtheory) / (v_qtheory + 1e-9)" # avoid divide-by-zero
# constant potential electrodes with ramping potential difference
fix conp bot electrode/conp 0 1.979 couple top v_v symm on ffield yes
288 atoms in group conp_group
thermo 1
# thermo: step, imposed potential, bottom charge, top charge, theory charge, percent deviation
thermo_style custom step v_v c_qbot c_qtop v_qtheory v_percdev
run 10
WARNING: No fixes with time integration, atoms won't move (src/verlet.cpp:60)
Ewald/electrode initialization ...
WARNING: System is not charge neutral, net charge = 0.000219 (src/kspace.cpp:327)
using 12-bit tables for long-range coulomb (src/kspace.cpp:342)
G vector (1/distance) = 0.15955673
estimated absolute RMS force accuracy = 4.0330163e-05
estimated relative force accuracy = 1.2145309e-07
KSpace vectors: actual max1d max3d = 95 5 665
kxmax kymax kzmax = 3 3 5
generated 1 of 1 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update every 1 steps, delay 10 steps, check yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 16
ghost atom cutoff = 16
binsize = 8, bins = 4 4 6
2 neighbor lists, perpetual/occasional/extra = 2 0 0
(1) pair lj/cut/coul/long, perpetual
attributes: half, newton on
pair build: half/bin/newton
stencil: half/bin/3d
bin: standard
(2) fix electrode/conp, perpetual, copy from (1)
attributes: half, newton on
pair build: copy
stencil: none
bin: none
Per MPI rank memory allocation (min/avg/max) = 16.01 | 16.01 | 16.01 Mbytes
Step v_v c_qbot c_qtop v_qtheory v_percdev
0 0 0 0 0 0
1 0.2 -0.030908718 0.030908718 0.031376826 -1.491893
2 0.4 -0.061817435 0.061817435 0.062753652 -1.491893
3 0.6 -0.092726153 0.092726153 0.094130479 -1.491893
4 0.8 -0.12363487 0.12363487 0.1255073 -1.491893
5 1 -0.15454359 0.15454359 0.15688413 -1.491893
6 1.2 -0.18545231 0.18545231 0.18826096 -1.491893
7 1.4 -0.21636102 0.21636102 0.21963778 -1.491893
8 1.6 -0.24726974 0.24726974 0.25101461 -1.491893
9 1.8 -0.27817846 0.27817846 0.28239144 -1.491893
10 2 -0.30908718 0.30908718 0.31376826 -1.491893
Loop time of 0.0481838 on 1 procs for 10 steps with 288 atoms
Performance: 17.931 ns/day, 1.338 hours/ns, 207.539 timesteps/s
390.7% CPU use with 1 MPI tasks x no OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 0.0071719 | 0.0071719 | 0.0071719 | 0.0 | 14.88
Bond | 2.946e-06 | 2.946e-06 | 2.946e-06 | 0.0 | 0.01
Kspace | 0.0038758 | 0.0038758 | 0.0038758 | 0.0 | 8.04
Neigh | 0 | 0 | 0 | 0.0 | 0.00
Comm | 0.00053561 | 0.00053561 | 0.00053561 | 0.0 | 1.11
Output | 0.0025385 | 0.0025385 | 0.0025385 | 0.0 | 5.27
Modify | 0.033951 | 0.033951 | 0.033951 | 0.0 | 70.46
Other | | 0.0001075 | | | 0.22
Nlocal: 288 ave 288 max 288 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 2628 ave 2628 max 2628 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 26496 ave 26496 max 26496 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 26496
Ave neighs/atom = 92
Ave special neighs/atom = 0
Neighbor list builds = 0
Dangerous builds = 0
Total wall time: 0:00:00

View File

@ -0,0 +1,139 @@
LAMMPS (24 Mar 2022)
boundary p p p # finite field, fully periodic
kspace_style ewald/electrode 1.0e-7
include "settings.mod" # styles, computes, groups and fixes
# set boundary in main script because ffield is periodic
units real
# distribute electrode atoms among all processors:
if "$(extract_setting(world_size) % 2) == 0" then "processors * * 2"
processors * * 2
atom_style full
pair_style lj/cut/coul/long 14
# kspace_style and _modify in main script to test different approaches
read_data "data.au-vac"
Reading data file ...
orthogonal box = (0.285001 -0.368323 -1.043333) to (25.325067 24.671743 43.303354)
1 by 2 by 2 MPI processor grid
reading atoms ...
288 atoms
reading velocities ...
288 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.001 seconds
read_data CPU = 0.026 seconds
group bot molecule 1
144 atoms in group bot
group top molecule 2
144 atoms in group top
# ramping potential difference
variable v equal ramp(0,2)
# get electrode charges
variable q atom q
compute qbot bot reduce sum v_q
compute qtop top reduce sum v_q
# get theoretical charges:
# calculate distance dz between electrodes
compute zbot bot reduce max z
compute ztop top reduce min z
variable dz equal c_ztop-c_zbot
# calculate theoretical capacitance as eps0 * area / dz
variable eps0 equal 55.26349406/10000 # epsilon zero
variable capac equal "v_eps0 * lx * ly / v_dz"
# calculate theoretical charges and deviation of constant potential charges from theory
variable qtheory equal "v_capac * v_v"
variable percdev equal "100 * (c_qtop - v_qtheory) / (v_qtheory + 1e-9)" # avoid divide-by-zero
# constant potential electrodes with ramping potential difference
fix conp bot electrode/conp 0 1.979 couple top v_v symm on ffield yes
288 atoms in group conp_group
thermo 1
# thermo: step, imposed potential, bottom charge, top charge, theory charge, percent deviation
thermo_style custom step v_v c_qbot c_qtop v_qtheory v_percdev
run 10
WARNING: No fixes with time integration, atoms won't move (src/verlet.cpp:60)
Ewald/electrode initialization ...
WARNING: System is not charge neutral, net charge = 0.000219 (src/kspace.cpp:327)
using 12-bit tables for long-range coulomb (src/kspace.cpp:342)
G vector (1/distance) = 0.15955673
estimated absolute RMS force accuracy = 4.0330163e-05
estimated relative force accuracy = 1.2145309e-07
KSpace vectors: actual max1d max3d = 95 5 665
kxmax kymax kzmax = 3 3 5
generated 1 of 1 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update every 1 steps, delay 10 steps, check yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 16
ghost atom cutoff = 16
binsize = 8, bins = 4 4 6
2 neighbor lists, perpetual/occasional/extra = 2 0 0
(1) pair lj/cut/coul/long, perpetual
attributes: half, newton on
pair build: half/bin/newton
stencil: half/bin/3d
bin: standard
(2) fix electrode/conp, perpetual, copy from (1)
attributes: half, newton on
pair build: copy
stencil: none
bin: none
Per MPI rank memory allocation (min/avg/max) = 15.97 | 15.97 | 15.97 Mbytes
Step v_v c_qbot c_qtop v_qtheory v_percdev
0 0 0 0 0 0
1 0.2 -0.030908718 0.030908718 0.031376826 -1.491893
2 0.4 -0.061817435 0.061817435 0.062753652 -1.491893
3 0.6 -0.092726153 0.092726153 0.094130479 -1.491893
4 0.8 -0.12363487 0.12363487 0.1255073 -1.491893
5 1 -0.15454359 0.15454359 0.15688413 -1.491893
6 1.2 -0.18545231 0.18545231 0.18826096 -1.491893
7 1.4 -0.21636102 0.21636102 0.21963778 -1.491893
8 1.6 -0.24726974 0.24726974 0.25101461 -1.491893
9 1.8 -0.27817846 0.27817846 0.28239144 -1.491893
10 2 -0.30908718 0.30908718 0.31376826 -1.491893
Loop time of 0.0294825 on 4 procs for 10 steps with 288 atoms
Performance: 29.306 ns/day, 0.819 hours/ns, 339.184 timesteps/s
99.8% CPU use with 4 MPI tasks x no OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 0.0020718 | 0.0025674 | 0.0029431 | 0.7 | 8.71
Bond | 1.423e-06 | 2.0293e-06 | 2.615e-06 | 0.0 | 0.01
Kspace | 0.0028016 | 0.0031772 | 0.0035529 | 0.5 | 10.78
Neigh | 0 | 0 | 0 | 0.0 | 0.00
Comm | 0.0023552 | 0.0032209 | 0.0035502 | 0.9 | 10.92
Output | 0.0011969 | 0.0016057 | 0.002676 | 1.5 | 5.45
Modify | 0.018358 | 0.018553 | 0.018654 | 0.1 | 62.93
Other | | 0.0003563 | | | 1.21
Nlocal: 72 ave 72 max 72 min
Histogram: 4 0 0 0 0 0 0 0 0 0
Nghost: 1629 ave 1629 max 1629 min
Histogram: 4 0 0 0 0 0 0 0 0 0
Neighs: 6624 ave 6936 max 6312 min
Histogram: 2 0 0 0 0 0 0 0 0 2
Total # of neighbors = 26496
Ave neighs/atom = 92
Ave special neighs/atom = 0
Neighbor list builds = 0
Dangerous builds = 0
Total wall time: 0:00:00

View File

@ -0,0 +1,143 @@
LAMMPS (24 Mar 2022)
boundary p p f
kspace_style pppm/electrode 1.0e-7
kspace_modify slab 3.0
include "settings.mod" # styles, computes, groups and fixes
# set boundary in main script because ffield is periodic
units real
# distribute electrode atoms among all processors:
if "$(extract_setting(world_size) % 2) == 0" then "processors * * 2"
atom_style full
pair_style lj/cut/coul/long 14
# kspace_style and _modify in main script to test different approaches
read_data "data.au-vac"
Reading data file ...
orthogonal box = (0.285001 -0.368323 -1.043333) to (25.325067 24.671743 43.303354)
1 by 1 by 1 MPI processor grid
reading atoms ...
288 atoms
reading velocities ...
288 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.007 seconds
group bot molecule 1
144 atoms in group bot
group top molecule 2
144 atoms in group top
# ramping potential difference
variable v equal ramp(0,2)
# get electrode charges
variable q atom q
compute qbot bot reduce sum v_q
compute qtop top reduce sum v_q
# get theoretical charges:
# calculate distance dz between electrodes
compute zbot bot reduce max z
compute ztop top reduce min z
variable dz equal c_ztop-c_zbot
# calculate theoretical capacitance as eps0 * area / dz
variable eps0 equal 55.26349406/10000 # epsilon zero
variable capac equal "v_eps0 * lx * ly / v_dz"
# calculate theoretical charges and deviation of constant potential charges from theory
variable qtheory equal "v_capac * v_v"
variable percdev equal "100 * (c_qtop - v_qtheory) / (v_qtheory + 1e-9)" # avoid divide-by-zero
# constant potential electrodes with ramping potential difference
fix conp bot electrode/conp 0 1.979 couple top v_v symm on
288 atoms in group conp_group
thermo 1
# thermo: step, imposed potential, bottom charge, top charge, theory charge, percent deviation
thermo_style custom step v_v c_qbot c_qtop v_qtheory v_percdev
run 10
WARNING: No fixes with time integration, atoms won't move (src/verlet.cpp:60)
PPPM/electrode initialization ...
WARNING: System is not charge neutral, net charge = 0.000219 (src/kspace.cpp:327)
using 12-bit tables for long-range coulomb (src/kspace.cpp:342)
G vector (1/distance) = 0.16696028
grid = 8 8 25
stencil order = 5
estimated absolute RMS force accuracy = 2.7967012e-05
estimated relative force accuracy = 8.4221827e-08
using double precision MKL FFT
3d grid and FFT values/proc = 4563 1600
generated 1 of 1 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update every 1 steps, delay 10 steps, check yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 16
ghost atom cutoff = 16
binsize = 8, bins = 4 4 6
2 neighbor lists, perpetual/occasional/extra = 2 0 0
(1) pair lj/cut/coul/long, perpetual
attributes: half, newton on
pair build: half/bin/newton
stencil: half/bin/3d
bin: standard
(2) fix electrode/conp, perpetual, copy from (1)
attributes: half, newton on
pair build: copy
stencil: none
bin: none
WARNING: Using kspace solver on system with no charge (src/kspace.cpp:314)
Per MPI rank memory allocation (min/avg/max) = 7.93 | 7.93 | 7.93 Mbytes
Step v_v c_qbot c_qtop v_qtheory v_percdev
0 0 0 0 0 0
1 0.2 -0.030912769 0.030912769 0.031376826 -1.4789807
2 0.4 -0.061825538 0.061825538 0.062753652 -1.4789807
3 0.6 -0.092738307 0.092738307 0.094130479 -1.4789807
4 0.8 -0.12365108 0.12365108 0.1255073 -1.4789807
5 1 -0.15456384 0.15456384 0.15688413 -1.4789807
6 1.2 -0.18547661 0.18547661 0.18826096 -1.4789807
7 1.4 -0.21638938 0.21638938 0.21963778 -1.4789807
8 1.6 -0.24730215 0.24730215 0.25101461 -1.4789807
9 1.8 -0.27821492 0.27821492 0.28239144 -1.4789807
10 2 -0.30912769 0.30912769 0.31376826 -1.4789807
Loop time of 0.0784857 on 1 procs for 10 steps with 288 atoms
Performance: 11.008 ns/day, 2.180 hours/ns, 127.412 timesteps/s
400.0% CPU use with 1 MPI tasks x no OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 0.0075859 | 0.0075859 | 0.0075859 | 0.0 | 9.67
Bond | 2.817e-06 | 2.817e-06 | 2.817e-06 | 0.0 | 0.00
Kspace | 0.020841 | 0.020841 | 0.020841 | 0.0 | 26.55
Neigh | 0 | 0 | 0 | 0.0 | 0.00
Comm | 0.00019415 | 0.00019415 | 0.00019415 | 0.0 | 0.25
Output | 0.0032534 | 0.0032534 | 0.0032534 | 0.0 | 4.15
Modify | 0.046545 | 0.046545 | 0.046545 | 0.0 | 59.30
Other | | 6.246e-05 | | | 0.08
Nlocal: 288 ave 288 max 288 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 1170 ave 1170 max 1170 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 26496 ave 26496 max 26496 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 26496
Ave neighs/atom = 92
Ave special neighs/atom = 0
Neighbor list builds = 0
Dangerous builds = 0
Total wall time: 0:00:10

View File

@ -0,0 +1,144 @@
LAMMPS (24 Mar 2022)
boundary p p f
kspace_style pppm/electrode 1.0e-7
kspace_modify slab 3.0
include "settings.mod" # styles, computes, groups and fixes
# set boundary in main script because ffield is periodic
units real
# distribute electrode atoms among all processors:
if "$(extract_setting(world_size) % 2) == 0" then "processors * * 2"
processors * * 2
atom_style full
pair_style lj/cut/coul/long 14
# kspace_style and _modify in main script to test different approaches
read_data "data.au-vac"
Reading data file ...
orthogonal box = (0.285001 -0.368323 -1.043333) to (25.325067 24.671743 43.303354)
1 by 2 by 2 MPI processor grid
reading atoms ...
288 atoms
reading velocities ...
288 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.014 seconds
group bot molecule 1
144 atoms in group bot
group top molecule 2
144 atoms in group top
# ramping potential difference
variable v equal ramp(0,2)
# get electrode charges
variable q atom q
compute qbot bot reduce sum v_q
compute qtop top reduce sum v_q
# get theoretical charges:
# calculate distance dz between electrodes
compute zbot bot reduce max z
compute ztop top reduce min z
variable dz equal c_ztop-c_zbot
# calculate theoretical capacitance as eps0 * area / dz
variable eps0 equal 55.26349406/10000 # epsilon zero
variable capac equal "v_eps0 * lx * ly / v_dz"
# calculate theoretical charges and deviation of constant potential charges from theory
variable qtheory equal "v_capac * v_v"
variable percdev equal "100 * (c_qtop - v_qtheory) / (v_qtheory + 1e-9)" # avoid divide-by-zero
# constant potential electrodes with ramping potential difference
fix conp bot electrode/conp 0 1.979 couple top v_v symm on
288 atoms in group conp_group
thermo 1
# thermo: step, imposed potential, bottom charge, top charge, theory charge, percent deviation
thermo_style custom step v_v c_qbot c_qtop v_qtheory v_percdev
run 10
WARNING: No fixes with time integration, atoms won't move (src/verlet.cpp:60)
PPPM/electrode initialization ...
WARNING: System is not charge neutral, net charge = 0.000219 (src/kspace.cpp:327)
using 12-bit tables for long-range coulomb (src/kspace.cpp:342)
G vector (1/distance) = 0.16696028
grid = 8 8 25
stencil order = 5
estimated absolute RMS force accuracy = 2.7967012e-05
estimated relative force accuracy = 8.4221827e-08
using double precision MKL FFT
3d grid and FFT values/proc = 2691 672
generated 1 of 1 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update every 1 steps, delay 10 steps, check yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 16
ghost atom cutoff = 16
binsize = 8, bins = 4 4 6
2 neighbor lists, perpetual/occasional/extra = 2 0 0
(1) pair lj/cut/coul/long, perpetual
attributes: half, newton on
pair build: half/bin/newton
stencil: half/bin/3d
bin: standard
(2) fix electrode/conp, perpetual, copy from (1)
attributes: half, newton on
pair build: copy
stencil: none
bin: none
WARNING: Using kspace solver on system with no charge (src/kspace.cpp:314)
Per MPI rank memory allocation (min/avg/max) = 7.716 | 7.765 | 7.814 Mbytes
Step v_v c_qbot c_qtop v_qtheory v_percdev
0 0 0 0 0 0
1 0.2 -0.030912769 0.030912769 0.031376826 -1.4789807
2 0.4 -0.061825538 0.061825538 0.062753652 -1.4789807
3 0.6 -0.092738307 0.092738307 0.094130479 -1.4789807
4 0.8 -0.12365108 0.12365108 0.1255073 -1.4789807
5 1 -0.15456384 0.15456384 0.15688413 -1.4789807
6 1.2 -0.18547661 0.18547661 0.18826096 -1.4789807
7 1.4 -0.21638938 0.21638938 0.21963778 -1.4789807
8 1.6 -0.24730215 0.24730215 0.25101461 -1.4789807
9 1.8 -0.27821492 0.27821492 0.28239144 -1.4789807
10 2 -0.30912769 0.30912769 0.31376826 -1.4789807
Loop time of 0.0296999 on 4 procs for 10 steps with 288 atoms
Performance: 29.091 ns/day, 0.825 hours/ns, 336.701 timesteps/s
91.5% CPU use with 4 MPI tasks x no OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 0.0021578 | 0.0022153 | 0.0022978 | 0.1 | 7.46
Bond | 1.161e-06 | 1.435e-06 | 1.943e-06 | 0.0 | 0.00
Kspace | 0.0054884 | 0.0057437 | 0.0059072 | 0.2 | 19.34
Neigh | 0 | 0 | 0 | 0.0 | 0.00
Comm | 0.0015424 | 0.0025686 | 0.0031306 | 1.2 | 8.65
Output | 0.0019229 | 0.0023315 | 0.0033526 | 1.2 | 7.85
Modify | 0.016192 | 0.016494 | 0.016902 | 0.2 | 55.54
Other | | 0.0003449 | | | 1.16
Nlocal: 72 ave 72 max 72 min
Histogram: 4 0 0 0 0 0 0 0 0 0
Nghost: 1062 ave 1062 max 1062 min
Histogram: 4 0 0 0 0 0 0 0 0 0
Neighs: 6624 ave 6936 max 6312 min
Histogram: 2 0 0 0 0 0 0 0 0 2
Total # of neighbors = 26496
Ave neighs/atom = 92
Ave special neighs/atom = 0
Neighbor list builds = 0
Dangerous builds = 0
Total wall time: 0:00:03

View File

@ -0,0 +1,141 @@
LAMMPS (24 Mar 2022)
boundary p p p # finite field, fully periodic
kspace_style pppm/electrode 1.0e-7
include "settings.mod" # styles, computes, groups and fixes
# set boundary in main script because ffield is periodic
units real
# distribute electrode atoms among all processors:
if "$(extract_setting(world_size) % 2) == 0" then "processors * * 2"
atom_style full
pair_style lj/cut/coul/long 14
# kspace_style and _modify in main script to test different approaches
read_data "data.au-vac"
Reading data file ...
orthogonal box = (0.285001 -0.368323 -1.043333) to (25.325067 24.671743 43.303354)
1 by 1 by 1 MPI processor grid
reading atoms ...
288 atoms
reading velocities ...
288 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.001 seconds
read_data CPU = 0.006 seconds
group bot molecule 1
144 atoms in group bot
group top molecule 2
144 atoms in group top
# ramping potential difference
variable v equal ramp(0,2)
# get electrode charges
variable q atom q
compute qbot bot reduce sum v_q
compute qtop top reduce sum v_q
# get theoretical charges:
# calculate distance dz between electrodes
compute zbot bot reduce max z
compute ztop top reduce min z
variable dz equal c_ztop-c_zbot
# calculate theoretical capacitance as eps0 * area / dz
variable eps0 equal 55.26349406/10000 # epsilon zero
variable capac equal "v_eps0 * lx * ly / v_dz"
# calculate theoretical charges and deviation of constant potential charges from theory
variable qtheory equal "v_capac * v_v"
variable percdev equal "100 * (c_qtop - v_qtheory) / (v_qtheory + 1e-9)" # avoid divide-by-zero
# constant potential electrodes with ramping potential difference
fix conp bot electrode/conp 0 1.979 couple top v_v symm on ffield yes
288 atoms in group conp_group
thermo 1
# thermo: step, imposed potential, bottom charge, top charge, theory charge, percent deviation
thermo_style custom step v_v c_qbot c_qtop v_qtheory v_percdev
run 10
WARNING: No fixes with time integration, atoms won't move (src/verlet.cpp:60)
PPPM/electrode initialization ...
WARNING: System is not charge neutral, net charge = 0.000219 (src/kspace.cpp:327)
using 12-bit tables for long-range coulomb (src/kspace.cpp:342)
G vector (1/distance) = 0.17138393
grid = 8 8 12
stencil order = 5
estimated absolute RMS force accuracy = 1.8143403e-05
estimated relative force accuracy = 5.4638319e-08
using double precision MKL FFT
3d grid and FFT values/proc = 2873 768
generated 1 of 1 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update every 1 steps, delay 10 steps, check yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 16
ghost atom cutoff = 16
binsize = 8, bins = 4 4 6
2 neighbor lists, perpetual/occasional/extra = 2 0 0
(1) pair lj/cut/coul/long, perpetual
attributes: half, newton on
pair build: half/bin/newton
stencil: half/bin/3d
bin: standard
(2) fix electrode/conp, perpetual, copy from (1)
attributes: half, newton on
pair build: copy
stencil: none
bin: none
WARNING: Using kspace solver on system with no charge (src/kspace.cpp:314)
Per MPI rank memory allocation (min/avg/max) = 7.86 | 7.86 | 7.86 Mbytes
Step v_v c_qbot c_qtop v_qtheory v_percdev
0 0 0 0 0 0
1 0.2 -0.030902 0.030902 0.031376826 -1.5133027
2 0.4 -0.061804 0.061804 0.062753652 -1.5133028
3 0.6 -0.092705999 0.092705999 0.094130479 -1.5133028
4 0.8 -0.123608 0.123608 0.1255073 -1.5133028
5 1 -0.15451 0.15451 0.15688413 -1.5133028
6 1.2 -0.185412 0.185412 0.18826096 -1.5133028
7 1.4 -0.216314 0.216314 0.21963778 -1.5133028
8 1.6 -0.247216 0.247216 0.25101461 -1.5133028
9 1.8 -0.278118 0.278118 0.28239144 -1.5133028
10 2 -0.30902 0.30902 0.31376826 -1.5133028
Loop time of 0.054016 on 1 procs for 10 steps with 288 atoms
Performance: 15.995 ns/day, 1.500 hours/ns, 185.130 timesteps/s
400.3% CPU use with 1 MPI tasks x no OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 0.0081119 | 0.0081119 | 0.0081119 | 0.0 | 15.02
Bond | 4.802e-06 | 4.802e-06 | 4.802e-06 | 0.0 | 0.01
Kspace | 0.0053539 | 0.0053539 | 0.0053539 | 0.0 | 9.91
Neigh | 0 | 0 | 0 | 0.0 | 0.00
Comm | 0.00052577 | 0.00052577 | 0.00052577 | 0.0 | 0.97
Output | 0.0033476 | 0.0033476 | 0.0033476 | 0.0 | 6.20
Modify | 0.036562 | 0.036562 | 0.036562 | 0.0 | 67.69
Other | | 0.0001102 | | | 0.20
Nlocal: 288 ave 288 max 288 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 2628 ave 2628 max 2628 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 26496 ave 26496 max 26496 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 26496
Ave neighs/atom = 92
Ave special neighs/atom = 0
Neighbor list builds = 0
Dangerous builds = 0
Total wall time: 0:00:09

View File

@ -0,0 +1,142 @@
LAMMPS (24 Mar 2022)
boundary p p p # finite field, fully periodic
kspace_style pppm/electrode 1.0e-7
include "settings.mod" # styles, computes, groups and fixes
# set boundary in main script because ffield is periodic
units real
# distribute electrode atoms among all processors:
if "$(extract_setting(world_size) % 2) == 0" then "processors * * 2"
processors * * 2
atom_style full
pair_style lj/cut/coul/long 14
# kspace_style and _modify in main script to test different approaches
read_data "data.au-vac"
Reading data file ...
orthogonal box = (0.285001 -0.368323 -1.043333) to (25.325067 24.671743 43.303354)
1 by 2 by 2 MPI processor grid
reading atoms ...
288 atoms
reading velocities ...
288 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.001 seconds
read_data CPU = 0.022 seconds
group bot molecule 1
144 atoms in group bot
group top molecule 2
144 atoms in group top
# ramping potential difference
variable v equal ramp(0,2)
# get electrode charges
variable q atom q
compute qbot bot reduce sum v_q
compute qtop top reduce sum v_q
# get theoretical charges:
# calculate distance dz between electrodes
compute zbot bot reduce max z
compute ztop top reduce min z
variable dz equal c_ztop-c_zbot
# calculate theoretical capacitance as eps0 * area / dz
variable eps0 equal 55.26349406/10000 # epsilon zero
variable capac equal "v_eps0 * lx * ly / v_dz"
# calculate theoretical charges and deviation of constant potential charges from theory
variable qtheory equal "v_capac * v_v"
variable percdev equal "100 * (c_qtop - v_qtheory) / (v_qtheory + 1e-9)" # avoid divide-by-zero
# constant potential electrodes with ramping potential difference
fix conp bot electrode/conp 0 1.979 couple top v_v symm on ffield yes
288 atoms in group conp_group
thermo 1
# thermo: step, imposed potential, bottom charge, top charge, theory charge, percent deviation
thermo_style custom step v_v c_qbot c_qtop v_qtheory v_percdev
run 10
WARNING: No fixes with time integration, atoms won't move (src/verlet.cpp:60)
PPPM/electrode initialization ...
WARNING: System is not charge neutral, net charge = 0.000219 (src/kspace.cpp:327)
using 12-bit tables for long-range coulomb (src/kspace.cpp:342)
G vector (1/distance) = 0.17138393
grid = 8 8 12
stencil order = 5
estimated absolute RMS force accuracy = 1.8143403e-05
estimated relative force accuracy = 5.4638319e-08
using double precision MKL FFT
3d grid and FFT values/proc = 1287 192
generated 1 of 1 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update every 1 steps, delay 10 steps, check yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 16
ghost atom cutoff = 16
binsize = 8, bins = 4 4 6
2 neighbor lists, perpetual/occasional/extra = 2 0 0
(1) pair lj/cut/coul/long, perpetual
attributes: half, newton on
pair build: half/bin/newton
stencil: half/bin/3d
bin: standard
(2) fix electrode/conp, perpetual, copy from (1)
attributes: half, newton on
pair build: copy
stencil: none
bin: none
WARNING: Using kspace solver on system with no charge (src/kspace.cpp:314)
Per MPI rank memory allocation (min/avg/max) = 7.712 | 7.712 | 7.712 Mbytes
Step v_v c_qbot c_qtop v_qtheory v_percdev
0 0 0 0 0 0
1 0.2 -0.030902 0.030902 0.031376826 -1.5133027
2 0.4 -0.061804 0.061804 0.062753652 -1.5133028
3 0.6 -0.092705999 0.092705999 0.094130479 -1.5133028
4 0.8 -0.123608 0.123608 0.1255073 -1.5133028
5 1 -0.15451 0.15451 0.15688413 -1.5133028
6 1.2 -0.185412 0.185412 0.18826096 -1.5133028
7 1.4 -0.216314 0.216314 0.21963778 -1.5133028
8 1.6 -0.247216 0.247216 0.25101461 -1.5133028
9 1.8 -0.278118 0.278118 0.28239144 -1.5133028
10 2 -0.30902 0.30902 0.31376826 -1.5133028
Loop time of 0.0301351 on 4 procs for 10 steps with 288 atoms
Performance: 28.671 ns/day, 0.837 hours/ns, 331.839 timesteps/s
99.8% CPU use with 4 MPI tasks x no OpenMP threads
MPI task timing breakdown:
Section | min time | avg time | max time |%varavg| %total
---------------------------------------------------------------
Pair | 0.0020768 | 0.0022701 | 0.0024074 | 0.3 | 7.53
Bond | 1.271e-06 | 2.2107e-06 | 4.237e-06 | 0.0 | 0.01
Kspace | 0.0039171 | 0.0040631 | 0.0042468 | 0.2 | 13.48
Neigh | 0 | 0 | 0 | 0.0 | 0.00
Comm | 0.0020711 | 0.0032953 | 0.0038884 | 1.3 | 10.93
Output | 0.0013425 | 0.001877 | 0.0031692 | 1.7 | 6.23
Modify | 0.018076 | 0.018252 | 0.018479 | 0.1 | 60.57
Other | | 0.0003755 | | | 1.25
Nlocal: 72 ave 72 max 72 min
Histogram: 4 0 0 0 0 0 0 0 0 0
Nghost: 1629 ave 1629 max 1629 min
Histogram: 4 0 0 0 0 0 0 0 0 0
Neighs: 6624 ave 6936 max 6312 min
Histogram: 2 0 0 0 0 0 0 0 0 2
Total # of neighbors = 26496
Ave neighs/atom = 92
Ave special neighs/atom = 0
Neighbor list builds = 0
Dangerous builds = 0
Total wall time: 0:00:03

View File

@ -0,0 +1,35 @@
# set boundary in main script because ffield is periodic
units real
# distribute electrode atoms among all processors:
if "$(extract_setting(world_size) % 2) == 0" then "processors * * 2"
atom_style full
pair_style lj/cut/coul/long 14
# kspace_style and _modify in main script to test different approaches
read_data "data.au-vac"
group bot molecule 1
group top molecule 2
# ramping potential difference
variable v equal ramp(0,2)
# get electrode charges
variable q atom q
compute qbot bot reduce sum v_q
compute qtop top reduce sum v_q
# get theoretical charges:
# calculate distance dz between electrodes
compute zbot bot reduce max z
compute ztop top reduce min z
variable dz equal c_ztop-c_zbot
# calculate theoretical capacitance as eps0 * area / dz
variable eps0 equal 55.26349406/10000 # epsilon zero
variable capac equal "v_eps0 * lx * ly / v_dz"
# calculate theoretical charges and deviation of constant potential charges from theory
variable qtheory equal "v_capac * v_v"
variable percdev equal "100 * (c_qtop - v_qtheory) / (v_qtheory + 1e-9)" # avoid divide-by-zero

View File

@ -0,0 +1,17 @@
#!/bin/bash -e
lmpbin=$1
if [ ! -f $lmpbin ]; then
echo "LAMMPS binary '$lmpbin' is not a file"
exit 1
fi
for file in in.*; do
echo "$file"
echo "1 proc"
$lmpbin -i $file > /dev/null
grep ' 1.2 ' log.lammps
echo "2 procs"
mpirun -np 2 $lmpbin -i $file > /dev/null
grep ' 1.2 ' log.lammps
done

1
lib/electrode/Install.py Symbolic link
View File

@ -0,0 +1 @@
../Install.py

View File

@ -0,0 +1,5 @@
# Settings that the LAMMPS build will import when this package library is used
electrode_SYSINC =
electrode_SYSLIB =
electrode_SYSPATH =

View File

@ -0,0 +1,5 @@
# Settings that the LAMMPS build will import when this package library is used
electrode_SYSINC =
electrode_SYSLIB = -lblas -llapack
electrode_SYSPATH =

View File

@ -0,0 +1,5 @@
# Settings that the LAMMPS build will import when this package library is used
electrode_SYSINC =
electrode_SYSLIB = -llinalg -lgfortran
electrode_SYSPATH = -L../../lib/linalg$(LIBOBJDIR)

View File

@ -0,0 +1,48 @@
SHELL = /bin/sh
# which file will be copied to Makefile.lammps
EXTRAMAKE = Makefile.lammps.linalg
# ------ DEFINITIONS ------
LIB = libelectrode.a
OBJ = $(SRC:.cpp=.o)
# ------ SETTINGS ------
# include any MPI settings needed for the ELECTRODE library to build with
# the same MPI library that LAMMPS is built with
CC = mpicxx
CCFLAGS = -O3 -fPIC -DMPICH_IGNORE_CXX_SEEK -DOMPI_SKIP_MPICXX=1
ARCHIVE = ar
ARCHFLAG = -rc
DEPFLAGS = -M
#LINK =
#LINKFLAGS =
USRLIB =
SYSLIB =
# ------ MAKE PROCEDURE ------
lib: $(OBJ)
$(ARCHIVE) $(ARFLAGS) $(LIB) $(OBJ)
@cp $(EXTRAMAKE) Makefile.lammps
# ------ COMPILE RULES ------
%.o:%.cpp
$(CC) $(CCFLAGS) -c $< -o $@
%.d:%.cpp
$(CC) $(CCFLAGS) $(DEPFLAGS) $< > $@
# ------ DEPENDENCIES ------
DEPENDS = $(OBJ:.o=.d)
# ------ CLEAN ------
clean:
-rm -f *.d *~ $(OBJ) $(LIB)

View File

@ -0,0 +1,48 @@
SHELL = /bin/sh
# which file will be copied to Makefile.lammps
EXTRAMAKE = Makefile.lammps.linalg
# ------ DEFINITIONS ------
LIB = libelectrode.a
OBJ = $(SRC:.cpp=.o)
# ------ SETTINGS ------
# include any MPI settings needed for the ATC library to build with
# the same MPI library that LAMMPS is built with
CC = g++
CCFLAGS = -O3 -fPIC -I../../src/STUBS
ARCHIVE = ar
ARCHFLAG = -rc
DEPFLAGS = -M
#LINK =
#LINKFLAGS =
USRLIB =
SYSLIB =
# ------ MAKE PROCEDURE ------
lib: $(OBJ)
$(ARCHIVE) $(ARFLAGS) $(LIB) $(OBJ)
@cp $(EXTRAMAKE) Makefile.lammps
# ------ COMPILE RULES ------
%.o:%.cpp
$(CC) $(CCFLAGS) -c $< -o $@
%.d:%.cpp
$(CC) $(CCFLAGS) $(DEPFLAGS) $< > $@
# ------ DEPENDENCIES ------
DEPENDS = $(OBJ:.o=.d)
# ------ CLEAN ------
clean:
-rm -f *.d *~ $(OBJ) $(LIB)

View File

@ -78,6 +78,10 @@ if (test $1 = "DPD-BASIC") then
depend INTEL
fi
if (test $1 = "ELECTRODE") then
depend INTEL
fi
if (test $1 = "EXTRA-COMPUTE") then
depend KOKKOS
fi

67
src/ELECTRODE/Install.sh Executable file
View File

@ -0,0 +1,67 @@
# Install/unInstall package files in LAMMPS
# mode = 0/1/2 for uninstall/install/update
# this is default Install.sh for all packages
# if package has an auxiliary library or a file with a dependency,
# then package dir has its own customized Install.sh
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
}
# all package files with no dependencies
for file in *.cpp *.h; do
test -f ${file} && action $file
done
if (test $1 = 1) then
if (test ! -e ../pppm.cpp) then
echo "Must install KSPACE package with ELECTRODE"
exit 1
fi
if (test -e ../Makefile.package) then
sed -i -e 's/[^ \t]*electrode[^ \t]* //g' ../Makefile.package
sed -i -e 's|^PKG_PATH =[ \t]*|&-L../../lib/electrode |' ../Makefile.package
sed -i -e 's|^PKG_LIB =[ \t]*|&-lelectrode |' ../Makefile.package
sed -i -e 's|^PKG_SYSPATH =[ \t]*|&$(electrode_SYSPATH) |' ../Makefile.package
sed -i -e 's|^PKG_SYSLIB =[ \t]*|&$(electrode_SYSLIB) |' ../Makefile.package
fi
if (test -e ../Makefile.package.settings) then
sed -i -e '/^include.*electrode.*$/d' ../Makefile.package.settings
# multiline form needed for BSD sed on Macs
sed -i -e '4 i \
include ..\/..\/lib\/electrode\/Makefile.lammps
' ../Makefile.package.settings
fi
elif (test $1 = 0) then
if (test -e ../Makefile.package) then
sed -i -e 's/[^ \t]*electrode[^ \t]* //g' ../Makefile.package
fi
if (test -e ../Makefile.package.settings) then
sed -i -e '/^include.*electrode.*$/d' ../Makefile.package.settings
fi
fi

View File

@ -0,0 +1,91 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
https://www.lammps.org/, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing authors: Ludwig Ahrens-Iwers (TUHH), Shern Tee (UQ), Robert Meißner (TUHH)
------------------------------------------------------------------------- */
#include "boundary_correction.h"
#include "atom.h"
#include "comm.h"
#include "force.h"
using namespace LAMMPS_NS;
// use EW3DC slab correction
//
BoundaryCorrection::BoundaryCorrection(LAMMPS *lmp) : Pointers(lmp) {}
void BoundaryCorrection::setup(double x, double y, double z)
{
xprd_wire = x;
yprd_wire = y;
zprd_slab = z;
volume = x * y * z;
area = x * y;
qqrd2e = force->qqrd2e;
scale = 1.0;
}
void BoundaryCorrection::setup(double x, double y, double z, double g)
{
xprd_wire = x;
yprd_wire = y;
zprd_slab = z;
volume = x * y * z;
area = x * y;
qqrd2e = force->qqrd2e;
scale = 1.0;
g_ewald = g;
}
std::vector<int> BoundaryCorrection::gather_recvcounts(int n)
{
int const nprocs = comm->nprocs;
std::vector<int> recvcounts = std::vector<int>(nprocs);
MPI_Allgather(&n, 1, MPI_INT, &recvcounts.front(), 1, MPI_INT, world);
return recvcounts;
}
std::vector<int> BoundaryCorrection::gather_displs(const std::vector<int> &recvcounts)
{
int const nprocs = comm->nprocs;
std::vector<int> displs = std::vector<int>(nprocs);
displs[0] = 0;
for (int i = 1; i < nprocs; i++) displs[i] = displs[i - 1] + recvcounts[i - 1];
return displs;
}
std::vector<bigint> BoundaryCorrection::gather_jmat(bigint *imat)
{
int nlocal = atom->nlocal;
bigint ngroup = 0;
int ngrouplocal = 0;
for (int i = 0; i < nlocal; i++)
if (imat[i] > -1) ngrouplocal++;
MPI_Allreduce(&ngrouplocal, &ngroup, 1, MPI_INT, MPI_SUM, world);
std::vector<bigint> jmat_local = std::vector<bigint>(ngrouplocal);
for (int i = 0, n = 0; i < nlocal; i++) {
if (imat[i] < 0) continue;
jmat_local[n++] = imat[i];
}
// gather global matrix indexing
std::vector<bigint> jmat = std::vector<bigint>(ngroup);
std::vector<int> recvcounts = gather_recvcounts(ngrouplocal);
std::vector<int> displs = gather_displs(recvcounts);
MPI_Allgatherv(&jmat_local.front(), ngrouplocal, MPI_LMP_BIGINT, &jmat.front(),
&recvcounts.front(), &displs.front(), MPI_LMP_BIGINT, world);
return jmat;
}

View File

@ -0,0 +1,49 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
https://www.lammps.org/, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing authors: Ludwig Ahrens-Iwers (TUHH), Shern Tee (UQ), Robert Meißner (TUHH)
------------------------------------------------------------------------- */
#ifndef LMP_BOUNDARY_CORRECTION_H
#define LMP_BOUNDARY_CORRECTION_H
#include "pointers.h"
namespace LAMMPS_NS {
class BoundaryCorrection : protected Pointers {
public:
BoundaryCorrection(LAMMPS *);
virtual void vector_corr(double *, int, int, bool){};
virtual void matrix_corr(bigint *, double **){};
virtual void compute_corr(double, int, int, double &, double *){};
void setup(double, double, double);
void setup(double, double, double, double);
protected:
double area;
double volume;
double xprd_wire;
double yprd_wire;
double zprd_slab;
double qqrd2e;
double scale;
double g_ewald;
std::vector<bigint> gather_jmat(bigint *);
std::vector<int> gather_recvcounts(int);
std::vector<int> gather_displs(const std::vector<int> &);
};
} // namespace LAMMPS_NS
#endif

View File

@ -0,0 +1,33 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
https://www.lammps.org/, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing authors: Ludwig Ahrens-Iwers (TUHH), Shern Tee (UQ), Robert Meißner (TUHH)
------------------------------------------------------------------------- */
#ifndef LMP_ELECTRODE_ACCEL_INTERFACE_H
#define LMP_ELECTRODE_ACCEL_INTERFACE_H
#include "pointers.h"
namespace LAMMPS_NS {
class ElectrodeAccelInterface : protected Pointers {
public:
ElectrodeAccelInterface(class LAMMPS *lmp) : Pointers(lmp) {}
virtual void intel_find_fix() {}
virtual void intel_pack_buffers() {}
};
} // namespace LAMMPS_NS
#endif

View File

@ -0,0 +1,33 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
https://www.lammps.org/, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing authors: Ludwig Ahrens-Iwers (TUHH), Shern Tee (UQ), Robert Meißner (TUHH)
------------------------------------------------------------------------- */
#ifndef LMP_ELECTRODE_KSPACE_H
#define LMP_ELECTRODE_KSPACE_H
#include "lmptype.h"
namespace LAMMPS_NS {
class ElectrodeKSpace {
public:
virtual void compute_vector(double *, int, int, bool) = 0;
virtual void compute_vector_corr(double *, int, int, bool) = 0;
virtual void compute_matrix(bigint *, double **, bool) = 0;
virtual void compute_matrix_corr(bigint *, double **) = 0;
};
} // namespace LAMMPS_NS
#endif

View File

@ -0,0 +1,58 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
https://www.lammps.org/, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing authors: Ludwig Ahrens-Iwers (TUHH), Shern Tee (UQ), Robert Meißner (TUHH)
------------------------------------------------------------------------- */
#ifndef LMP_ELECTRODE_MATH_H
#define LMP_ELECTRODE_MATH_H
#include "math_const.h"
namespace LAMMPS_NS {
namespace ElectrodeMath {
static constexpr double EWALD_P = 0.3275911;
static constexpr double A1 = 0.254829592;
static constexpr double A2 = -0.284496736;
static constexpr double A3 = 1.421413741;
static constexpr double A4 = -1.453152027;
static constexpr double A5 = 1.061405429;
static constexpr double ERFCMAX = 5.8; // erfc(ERFCMAX) < machine epsilon(double)
static double safe_erfc(double x)
{
if (x > ERFCMAX) return 0.;
double expm2 = exp(-x * x);
double t = 1.0 / (1.0 + EWALD_P * x);
return t * (A1 + t * (A2 + t * (A3 + t * (A4 + t * A5)))) * expm2;
}
static double safe_derfcr(double x, double &erfc)
{
if (x > ERFCMAX) {
erfc = 0.;
return 0.;
}
double x2 = x * x;
double expm2 = exp(-x2);
double t = 1.0 / (1.0 + EWALD_P * x);
erfc = t * (A1 + t * (A2 + t * (A3 + t * (A4 + t * A5)))) * expm2;
return -erfc - 2 * expm2 * x / MathConst::MY_PIS;
}
} // namespace ElectrodeMath
} // namespace LAMMPS_NS
#endif

View File

@ -0,0 +1,205 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
https://www.lammps.org/, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing authors: Ludwig Ahrens-Iwers (TUHH), Shern Tee (UQ), Robert Meißner (TUHH)
------------------------------------------------------------------------- */
#include "electrode_matrix.h"
#include "atom.h"
#include "comm.h"
#include "electrode_kspace.h"
#include "electrode_math.h"
#include "error.h"
#include "force.h"
#include "group.h"
#include "kspace.h"
#include "math_const.h"
#include "neigh_list.h"
#include "pair.h"
using namespace LAMMPS_NS;
using namespace MathConst;
/* ---------------------------------------------------------------------- */
ElectrodeMatrix::ElectrodeMatrix(LAMMPS *lmp, int electrode_group, double eta) : Pointers(lmp)
{
igroup = electrode_group; // group of all electrode atoms
groupbit = group->bitmask[igroup];
ngroup = group->count(igroup);
this->eta = eta;
tfflag = false;
}
/* ---------------------------------------------------------------------- */
void ElectrodeMatrix::setup(const std::unordered_map<tagint, int> &tag_ids, class Pair *fix_pair,
class NeighList *fix_neighlist)
{
pair = fix_pair;
cutsq = pair->cutsq;
list = fix_neighlist;
electrode_kspace = dynamic_cast<ElectrodeKSpace *>(force->kspace);
if (electrode_kspace == nullptr) error->all(FLERR, "KSpace does not implement ElectrodeKSpace");
g_ewald = force->kspace->g_ewald;
tag_to_iele = tag_ids;
}
/* ---------------------------------------------------------------------- */
void ElectrodeMatrix::setup_tf(const std::map<int, double> &tf_types)
{
tfflag = true;
this->tf_types = tf_types;
}
/* ---------------------------------------------------------------------- */
void ElectrodeMatrix::compute_array(double **array, bool timer_flag)
{
// setting all entries of coulomb matrix to zero
size_t nbytes = sizeof(double) * ngroup * ngroup;
if (nbytes) memset(&array[0][0], 0, nbytes);
MPI_Barrier(world);
double kspace_time = MPI_Wtime();
update_mpos();
electrode_kspace->compute_matrix(&mpos[0], array, timer_flag);
MPI_Barrier(world);
if (timer_flag && (comm->me == 0))
utils::logmesg(lmp, fmt::format("KSpace time: {:.4g} s\n", MPI_Wtime() - kspace_time));
pair_contribution(array);
self_contribution(array);
electrode_kspace->compute_matrix_corr(&mpos[0], array);
if (tfflag) tf_contribution(array);
// reduce coulomb matrix with contributions from all procs
// all procs need to know full matrix for matrix inversion
for (int i = 0; i < ngroup; i++) {
MPI_Allreduce(MPI_IN_PLACE, &array[i][0], ngroup, MPI_DOUBLE, MPI_SUM, world);
}
}
/* ---------------------------------------------------------------------- */
void ElectrodeMatrix::pair_contribution(double **array)
{
int inum, jnum, itype, jtype;
double xtmp, ytmp, ztmp, delx, dely, delz;
double r, rinv, rsq, aij;
int *ilist, *jlist, *numneigh, **firstneigh;
double **x = atom->x;
tagint *tag = atom->tag;
int *type = atom->type;
int *mask = atom->mask;
int nlocal = atom->nlocal;
int newton_pair = force->newton_pair;
double etaij = eta * eta / sqrt(2.0 * eta * eta); // see mw ewald theory eq. (29)-(30)
// neighbor list will be ready because called from post_neighbor
inum = list->inum;
ilist = list->ilist;
numneigh = list->numneigh;
firstneigh = list->firstneigh;
// loop over neighbors of my atoms
// skip if I,J are not in 2 groups
for (int ii = 0; ii < inum; ii++) {
int i = ilist[ii];
// skip if atom I is not in either group
if (!(mask[i] & groupbit)) continue;
bigint const ipos = mpos[i];
xtmp = x[i][0];
ytmp = x[i][1];
ztmp = x[i][2];
itype = type[i];
jlist = firstneigh[i];
jnum = numneigh[i];
// real-space part of matrix is symmetric
for (int jj = 0; jj < jnum; jj++) {
int j = jlist[jj];
j &= NEIGHMASK;
if (!(mask[j] & groupbit)) continue;
delx = xtmp - x[j][0]; // neighlists take care of pbc
dely = ytmp - x[j][1];
delz = ztmp - x[j][2];
rsq = delx * delx + dely * dely + delz * delz;
jtype = type[j];
if (rsq < cutsq[itype][jtype]) {
r = sqrt(rsq);
rinv = 1.0 / r;
aij = rinv;
aij *= ElectrodeMath::safe_erfc(g_ewald * r);
aij -= ElectrodeMath::safe_erfc(etaij * r) * rinv;
// newton on or off?
if (!(newton_pair || j < nlocal)) aij *= 0.5;
bigint jpos = tag_to_iele[tag[j]];
array[ipos][jpos] += aij;
array[jpos][ipos] += aij;
}
}
}
}
/* ---------------------------------------------------------------------- */
void ElectrodeMatrix::self_contribution(double **array)
{
int nlocal = atom->nlocal;
int *mask = atom->mask;
const double selfint = 2.0 / MY_PIS * g_ewald;
const double preta = MY_SQRT2 / MY_PIS;
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) { array[mpos[i]][mpos[i]] += preta * eta - selfint; }
}
/* ---------------------------------------------------------------------- */
void ElectrodeMatrix::tf_contribution(double **array)
{
int nlocal = atom->nlocal;
int *type = atom->type;
int *mask = atom->mask;
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) array[mpos[i]][mpos[i]] += tf_types[type[i]];
}
/* ---------------------------------------------------------------------- */
void ElectrodeMatrix::update_mpos()
{
int const nall = atom->nlocal + atom->nghost;
tagint *tag = atom->tag;
int *mask = atom->mask;
mpos = std::vector<bigint>(nall, -1);
for (int i = 0; i < nall; i++) {
if (mask[i] & groupbit)
mpos[i] = tag_to_iele[tag[i]];
else
mpos[i] = -1;
}
}

View File

@ -0,0 +1,58 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
https://www.lammps.org/, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing authors: Ludwig Ahrens-Iwers (TUHH), Shern Tee (UQ), Robert Meißner (TUHH)
------------------------------------------------------------------------- */
#ifndef LMP_ELECTRODE_MATRIX_H
#define LMP_ELECTRODE_MATRIX_H
#include "pointers.h"
#include <map>
#include <unordered_map>
namespace LAMMPS_NS {
class ElectrodeMatrix : protected Pointers {
public:
ElectrodeMatrix(class LAMMPS *, int, double);
void setup(const std::unordered_map<tagint, int> &, class Pair *, class NeighList *);
void setup_tf(const std::map<int, double> &);
void compute_array(double **, bool);
int igroup;
private:
int groupbit;
bigint ngroup;
double **cutsq;
double g_ewald, eta;
bool tfflag;
std::map<int, double> tf_types;
std::unordered_map<tagint, int> tag_to_iele;
bool assigned;
std::vector<bigint> mpos;
class Pair *pair;
class NeighList *list;
class ElectrodeKSpace *electrode_kspace;
void update_mpos();
void pair_contribution(double **);
void self_contribution(double **);
void tf_contribution(double **);
};
} // namespace LAMMPS_NS
#endif

View File

@ -0,0 +1,152 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
https://www.lammps.org/, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing authors: Ludwig Ahrens-Iwers (TUHH), Shern Tee (UQ), Robert Meißner (TUHH)
------------------------------------------------------------------------- */
#include "electrode_vector.h"
#include "atom.h"
#include "comm.h"
#include "electrode_kspace.h"
#include "electrode_math.h"
#include "error.h"
#include "force.h"
#include "group.h"
#include "kspace.h"
#include "neigh_list.h"
#include "pair.h"
using namespace LAMMPS_NS;
ElectrodeVector::ElectrodeVector(LAMMPS *lmp, int sensor_group, int source_group, double eta,
bool invert_source) :
Pointers(lmp)
{
igroup = sensor_group; // group of all atoms at which we calculate potential
this->source_group = source_group; // group of all atoms influencing potential
this->invert_source = invert_source;
groupbit = group->bitmask[igroup];
ngroup = group->count(igroup);
source_grpbit = group->bitmask[source_group];
this->eta = eta;
kspace_time_total = 0;
pair_time_total = 0;
boundary_time_total = 0;
b_time_total = 0;
}
/* ---------------------------------------------------------------------- */
ElectrodeVector::~ElectrodeVector()
{
if (timer_flag && (comm->me == 0)) {
utils::logmesg(lmp, fmt::format("B time: {:.4g} s\n", b_time_total));
utils::logmesg(lmp, fmt::format("B kspace time: {:.4g} s\n", kspace_time_total));
utils::logmesg(lmp, fmt::format("B pair time: {:.4g} s\n", pair_time_total));
utils::logmesg(lmp, fmt::format("B boundary time: {:.4g} s\n", boundary_time_total));
}
}
/* ---------------------------------------------------------------------- */
void ElectrodeVector::setup(class Pair *fix_pair, class NeighList *fix_neighlist, bool timer_flag)
{
pair = fix_pair;
cutsq = pair->cutsq;
list = fix_neighlist;
this->timer_flag = timer_flag;
electrode_kspace = dynamic_cast<ElectrodeKSpace *>(force->kspace);
if (electrode_kspace == nullptr) error->all(FLERR, "KSpace does not implement ElectrodeKSpace");
g_ewald = force->kspace->g_ewald;
}
/* ---------------------------------------------------------------------- */
void ElectrodeVector::compute_vector(double *vector)
{
MPI_Barrier(world);
double start_time = MPI_Wtime();
// pair
double pair_start_time = MPI_Wtime();
pair_contribution(vector);
MPI_Barrier(world);
pair_time_total += MPI_Wtime() - pair_start_time;
// kspace
double kspace_start_time = MPI_Wtime();
electrode_kspace->compute_vector(vector, groupbit, source_grpbit, invert_source);
MPI_Barrier(world);
kspace_time_total += MPI_Wtime() - kspace_start_time;
// boundary
double boundary_start_time = MPI_Wtime();
electrode_kspace->compute_vector_corr(vector, groupbit, source_grpbit, invert_source);
MPI_Barrier(world);
boundary_time_total += MPI_Wtime() - boundary_start_time;
b_time_total += MPI_Wtime() - start_time;
}
/* ---------------------------------------------------------------------- */
void ElectrodeVector::pair_contribution(double *vector)
{
double **x = atom->x;
double *q = atom->q;
int *type = atom->type;
int *mask = atom->mask;
// neighbor list will be ready because called from post_neighbor
int const nlocal = atom->nlocal;
int const inum = list->inum;
int *ilist = list->ilist;
int *numneigh = list->numneigh;
int **firstneigh = list->firstneigh;
int newton_pair = force->newton_pair;
for (int ii = 0; ii < inum; ii++) {
int const i = ilist[ii];
bool const i_in_sensor = (mask[i] & groupbit);
bool const i_in_source = !!(mask[i] & source_grpbit) != invert_source;
double const xtmp = x[i][0];
double const ytmp = x[i][1];
double const ztmp = x[i][2];
int itype = type[i];
int *jlist = firstneigh[i];
int jnum = numneigh[i];
for (int jj = 0; jj < jnum; jj++) {
int const j = jlist[jj] & NEIGHMASK;
bool const j_in_sensor = (mask[j] & groupbit);
bool const j_in_source = !!(mask[j] & source_grpbit) != invert_source;
bool const compute_ij = i_in_sensor && j_in_source;
bool const compute_ji = (newton_pair || j < nlocal) && (j_in_sensor && i_in_source);
if (!(compute_ij || compute_ji)) continue;
double const delx = xtmp - x[j][0]; // neighlists take care of pbc
double const dely = ytmp - x[j][1];
double const delz = ztmp - x[j][2];
double const rsq = delx * delx + dely * dely + delz * delz;
int jtype = type[j];
if (rsq >= cutsq[itype][jtype]) continue;
double const r = sqrt(rsq);
double const rinv = 1.0 / r;
double aij = rinv;
aij *= ElectrodeMath::safe_erfc(g_ewald * r);
aij -= ElectrodeMath::safe_erfc(eta * r) * rinv;
if (i_in_sensor) {
vector[i] += aij * q[j];
} else if (j_in_sensor) {
vector[j] += aij * q[i];
}
}
}
}

View File

@ -0,0 +1,55 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
https://www.lammps.org/, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing authors: Ludwig Ahrens-Iwers (TUHH), Shern Tee (UQ), Robert Meißner (TUHH)
------------------------------------------------------------------------- */
#ifndef LMP_ELECTRODE_VECTOR_H
#define LMP_ELECTRODE_VECTOR_H
#include "pointers.h"
namespace LAMMPS_NS {
class ElectrodeVector : protected Pointers {
public:
ElectrodeVector(class LAMMPS *, int, int, double, bool);
~ElectrodeVector() override;
void setup(class Pair *, class NeighList *, bool);
void compute_vector(double *);
int igroup, source_group;
private:
bool invert_source;
int groupbit, source_grpbit;
bigint ngroup;
double **cutsq;
double g_ewald, eta;
class Pair *pair;
class NeighList *list;
class ElectrodeKSpace *electrode_kspace;
void pair_contribution(double *);
double kspace_time_total;
double pair_time_total;
double boundary_time_total;
double b_time_total;
bool timer_flag;
};
} // namespace LAMMPS_NS
#endif

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,61 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
https://www.lammps.org/, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing authors: Ludwig Ahrens-Iwers (TUHH), Shern Tee (UQ), Robert Meißner (TUHH)
------------------------------------------------------------------------- */
#ifdef KSPACE_CLASS
// clang-format off
KSpaceStyle(ewald/electrode, EwaldElectrode);
// clang-format on
#else
#ifndef LMP_EWALD_ELECTRODE_H
#define LMP_EWALD_ELECTRODE_H
#include "electrode_kspace.h"
#include "ewald.h"
namespace LAMMPS_NS {
class EwaldElectrode : public Ewald, public ElectrodeKSpace {
public:
EwaldElectrode(class LAMMPS *);
~EwaldElectrode() override;
void init() override;
void setup() override;
void compute(int, int) override;
void compute_group_group(int, int, int) override;
// k-space part of coulomb matrix computation
void compute_vector(double *, int, int, bool) override;
void compute_vector_corr(double *, int, int, bool) override;
void compute_matrix(bigint *, double **, bool) override;
void compute_matrix_corr(bigint *, double **) override;
protected:
class BoundaryCorrection *boundcorr;
double area;
void coeffs() override;
void eik_dot_r() override;
private:
int eikr_step;
void update_eikr(bool);
};
} // namespace LAMMPS_NS
#endif
#endif

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,153 @@
/* -*- c++ -*- ----------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
https://www.lammps.org/, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing authors: Ludwig Ahrens-Iwers (TUHH), Shern Tee (UQ), Robert Meißner (TUHH)
------------------------------------------------------------------------- */
#ifdef FIX_CLASS
// clang-format off
FixStyle(electrode/conp, FixElectrodeConp);
// clang-format on
#else
#ifndef LMP_FIX_ELECTRODE_CONP_H
#define LMP_FIX_ELECTRODE_CONP_H
#include "electrode_accel_interface.h"
#include "fix.h"
#include <algorithm>
#include <map>
#include <unordered_map>
namespace LAMMPS_NS {
class FixElectrodeConp : public Fix {
public:
FixElectrodeConp(class LAMMPS *, int, char **);
~FixElectrodeConp() override;
int setmask() override;
void setup_pre_exchange() override;
void setup_post_neighbor() override;
void setup_pre_reverse(int, int) override;
void pre_force(int) override;
void pre_reverse(int, int) override;
double compute_scalar() override;
double compute_vector(int) override;
int modify_param(int, char **) override;
int modify_param(const std::string &);
void init() override;
void init_list(int, NeighList *) override;
void post_constructor() override; // used by ffield to set up fix efield
double memory_usage() override;
// atomvec-based tracking of electrode atoms
int pack_exchange(int, double *) override;
int unpack_exchange(int, double *) override;
int pack_reverse_comm(int, int, double *) override;
void unpack_reverse_comm(int, int *, double *) override;
protected:
virtual void update_psi();
virtual void pre_update(){};
virtual void compute_macro_matrices();
std::vector<double> group_psi;
std::vector<int> group_bits;
int num_of_groups;
bigint ngroup;
std::vector<std::vector<double>> sd_vectors;
std::vector<double> sb_charges;
std::vector<int> group_psi_var_ids, group_psi_var_styles;
std::vector<std::string> group_psi_var_names;
bool symm; // symmetrize elastance for charge neutrality
std::vector<std::vector<double>> macro_elastance; // used by conq
std::vector<std::vector<double>> macro_capacitance; // used by thermo
double thermo_temp, thermo_time; // used by electrode/thermo only
int thermo_init; // initializer for rng in electrode/thermo
bool ffield; // possibly tweak electrode/conq's version
std::string fixname; // used by electrode/ffield to set up internal efield
bool intelflag;
ElectrodeAccelInterface *accel_interface; // used by /intel
private:
FILE *f_inv, *f_mat, *f_vec; // files for capacitance, eleastance and vector
std::string input_file_inv, input_file_mat;
class ElectrodeMatrix *array_compute;
class ElectrodeVector *ele_vector;
std::vector<int> groups;
double **capacitance;
bool read_inv, read_mat;
double eta;
double update_time, mult_time;
void create_taglist();
void invert();
void symmetrize();
double gausscorr(int, bool);
void update_charges();
double potential_energy(int);
double self_energy(int);
void write_to_file(FILE *, const std::vector<tagint> &, const std::vector<std::vector<double>> &);
void read_from_file(std::string input_file, double **, const std::string &);
void compute_sd_vectors();
void compute_sd_vectors_ffield();
std::vector<int> setvars_types, setvars_groups, setvars_vars;
void update_setvars(int);
int groupnum_from_name(char *);
double evscale;
class Pair *pair;
class NeighList *mat_neighlist, *vec_neighlist;
std::vector<int> etypes;
int mat_request, vec_request;
void request_etypes_neighlists();
bool etypes_neighlists;
int get_top_group(); // used by ffield
int top_group; // used by ffield
bool tfflag;
bool timer_flag;
std::map<int, double> tf_types;
// fix-specific electrode ID storage system:
std::vector<tagint> taglist; // global list: all tags in combined electrode group
std::vector<tagint> taglist_bygroup; // taglist sorted by group
std::vector<tagint> group_idx; // permutation taglist<->taglist_bygroup
std::unordered_map<tagint, int> tag_to_iele; // inverse of taglist:
std::vector<int> iele_to_group;
// tag_to_iele[taglist[iele]] = iele
int nlocalele; // current no. of local electrode atoms
int nlocalele_outdated; // trigger rebuilding of following structures:
std::vector<int> list_iele; // electrode IDs owned by me
int *recvcounts, *displs; // for MPI-building of iele_gathered
int *iele_gathered; // MPIgathered list_iele: all electrode IDs, nproc-ordered
std::vector<double> buf_iele; // buffer for electrode properties ordered by list_iele
double *buf_gathered; // buffer for MPIgathered buf_iele (NOT YET iele-ordered)
double *potential_i; // potentials, i-indexed (0 for non-electrode atoms)
double *potential_iele; // potentials ordered by iele
double *charge_iele; // charges ordered by iele
void gather_list_iele(); // build iele_gathered
void gather_elevec(double *); // gather buf_iele and rearrange into iele-order
void buffer_and_gather(double *, double *); // buffer into buf_iele then gather and rearrange
int nmax;
};
} // namespace LAMMPS_NS
#endif
#endif

View File

@ -0,0 +1,60 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
https://www.lammps.org/, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing authors: Ludwig Ahrens-Iwers (TUHH), Shern Tee (UQ), Robert Meißner (TUHH)
------------------------------------------------------------------------- */
#include "fix_electrode_conq.h"
#include "error.h"
#include "fix_electrode_conp.h"
#include "input.h"
#include "variable.h"
using namespace LAMMPS_NS;
#define SMALL 0.00001
enum { CONST, EQUAL };
// 0 1 2 3 4
// fix fxupdate group1 electrode/conp pot1 eta couple group2 pot2
FixElectrodeConq::FixElectrodeConq(LAMMPS *lmp, int narg, char **arg) :
FixElectrodeConp(lmp, narg, arg)
{
// copy const-style values across because update_psi will change group_psi
group_q = group_psi;
if (symm) { error->all(FLERR, "Keyword symm on not allowed in electrode/conq"); }
}
void FixElectrodeConq::update_psi()
{
// don't need MPI_Barrier because always preceded by MPI_Allreduce
for (int g = 0; g < num_of_groups; g++) {
if (group_psi_var_styles[g] == CONST) continue;
group_q[g] = input->variable->compute_equal(group_psi_var_ids[g]);
}
std::vector<double> group_remainder_q(num_of_groups);
for (int g = 0; g < num_of_groups; g++) { group_remainder_q[g] = group_q[g] - sb_charges[g]; }
for (int g = 0; g < num_of_groups; g++) {
double vtmp = 0;
for (int h = 0; h < num_of_groups; h++) {
vtmp += macro_elastance[g][h] * group_remainder_q[h];
}
group_psi[g] = vtmp;
}
}

View File

@ -0,0 +1,45 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
https://www.lammps.org/, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing authors: Ludwig Ahrens-Iwers (TUHH), Shern Tee (UQ), Robert Meißner (TUHH)
------------------------------------------------------------------------- */
#ifdef FIX_CLASS
// clang-format off
FixStyle(electrode/conq, FixElectrodeConq);
// clang-format on
#else
#ifndef LMP_FIX_ELECTRODE_CONQ_H
#define LMP_FIX_ELECTRODE_CONQ_H
#include "fix_electrode_conp.h"
namespace LAMMPS_NS {
class FixElectrodeConq : public FixElectrodeConp {
public:
FixElectrodeConq(class LAMMPS *, int, char **);
void update_psi() override;
private:
std::vector<double> group_q;
};
} // namespace LAMMPS_NS
#endif
#endif

View File

@ -0,0 +1,109 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
https://www.lammps.org/, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing authors: Ludwig Ahrens-Iwers (TUHH), Shern Tee (UQ), Robert Meißner (TUHH)
------------------------------------------------------------------------- */
#include "fix_electrode_thermo.h"
#include "atom.h"
#include "error.h"
#include "fix_electrode_conp.h"
#include "force.h"
#include "input.h"
#include "random_mars.h"
#include "update.h"
#include "variable.h"
using namespace LAMMPS_NS;
#define NUM_GROUPS 2
#define SMALL 0.00001
enum { CONST, EQUAL };
// 0 1 2 3 4
// fix fxupdate group1 electrode/thermo pot1 eta couple group2 pot2
FixElectrodeThermo::FixElectrodeThermo(LAMMPS *lmp, int narg, char **arg) :
FixElectrodeConp(lmp, narg, arg)
{
if (num_of_groups != NUM_GROUPS)
error->all(FLERR, "Number of electrodes != two in electrode/thermo");
if (group_psi_var_styles[0] != group_psi_var_styles[1])
error->all(FLERR, "Potentials in electrode/thermo must have same style");
if (symm) error->all(FLERR, "Keyword symm on not allowed in electrode/thermo");
if (thermo_time < SMALL) error->all(FLERR, "Keyword temp not set or zero in electrode/thermo");
thermo_random = new RanMars(lmp, thermo_init);
if (group_psi_var_styles[0] == CONST) delta_psi_0 = group_psi[1] - group_psi[0];
}
void FixElectrodeThermo::compute_macro_matrices()
{
FixElectrodeConp::compute_macro_matrices();
vac_cap = (macro_capacitance[0][0] * macro_capacitance[1][1] -
macro_capacitance[0][1] * macro_capacitance[0][1]) /
(macro_capacitance[0][0] + macro_capacitance[1][1] + 2 * macro_capacitance[0][1]);
}
void FixElectrodeThermo::pre_update()
{
// total electrode charges after last step, required for update psi
int const nlocal = atom->nlocal;
int *mask = atom->mask;
double *q = atom->q;
for (int g = 0; g < NUM_GROUPS; g++) {
group_q_old[g] = 0.;
for (int i = 0; i < nlocal; i++) {
if (mask[i] & group_bits[g]) { group_q_old[g] += q[i]; }
}
}
MPI_Allreduce(MPI_IN_PLACE, &group_q_old, NUM_GROUPS, MPI_DOUBLE, MPI_SUM, world);
}
void FixElectrodeThermo::update_psi()
{
double const dt = update->dt;
// group_q_eff is charge that corresponds to potential after previous step
double group_q_eff[NUM_GROUPS] = {0., 0.};
for (int g = 0; g < NUM_GROUPS; g++) { group_q_eff[g] = group_q_old[g] - sb_charges[g]; }
double group_psi_old[NUM_GROUPS] = {0., 0.};
for (int g = 0; g < NUM_GROUPS; g++) {
double vtmp = 0;
for (int h = 0; h < NUM_GROUPS; h++) { vtmp += macro_elastance[g][h] * group_q_eff[h]; }
group_psi_old[g] = vtmp;
}
double const delta_psi = group_psi_old[1] - group_psi_old[0];
// target potential difference from input parameters
if (group_psi_var_styles[0] != CONST) {
delta_psi_0 = input->variable->compute_equal(group_psi_var_ids[1]) -
input->variable->compute_equal(group_psi_var_ids[0]);
}
double delta_charge = 0.5 * (group_q_old[1] - group_q_old[0]) -
vac_cap * (delta_psi - delta_psi_0) * (1. - exp(-dt / thermo_time));
delta_charge += sqrt((thermo_temp * vac_cap) * (1. - exp(-2. * dt / thermo_time))) *
thermo_random->gaussian();
double const group_remainder_q[NUM_GROUPS] = {-delta_charge - sb_charges[0],
delta_charge - sb_charges[1]};
for (int g = 0; g < NUM_GROUPS; g++) {
double vtmp = 0;
for (int h = 0; h < NUM_GROUPS; h++) { vtmp += macro_elastance[g][h] * group_remainder_q[h]; }
group_psi[g] = vtmp;
}
}

View File

@ -0,0 +1,51 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
https://www.lammps.org/, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing authors: Ludwig Ahrens-Iwers (TUHH), Shern Tee (UQ), Robert Meißner (TUHH)
------------------------------------------------------------------------- */
#ifdef FIX_CLASS
// clang-format off
FixStyle(electrode/thermo, FixElectrodeThermo);
// clang-format on
#else
#ifndef LMP_FIX_ELECTRODE_THERMO_H
#define LMP_FIX_ELECTRODE_THERMO_H
#include "fix_electrode_conp.h"
namespace LAMMPS_NS {
class FixElectrodeThermo : public FixElectrodeConp {
public:
FixElectrodeThermo(class LAMMPS *, int, char **);
void update_psi() override;
void pre_update() override;
protected:
private:
void compute_macro_matrices() override;
class RanMars *thermo_random;
double delta_psi_0;
double group_q_old[2];
double vac_cap;
};
} // namespace LAMMPS_NS
#endif
#endif

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,127 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
https://www.lammps.org/, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing authors: Ludwig Ahrens-Iwers (TUHH), Shern Tee (UQ), Robert Meißner (TUHH)
------------------------------------------------------------------------- */
#ifdef KSPACE_CLASS
// clang-format off
KSpaceStyle(pppm/electrode, PPPMElectrode);
// clang-format on
#else
#ifndef LMP_PPPM_ELECTRODE_H
#define LMP_PPPM_ELECTRODE_H
#include "electrode_kspace.h"
#include "pppm.h"
#if defined(FFT_FFTW3)
#define LMP_FFT_LIB "FFTW3"
#elif defined(FFT_MKL)
#define LMP_FFT_LIB "MKL FFT"
#elif defined(FFT_CUFFT)
#define LMP_FFT_LIB "cuFFT"
#else
#define LMP_FFT_LIB "KISS FFT"
#endif
#ifdef FFT_SINGLE
typedef float FFT_SCALAR;
#define LMP_FFT_PREC "single"
#define MPI_FFT_SCALAR MPI_FLOAT
#else
typedef double FFT_SCALAR;
#define LMP_FFT_PREC "double"
#define MPI_FFT_SCALAR MPI_DOUBLE
#endif
namespace LAMMPS_NS {
class PPPMElectrode : public PPPM, public ElectrodeKSpace {
public:
PPPMElectrode(class LAMMPS *);
~PPPMElectrode() override;
void init() override;
void setup() override;
void setup_grid() override;
void compute(int, int) override;
void compute_vector(double *, int, int, bool) override;
void compute_vector_corr(double *, int, int, bool) override;
void compute_matrix(bigint *, double **, bool) override;
void compute_matrix_corr(bigint *, double **) override;
void compute_group_group(int, int, int) override;
protected:
FFT_SCALAR ***electrolyte_density_brick;
FFT_SCALAR *electrolyte_density_fft;
class BoundaryCorrection *boundcorr;
void set_grid_global() override;
void set_grid_local() override;
void allocate() override;
void deallocate() override;
void allocate_peratom() override;
double compute_df_kspace() override;
double compute_qopt() override;
void compute_gf_ik() override;
void compute_gf_ad() override;
/* ----------------------------------------------------------------------
denominator for Hockney-Eastwood Green's function
of x,y,z = sin(kx*deltax/2), etc
inf n-1
S(n,k) = Sum W(k+pi*j)**2 = Sum b(l)*(z*z)**l
j=-inf l=0
= -(z*z)**n /(2n-1)! * (d/dx)**(2n-1) cot(x) at z = sin(x)
gf_b = denominator expansion coeffs
------------------------------------------------------------------------- */
inline double gf_denom(const double &x, const double &y, const double &z) const
{
double sx, sy, sz;
sz = sy = sx = 0.0;
for (int l = order - 1; l >= 0; l--) {
sx = gf_b[l] + sx * x;
sy = gf_b[l] + sy * y;
sz = gf_b[l] + sz * z;
}
double s = sx * sy * sz;
return s * s;
};
private:
int compute_step;
int last_source_grpbit;
bool last_invert_source;
void start_compute();
void make_rho_in_brick(int, FFT_SCALAR ***, bool);
void project_psi(double *, int);
void one_step_multiplication(bigint *, const std::vector<double> &, double **, double **,
int const, bool);
void two_step_multiplication(bigint *, const std::vector<double> &, double **, double **,
int const, bool);
bool compute_vector_called;
};
} // namespace LAMMPS_NS
#endif
#endif

167
src/ELECTRODE/slab_2d.cpp Normal file
View File

@ -0,0 +1,167 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
https://www.lammps.org/, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing authors: Ludwig Ahrens-Iwers (TUHH), Shern Tee (UQ), Robert Meißner (TUHH)
------------------------------------------------------------------------- */
#include "slab_2d.h"
#include "atom.h"
#include "comm.h"
#include "domain.h"
#include "math_const.h"
#include "memory.h"
using namespace LAMMPS_NS;
using namespace MathConst;
/* ----------------------------------------------------------------------
Slab-geometry correction term (k=0) of EW2D. See Hu, JCTC 10:12 (2014)
pp. 5254-5264 or metalwalls ewald and parallelization documentation.
------------------------------------------------------------------------- */
Slab2d::Slab2d(LAMMPS *lmp) : BoundaryCorrection(lmp){};
void Slab2d::compute_corr(double /*qsum*/, int eflag_atom, int eflag_global, double &energy,
double *eatom)
{
double *q = atom->q;
double **x = atom->x;
double **f = atom->f;
int nlocal = atom->nlocal;
bigint natoms = atom->natoms;
std::vector<double> z = std::vector<double>(nlocal);
for (int i = 0; i < nlocal; i++) z[i] = x[i][2];
std::vector<double> z_all = std::vector<double>(natoms);
std::vector<double> q_all = std::vector<double>(natoms);
std::vector<int> recvcounts = gather_recvcounts(nlocal);
std::vector<int> displs = gather_displs(recvcounts);
MPI_Allgatherv(q, nlocal, MPI_DOUBLE, &q_all.front(), &recvcounts.front(), &displs.front(),
MPI_DOUBLE, world);
MPI_Allgatherv(&z.front(), nlocal, MPI_DOUBLE, &z_all.front(), &recvcounts.front(),
&displs.front(), MPI_DOUBLE, world);
const double g_ewald_inv = 1.0 / g_ewald;
const double qscale = qqrd2e * scale;
const double ffact = qscale * MY_2PI / area;
const double efact = qscale * MY_PIS / area;
double e_keq0 = 0;
for (int i = 0; i < nlocal; i++) {
double pot_ij = 0.0;
for (bigint j = 0; j < natoms; j++) {
double const zij = z_all[j] - x[i][2];
double const g_zij = g_ewald * zij;
// coulomb potential; see eq. (4) in metalwalls parallelization doc
pot_ij += q_all[j] * (exp(-g_zij * g_zij) * g_ewald_inv + MY_PIS * zij * erf(g_zij));
f[i][2] -= ffact * q[i] * q_all[j] * erf(g_zij);
}
// per-atom energy; see eq. (20) in metalwalls ewald doc
if (eflag_atom) eatom[i] -= efact * q[i] * pot_ij; // TODO check if 0.5 factor
if (eflag_global) e_keq0 -= q[i] * pot_ij;
}
if (eflag_global) {
MPI_Allreduce(MPI_IN_PLACE, &e_keq0, 1, MPI_DOUBLE, MPI_SUM, world);
energy += efact * e_keq0;
}
}
void Slab2d::vector_corr(double *vec, int sensor_grpbit, int source_grpbit, bool invert_source)
{
int const nlocal = atom->nlocal;
double **x = atom->x;
double *q = atom->q;
int *mask = atom->mask;
std::vector<double> z_local; // z coordinates of electrolyte atoms
std::vector<double> q_local; // charges of electrolyte atoms
for (int i = 0; i < nlocal; i++) {
if (!!(mask[i] & source_grpbit) != invert_source) {
z_local.push_back(x[i][2]);
q_local.push_back(q[i]);
}
}
int n_electrolyte_local = z_local.size();
int n_electrolyte;
MPI_Allreduce(&n_electrolyte_local, &n_electrolyte, 1, MPI_INT, MPI_SUM, world);
std::vector<double> z_all = std::vector<double>(n_electrolyte);
std::vector<double> q_all = std::vector<double>(n_electrolyte);
std::vector<int> recvcounts = gather_recvcounts(n_electrolyte_local);
std::vector<int> displs = gather_displs(recvcounts);
MPI_Allgatherv(&z_local.front(), n_electrolyte_local, MPI_DOUBLE, &z_all.front(),
&recvcounts.front(), &displs.front(), MPI_DOUBLE, world);
MPI_Allgatherv(&q_local.front(), n_electrolyte_local, MPI_DOUBLE, &q_all.front(),
&recvcounts.front(), &displs.front(), MPI_DOUBLE, world);
double const prefac = 2 * MY_PIS / area;
for (int i = 0; i < nlocal; i++) {
if (!(mask[i] & sensor_grpbit)) continue;
double b = 0;
double zi = x[i][2];
for (size_t j = 0; j < z_all.size(); j++) {
double zij = z_all[j] - zi;
double gzij = g_ewald * zij;
double zfac = (gzij > 7)
? MY_PIS * zij
: exp(-(gzij * gzij)) / g_ewald + MY_PIS * zij * erf(gzij); // avoid exp underflow
b += q_all[j] * zfac;
}
vec[i] -= prefac * b;
}
}
void Slab2d::matrix_corr(bigint *imat, double **matrix)
{
int nlocal = atom->nlocal;
double **x = atom->x;
// how many local and total group atoms?
int ngrouplocal = 0;
for (int i = 0; i < nlocal; i++)
if (imat[i] > -1) ngrouplocal++;
bigint ngroup = 0;
MPI_Allreduce(&ngrouplocal, &ngroup, 1, MPI_INT, MPI_SUM, world);
// gather non-periodic positions of groups
std::vector<double> nprd_local = std::vector<double>(ngrouplocal);
for (int i = 0, n = 0; i < nlocal; i++) {
if (imat[i] < 0) continue;
nprd_local[n++] = x[i][2];
}
// gather subsets nprd positions
std::vector<int> recvcounts = gather_recvcounts(ngrouplocal);
std::vector<int> displs = gather_displs(recvcounts);
std::vector<double> nprd_all = std::vector<double>(ngroup);
MPI_Allgatherv(&nprd_local.front(), ngrouplocal, MPI_DOUBLE, &nprd_all.front(),
&recvcounts.front(), &displs.front(), MPI_DOUBLE, world);
const double g_ewald_inv = 1.0 / g_ewald;
const double g_ewald_sq = g_ewald * g_ewald;
const double prefac = 2.0 * MY_PIS / area;
std::vector<bigint> jmat = gather_jmat(imat);
for (int i = 0; i < nlocal; i++) {
if (imat[i] < 0) continue;
for (bigint j = 0; j < ngroup; j++) {
// matrix is symmetric
if (jmat[j] > imat[i]) continue;
double dij = nprd_all[j] - x[i][2];
double aij =
prefac * (exp(-dij * dij * g_ewald_sq) * g_ewald_inv + MY_PIS * dij * erf(dij * g_ewald));
matrix[imat[i]][jmat[j]] -= aij;
if (imat[i] != jmat[j]) matrix[jmat[j]][imat[i]] -= aij;
}
}
}

35
src/ELECTRODE/slab_2d.h Normal file
View File

@ -0,0 +1,35 @@
/* ----------------------------------------------------------------------
LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator
https://www.lammps.org/, Sandia National Laboratories
Steve Plimpton, sjplimp@sandia.gov
Copyright (2003) Sandia Corporation. Under the terms of Contract
DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains
certain rights in this software. This software is distributed under
the GNU General Public License.
See the README file in the top-level LAMMPS directory.
------------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
Contributing authors: Ludwig Ahrens-Iwers (TUHH), Shern Tee (UQ), Robert Meißner (TUHH)
------------------------------------------------------------------------- */
#ifndef LMP_SLAB_2D_H
#define LMP_SLAB_2D_H
#include "boundary_correction.h"
namespace LAMMPS_NS {
class Slab2d : public BoundaryCorrection {
public:
Slab2d(LAMMPS *);
void vector_corr(double *, int, int, bool) override;
void matrix_corr(bigint *, double **) override;
void compute_corr(double, int, int, double &, double *) override;
void setup(double);
};
} // namespace LAMMPS_NS
#endif

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