Merge branch 'lammps:develop' into fortran2_updates

This commit is contained in:
hammondkd
2022-12-04 23:40:53 -06:00
committed by GitHub
105 changed files with 11387 additions and 3986 deletions

View File

@ -69,9 +69,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:`electrode/conp (i) <fix_electrode>`
* :doc:`electrode/conq (i) <fix_electrode>`
* :doc:`electrode/thermo (i) <fix_electrode>`
* :doc:`electron/stopping <fix_electron_stopping>`
* :doc:`electron/stopping/fit <fix_electron_stopping>`
* :doc:`enforce2d (k) <fix_enforce2d>`

View File

@ -865,7 +865,7 @@ ELECTRODE package
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
**Authors:** The ELECTRODE package is written and maintained by Ludwig
Ahrens-Iwers (TUHH, Hamburg, Germany), Shern Tee (UQ, Brisbane, Australia) and
Robert Meissner (TUHH, Hamburg, Germany).
@ -878,7 +878,7 @@ This package has :ref:`specific installation instructions <electrode>` on the
**Supporting info:**
* :doc:`fix electrode/conp <fix_electrode_conp>`
* :doc:`fix electrode/conp <fix_electrode>`
----------

View File

@ -155,7 +155,7 @@ whether an extra library is needed to build and use the package:
- no
* - :ref:`ELECTRODE <PKG-ELECTRODE>`
- electrode charges to match potential
- :doc:`fix electrode/conp <fix_electrode_conp>`
- :doc:`fix electrode/conp <fix_electrode>`
- PACKAGES/electrode
- no
* - :ref:`EXTRA-COMPUTE <PKG-EXTRA-COMPUTE>`

View File

@ -216,9 +216,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:`electrode/conp <fix_electrode>` - impose electric potential
* :doc:`electrode/conq <fix_electrode>` - impose total electric charge
* :doc:`electrode/thermo <fix_electrode>` - 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

421
doc/src/fix_electrode.rst Normal file
View File

@ -0,0 +1,421 @@
.. 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
""""""
.. code-block:: LAMMPS
fix ID group-ID style args keyword value ...
* ID, group-ID are documented in :doc:`fix <fix>` command
* style = *electrode/conp* or *electrode/conq* or *electrode/thermo*
* args = arguments used by a particular style
.. parsed-literal::
*electrode/conp* args = potential eta
*electrode/conq* args = charge eta
*electrode/thermo* args = potential eta *temp* values
potential = electrode potential
charge = electrode charge
eta = reciprocal width of electrode charge smearing
*temp* values = T_v tau_v rng_v
T_v = temperature of thermo-potentiostat
tau_v = time constant of thermo-potentiostat
rng_v = integer used to initialize random number generator
* zero or more keyword/value pairs may be appended
* keyword = *algo* or *symm* or *couple* or *etypes* or *ffield* or *write_mat* or *write_inv* or *read_mat* or *read_inv*
.. parsed-literal::
*algo* values = *mat_inv* or *mat_cg* tol or *cg* tol
specify the algorithm used to compute the electrode charges
*symm* value = *on* or *off*
turn on/off charge neutrality constraint for the electrodes
*couple* values = group-ID val
group-ID = group of atoms treated as additional electrode
val = electric potential or charge on this electrode
*etypes* value = *on* or *off*
turn on/off type-based optimized neighbor lists (electrode and electrolyte types may not overlap)
*ffield* value = *on* or *off*
turn on/off finite-field implementation
*write_mat* value = filename
filename = file to which to write elastance matrix
*write_inv* value = filename
filename = file to which to write inverted matrix
*read_mat* value = filename
filename = file from which to read elastance matrix
*read_inv* value = filename
filename = file from which to read inverted matrix
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 algo cg 1e-5
fix fxconp bot electrode/thermo -1.0 1.805 temp 298 100 couple top 1.0
Description
"""""""""""
The *electrode* fixes implement the constant potential method (CPM)
(:ref:`Siepmann <Siepmann>`, :ref:`Reed <Reed3>`), and modern variants,
to accurately model electrified, conductive electrodes. This is
primarily useful for studying electrode-electrolyte interfaces,
especially at high potential differences or ionicities, with non-planar
electrodes such as nanostructures or nanopores, and to study dynamic
phenomena such as charging or discharging time scales or conductivity or
ionic diffusivities.
Each *electrode* fix allows users to set additional electrostatic
relationships between the specified groups which model useful
electrostatic configurations:
* *electrode/conp* sets potentials or potential differences between electrodes
* (resulting in changing electrode total charges)
* *electrode/conq* sets the total charge on each electrode
* (resulting in changing electrode potentials)
* *electrode/thermo* sets a thermopotentiostat
:ref:`(Deissenbeck)<Deissenbeck>` between two electrodes
* (resulting in changing charges and potentials with appropriate
average potential difference and thermal variance)
The first group-ID provided to each fix specifies the first electrode
group, and more group(s) are added using the *couple* keyword for each
additional group. While *electrode/thermo* only accepts two groups,
*electrode/conp* and *electrode/conq* accept any number of groups, up to
LAMMPS's internal restrictions (see Restrictions below). Electrode
groups must not overlap, i.e. the fix will issue an error if any
particle is detected to belong to at least two electrode groups.
CPM involves updating charges on groups of electrode particles, per time
step, so that the system's total energy is minimized with respect to
those charges. From basic electrostatics, this is equivalent to making
each group conductive, or imposing an equal electrostatic potential on
every particle in the same group (hence the name CPM). The charges are
usually modelled as a Gaussian distribution to make the charge-charge
interaction matrix invertible (:ref:`Gingrich <Gingrich>`). The keyword
*eta* specifies the distribution's width in units of inverse length.
.. versionadded:: TBD
Three algorithms are available to minimize the energy, varying in how
matrices are pre-calculated before a run to provide computational
speedup. These algorithms can be selected using the keyword *algo*:
* *algo mat_inv* pre-calculates the capacitance matrix and obtains the
charge configuration in one matrix-vector calculation per time step
* *algo mat_cg* pre-calculates the elastance matrix (inverse of
capacitance matrix) and obtains the charge configuration using a
conjugate gradient solver in multiple matrix-vector calculations per
time step
* *algo cg* does not perform any pre-calculation and obtains the charge
configuration using a conjugate gradient solver and multiple
calculations of the electric potential per time step.
For both *cg* methods, the command must specify the conjugate gradient
tolerance. *fix electrode/thermo* currently only supports the *mat_inv*
algorithm.
The keyword *symm* can be set *on* (or *off*) to turn on (or turn off)
the capacitance matrix constraint that sets total electrode charge to be
zero. This has slightly different effects for each *fix electrode*
variant. For *fix electrode/conp*, with *symm off*, the potentials
specified are absolute potentials, but the charge configurations
satisfying them may add up to an overall non-zero, varying charge for
the electrodes (and thus the simulation box). With *symm on*, the total
charge over all electrode groups is constrained to zero, and potential
differences rather than absolute potentials are the physically relevant
quantities.
For *fix electrode/conq*, with *symm off*, overall neutrality is
explicitly obeyed or violated by the user input (which is not
checked!). With *symm on*, overall neutrality is ensured by ignoring the
user-input charge for the last listed electrode (instead, its charge
will always be minus the total sum of all other electrode charges). For
*fix electrode/thermo*, overall neutrality is always automatically
imposed for any setting of *symm*, but *symm on* allows finite-field
mode (*ffield on*, described below) for faster simulations.
For all three fixes, any potential (or charge for *conq*) can be
specified as an equal-style variable prefixed with "v\_". For example,
the following code will ramp the potential difference between electrodes
from 0.0V to 2.0V over the course of the simulation:
.. code-block:: LAMMPS
fix fxconp bot electrode/conp 0.0 1.805 couple top v_v symm on
variable v equal ramp(0.0, 2.0)
Note that these fixes only parse their supplied variable name when
starting a run, and so these fixes will accept equal-style variables
defined *after* the fix definition, including variables dependent on the
fix's own output. This is useful, for example, in the fix's internal
finite-field commands (see below). For an advanced example of this see
the in.conq2 input file in the directory
``examples/PACKAGES/electrode/graph-il``.
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
For all versions of the fix, the keyword-value *ffield on* enables the
finite-field mode (:ref:`Dufils <Dufils>`, :ref:`Tee <Tee>`), which uses
an electric field across a periodic cell instead of non-periodic
boundary conditions to impose a potential difference between the two
electrodes bounding the cell. The fix (with name *fix-ID*) detects which
of the two electrodes is "on top" (has the larger maximum *z*-coordinate
among all particles). Assuming the first electrode group is on top, it
then issues the following commands internally:
.. code-block:: LAMMPS
variable fix-ID_ffield_zfield equal (f_fix-ID[2]-f_fix-ID[1])/lz
efield fix-ID_efield all efield 0.0 0.0 v_fix-ID_ffield_zfield
which implements the required electric field as the potential difference
divided by cell length. The internal commands use variable so that the
electric field will correctly vary with changing potentials in the
correct way (for example with equal-style potential difference or with
*fix electrode/conq*). This keyword requires two electrodes and will
issue an error with any other number of electrodes. This keyword
requires electroneutrality to be imposed (*symm on*) and will issue an
error otherwise.
.. versionchanged:: TBD
For all versions of the fix, the keyword-value *etypes on* enables
type-based optimized neighbor lists. With this feature enabled, LAMMPS
provides the fix with an occasional neighbor list restricted to
electrode-electrode interactions for calculating the electrode matrix,
and a perpetual neighbor list restricted to electrode-electrolyte
interactions for calculating the electrode potentials, using particle
types to list only desired interactions, and typically resulting in
5--10\% less computational time. Without this feature the fix will
simply use the active pair style's neighbor list. This feature cannot
be enabled if any electrode particle has the same type as any
electrolyte particle (which would be unusual in a typical simulation)
and the fix will issue an error in that case.
Restart, fix_modify, output, run start/stop, minimize info
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
This fix currently does not write any information to restart files.
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
----------
These fixes compute a global (extensive) scalar, a global (intensive)
vector, and a global array, which can be accessed by various
:doc:`output commands <Howto_output>`.
The global scalar outputs the energy added to the system by this fix,
which is the negative of the total charge on each electrode multiplied
by that electrode's potential.
The global vector outputs the potential on each electrode (and thus has
*N* entries if the fix manages *N* electrode groups), in :doc:`units
<units>` of electric field multiplied by distance (thus volts for *real*
and *metal* units). The electrode groups' ordering follows the order in
which they were input in the fix command using *couple*. The global
vector output is useful for *fix electrode/conq* and *fix
electrode/thermo*, where potential is dynamically updated based on
electrolyte configuration instead of being directly set.
The global array has *N* rows and *2N+1* columns, where the fix manages
*N* electrode groups managed by the fix. For the *I*-th row of the
array, the elements are:
* array[I][1] = total charge that group *I* would have had *if it were
at 0 V applied potential* * array[I][2 to *N* + 1] = the *N* entries
of the *I*-th row of the electrode capacitance matrix (definition
follows) * array[I][*N* + 2 to *2N* + 1] = the *N* entries of the
*I*-th row of the electrode elastance matrix (the inverse of the
electrode capacitance matrix)
The :math:`N \times N` electrode capacitance matrix, denoted :math:`\mathbf{C}`
in the following equation, summarizes how the total charge induced on each
electrode (:math:`\mathbf{Q}` as an *N*-vector) is related to the potential on
each electrode, :math:`\mathbf{V}`, and the charge-at-0V :math:`\mathbf{Q}_{0V}`
(which is influenced by the local electrolyte structure):
.. math::
\mathbf{Q} = \mathbf{Q}_{0V} + \mathbf{C} \cdot \mathbf{V}
The charge-at-0V, electrode capacitance and elastance matrices are internally
used to calculate the potentials required to induce the specified total
electrode charges in *fix electrode/conq* and *fix electrode/thermo*. With the
*symm on* option, the electrode capacitance matrix would be singular, and thus
its last row is replaced with *N* copies of its top-left entry
(:math:`\mathbf{C}_{11}`) for invertibility.
The global array output is mainly useful for quickly determining the 'vacuum
capacitance' of the system (capacitance with only electrodes, no electrolyte),
and can also be used for advanced simulations setting the potential as some
function of the charge-at-0V (such as the ``in.conq2`` example mentioned above).
Please cite :ref:`(Ahrens-Iwers2022) <Ahrens-Iwers2>` in any publication that
uses this implementation. Please cite also the publication on the combination
of the CPM with PPPM if you use *pppm/electrode* :ref:`(Ahrens-Iwers)
<Ahrens-Iwers>`.
----------
Restrictions
""""""""""""
For algorithms that use a matrix for the electrode-electrode
interactions, positions of electrode particles have to be immobilized at
all times.
With *ffield off* (i.e. the default), the box geometry is expected to be
*z*-non-periodic (i.e. *boundary p p f*), and this fix will issue an
error if the box is *z*-periodic. With *ffield on*, the box geometry is
expected to be *z*-periodic, and this fix will issue an error if the box
is *z*-non-periodic.
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).
The fix creates an additional group named *[fix-ID]_group* which is the
union of all electrode groups supplied to LAMMPS. This additional group
counts towards LAMMPS's limitation on the total number of groups
(currently 32), which may not allow scripts that use that many groups to
run with this fix.
The matrix-based algorithms (*algo mat_inv* and *algo mat_cg*) currently
store an interaction matrix (either elastance or capacitance) of *N* by
*N* doubles for each MPI process. This memory requirement may be
prohibitive for large electrode groups. The fix will issue a warning if
it expects to use more than 0.5 GiB of memory.
Default
"""""""
The default keyword-option settings are *algo mat_inv*, *symm off*,
*etypes off* and *ffield off*.
----------
.. 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).
.. _Deissenbeck:
**(Deissenbeck)** Deissenbeck *et al.*, Phys. Rev. Letters 126, 136803 (2021).
.. _Gingrich:
**(Gingrich)** Gingrich, `MSc thesis` <https://gingrich.chem.northwestern.edu/papers/ThesiswCorrections.pdf>` (2010).
.. _Ahrens-Iwers:
**(Ahrens-Iwers)** Ahrens-Iwers and Meissner, J. Chem. Phys. 155, 104104 (2021).
.. _Hu:
**(Hu)** Hu, J. Chem. Theory Comput. 10, 5254 (2014).
.. _Dufils:
**(Dufils)** Dufils *et al.*, Phys. Rev. Letters 123, 195501 (2019).
.. _Tee:
**(Tee)** Tee and Searles, J. Chem. Phys. 156, 184101 (2022).
.. _Scalfi:
**(Scalfi)** Scalfi *et al.*, J. Chem. Phys., 153, 174704 (2020).
.. _Ahrens-Iwers2:
**(Ahrens-Iwers2022)** Ahrens-Iwers *et al.*, J. Chem. Phys. 157, 084801 (2022).

View File

@ -1,230 +0,0 @@
.. 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 style args keyword value ...
* ID, group-ID are documented in :doc:`fix <fix>` command
* style = *electrode/conp* or *electrode/conq* or *electrode/thermo*
* args = arguments used by a particular style
.. parsed-literal::
*electrode/conp* args = potential eta
*electrode/conq* args = charge eta
*electrode/thermo* args = potential eta *temp* values
potential = electrode potential
charge = electrode charge
eta = reciprocal width of electrode charge smearing
*temp* values = T_v tau_v rng_v
T_v = temperature of thermo-potentiostat
tau_v = time constant of thermo-potentiostat
rng_v = integer used to initialize random number generator
* zero or more keyword/value pairs may be appended
* keyword = *symm* or *couple* or *etypes* or *ffield* or *write_mat* or *write_inv* or *read_mat* or *read_inv*
.. parsed-literal::
*symm* value = *on* or *off*
turn on/off charge neutrality constraint for the electrodes
*couple* values = group-ID val
group-ID = group of atoms treated as additional electrode
val = electric potential or charge on this electrode
*etypes* values = type
type = atom type (can be a range) exclusive to the electrode for optimized neighbor lists
*ffield* value = *on* or *off*
turn on/off finite-field implementation
*write_mat* value = filename
filename = file to which to write elastance matrix
*write_inv* value = filename
filename = file to which to write inverted matrix
*read_mat* value = filename
filename = file from which to read elastance matrix
*read_inv* value = filename
filename = file from which to read inverted matrix
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

@ -283,7 +283,7 @@ 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
method implemented in :doc:`fix electrode/* <fix_electrode>`. The styles
*ewald/electrode*, *pppm/electrode* and *pppm/electrode/intel* are available.
These styles do not support the `kspace_modify slab nozforce` command.

View File

@ -738,6 +738,7 @@ diel
Dietz
differentiable
diffusively
diffusivities
diffusivity
dihedral
dihedrals
@ -819,6 +820,7 @@ du
dU
Ducastelle
Dudarev
Dufils
Duin
Dullweber
dumpfile
@ -906,6 +908,7 @@ elastance
Electroneg
electronegative
electronegativity
electroneutrality
Eleftheriou
ElementN
elementset
@ -1510,6 +1513,9 @@ inumeric
inv
invariants
inversed
invertible
invertibility
ionicities
ionizable
ionocovalent
iostreams
@ -2277,6 +2283,8 @@ nanometer
nanometers
nanoparticle
nanoparticles
nanopores
nanostructures
nanotube
Nanotube
nanotubes
@ -3155,6 +3163,7 @@ sdpd
SDPD
se
seagreen
Searles
Secor
sectoring
sed
@ -3470,6 +3479,7 @@ thermo
thermochemical
thermochemistry
thermodynamically
thermopotentiostat
Thermophysical
thermostatted
thermostatting

View File

@ -1,14 +1,14 @@
These examples demonstrate the use of the ELECTRODE package for constant potential molecular dynamics.
planar/
au-vac.data -- gold electrodes with vacuum
data.au-vac -- 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)
data.graph-il -- 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
@ -18,10 +18,22 @@ graph-il/
in.thermo -- thermalize electrolyte with thermopotentiostat instead of NVT
au-aq/
au-aq.data -- gold electrodes with electrolyte (SPC water + NaCl)
data.au-aq -- 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
madelung/
data.au-elyt -- tiny electrodes with two electrolyte atoms in between
settings.mod -- common settings
in.* -- setup KSpace and fix electrode/conp
plate_cap.py -- compute reference energy and charges from Madelung style sum
eval.py -- compare output of reference and Lammps job (used by test.sh)
test.sh -- run all in.* files and check charge at 1 V and %difference from theoretical (last column)
piston/
data.piston -- two electrodes with water
in.piston -- equilibrate distance between rigid electrodes
# future work:
# in.cylinder -- comparison of carbon nanotube to theoretical induced charge for charge near circular conductor

View File

@ -4,7 +4,7 @@
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 conp bot electrode/conp -1.0 1.805132 couple top 1.0 symm on ffield yes etypes on
thermo 50
thermo_style custom step temp c_ctemp epair etotal c_qtop c_qbot c_qztop c_qzbot

View File

@ -6,7 +6,7 @@
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 conp bot electrode/conp -1.0 1.805132 couple top 1.0 symm on ffield yes etypes on
fix_modify conp tf 6 1.0 18.1715745
fix_modify conp tf 7 1.0 18.1715745

View File

@ -1,4 +1,4 @@
LAMMPS (24 Mar 2022)
LAMMPS (3 Nov 2022)
# electrodes with constant potential using finite field
# for z-periodic gold-saline electrochemical cell
@ -37,8 +37,8 @@ Finding 1-2 1-3 1-4 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
special bonds CPU = 0.006 seconds
read_data CPU = 0.097 seconds
group bot type 6
1620 atoms in group bot
@ -52,11 +52,12 @@ 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
Finding SHAKE clusters ...
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
find clusters CPU = 0.006 seconds
variable q atom q
variable qz atom q*(z-lz/2)
@ -67,12 +68,41 @@ 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
fix conp bot electrode/conp -1.0 1.805132 couple top 1.0 symm on ffield yes etypes on
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
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
Your simulation uses code contributions which should be cited:
- kspace_style pppm/electrode command:
@article{Ahrens2021,
author = {Ahrens-Iwers, Ludwig J.V. and Mei{\ss}ner, Robert H.},
doi = {10.1063/5.0063381},
title = {{Constant potential simulations on a mesh}},
journal = {Journal of Chemical Physics},
year = {2021}
volume = {155},
pages = {104104},
}
- fix electrode command:
@article{Ahrens2022
author = {Ahrens-Iwers, Ludwig J.V. and Janssen, Mahijs and Tee, Shern R. and Mei{\ss}ner, Robert H.},
doi = {10.1063/5.0099239},
title = {{ELECTRODE: An electrochemistry package for LAMMPS}},
journal = {The Journal of Chemical Physics},
year = {2022}
volume = {157},
pages = {084801},
}
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
PPPM/electrode initialization ...
using 12-bit tables for long-range coulomb (src/kspace.cpp:342)
G vector (1/distance) = 0.24017705
@ -82,9 +112,9 @@ PPPM/electrode initialization ...
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
Generated 21 of 21 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update every 1 steps, delay 10 steps, check yes
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 17
ghost atom cutoff = 17
@ -105,35 +135,35 @@ Neighbor list info ...
pair build: skip
stencil: none
bin: none
Per MPI rank memory allocation (min/avg/max) = 194.6 | 194.6 | 194.6 Mbytes
Per MPI rank memory allocation (min/avg/max) = 194.8 | 194.8 | 194.8 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
0 171.61215 298.06731 -39021.917 -35115.261 4.1391573 -4.1391573 78.718381 131.56372
50 147.03139 255.37383 -39679.603 -36332.515 4.1312167 -4.1312167 78.563872 131.30255
100 149.89027 260.33932 -39693.369 -36281.2 4.0217834 -4.0217834 76.482548 127.82573
150 151.7382 263.54893 -39686.526 -36232.29 4.0469977 -4.0469977 76.967548 128.59855
200 151.7508 263.57081 -39634.089 -36179.566 4.1830375 -4.1830375 79.554159 132.93925
250 152.61146 265.06566 -39598.341 -36124.226 4.1835865 -4.1835865 79.56665 132.97185
300 153.51486 266.63475 -39560.107 -36065.426 4.1571861 -4.1571861 79.06143 132.12905
350 156.35115 271.561 -39554.338 -35995.09 4.3498059 -4.3498059 82.720202 138.28678
400 156.26118 271.40474 -39490.412 -35933.213 4.344408 -4.344408 82.619398 138.11874
450 158.54163 275.36557 -39487.28 -35878.167 4.2020489 -4.2020489 79.912677 133.55186
500 161.40137 280.33257 -39485.763 -35811.55 4.3021927 -4.3021927 81.807532 136.74641
Loop time of 146.959 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
Performance: 0.294 ns/day, 81.644 hours/ns, 3.402 timesteps/s, 33.336 katom-step/s
100.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 | 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
Pair | 69.832 | 69.832 | 69.832 | 0.0 | 47.52
Bond | 0.00091634 | 0.00091634 | 0.00091634 | 0.0 | 0.00
Kspace | 33.817 | 33.817 | 33.817 | 0.0 | 23.01
Neigh | 4.2067 | 4.2067 | 4.2067 | 0.0 | 2.86
Comm | 0.12212 | 0.12212 | 0.12212 | 0.0 | 0.08
Output | 0.0031896 | 0.0031896 | 0.0031896 | 0.0 | 0.00
Modify | 38.92 | 38.92 | 38.92 | 0.0 | 26.48
Other | | 0.05687 | | | 0.04
Nlocal: 9798 ave 9798 max 9798 min
Histogram: 1 0 0 0 0 0 0 0 0 0
@ -147,4 +177,4 @@ Ave neighs/atom = 842.63544
Ave special neighs/atom = 1.3227189
Neighbor list builds = 22
Dangerous builds = 0
Total wall time: 0:19:39
Total wall time: 0:05:33

View File

@ -1,4 +1,4 @@
LAMMPS (24 Mar 2022)
LAMMPS (3 Nov 2022)
# electrodes with constant potential using finite field
# for z-periodic gold-saline electrochemical cell
@ -39,7 +39,7 @@ Finding 1-2 1-3 1-4 neighbors ...
1 = max # of 1-4 neighbors
2 = max # of special neighbors
special bonds CPU = 0.002 seconds
read_data CPU = 0.149 seconds
read_data CPU = 0.118 seconds
group bot type 6
1620 atoms in group bot
@ -53,11 +53,12 @@ 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
Finding SHAKE clusters ...
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
find clusters CPU = 0.002 seconds
variable q atom q
variable qz atom q*(z-lz/2)
@ -68,12 +69,41 @@ 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
fix conp bot electrode/conp -1.0 1.805132 couple top 1.0 symm on ffield yes etypes on
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
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
Your simulation uses code contributions which should be cited:
- kspace_style pppm/electrode command:
@article{Ahrens2021,
author = {Ahrens-Iwers, Ludwig J.V. and Mei{\ss}ner, Robert H.},
doi = {10.1063/5.0063381},
title = {{Constant potential simulations on a mesh}},
journal = {Journal of Chemical Physics},
year = {2021}
volume = {155},
pages = {104104},
}
- fix electrode command:
@article{Ahrens2022
author = {Ahrens-Iwers, Ludwig J.V. and Janssen, Mahijs and Tee, Shern R. and Mei{\ss}ner, Robert H.},
doi = {10.1063/5.0099239},
title = {{ELECTRODE: An electrochemistry package for LAMMPS}},
journal = {The Journal of Chemical Physics},
year = {2022}
volume = {157},
pages = {084801},
}
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
PPPM/electrode initialization ...
using 12-bit tables for long-range coulomb (src/kspace.cpp:342)
G vector (1/distance) = 0.24017705
@ -83,9 +113,9 @@ PPPM/electrode initialization ...
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
Generated 21 of 21 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update every 1 steps, delay 10 steps, check yes
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 17
ghost atom cutoff = 17
@ -106,35 +136,35 @@ Neighbor list info ...
pair build: skip
stencil: none
bin: none
Per MPI rank memory allocation (min/avg/max) = 118.1 | 120.6 | 123.1 Mbytes
Per MPI rank memory allocation (min/avg/max) = 118.2 | 120.7 | 123.2 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
0 171.61215 298.06731 -39021.917 -35115.261 4.1391573 -4.1391573 78.718381 131.56372
50 147.03139 255.37383 -39679.603 -36332.515 4.1312167 -4.1312167 78.563872 131.30255
100 149.89027 260.33932 -39693.369 -36281.2 4.0217834 -4.0217834 76.482548 127.82573
150 151.7382 263.54893 -39686.526 -36232.29 4.0469977 -4.0469977 76.967548 128.59855
200 151.7508 263.57081 -39634.089 -36179.566 4.1830375 -4.1830375 79.554159 132.93925
250 152.61146 265.06566 -39598.341 -36124.226 4.1835864 -4.1835864 79.56665 132.97185
300 153.51486 266.63475 -39560.107 -36065.426 4.1571861 -4.1571861 79.06143 132.12905
350 156.35115 271.561 -39554.338 -35995.09 4.3498059 -4.3498059 82.720201 138.28678
400 156.26118 271.40474 -39490.412 -35933.213 4.3444079 -4.3444079 82.619397 138.11873
450 158.54163 275.36558 -39487.279 -35878.167 4.202049 -4.202049 79.912678 133.55186
500 161.40137 280.33256 -39485.763 -35811.55 4.3021925 -4.3021925 81.807529 136.7464
Loop time of 97.2399 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
Performance: 0.444 ns/day, 54.022 hours/ns, 5.142 timesteps/s, 50.381 katom-step/s
87.0% 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
Pair | 19.363 | 28.08 | 37.126 | 160.3 | 28.88
Bond | 0.00094043 | 0.00096516 | 0.00098016 | 0.0 | 0.00
Kspace | 31.655 | 40.554 | 49.143 | 131.3 | 41.71
Neigh | 2.2289 | 2.2294 | 2.2297 | 0.0 | 2.29
Comm | 0.5341 | 0.54079 | 0.5478 | 0.9 | 0.56
Output | 0.0024141 | 0.0026943 | 0.0034176 | 0.8 | 0.00
Modify | 25.6 | 25.755 | 25.908 | 2.8 | 26.49
Other | | 0.07733 | | | 0.08
Nlocal: 2449.5 ave 2908 max 2012 min
Histogram: 2 0 0 0 0 0 0 0 0 2
@ -148,4 +178,4 @@ Ave neighs/atom = 842.63544
Ave special neighs/atom = 1.3227189
Neighbor list builds = 22
Dangerous builds = 0
Total wall time: 0:07:48
Total wall time: 0:03:03

View File

@ -1,4 +1,4 @@
LAMMPS (24 Mar 2022)
LAMMPS (3 Nov 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
@ -39,8 +39,8 @@ Finding 1-2 1-3 1-4 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
special bonds CPU = 0.003 seconds
read_data CPU = 0.065 seconds
group bot type 6
1620 atoms in group bot
@ -54,11 +54,12 @@ 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
Finding SHAKE clusters ...
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
find clusters CPU = 0.002 seconds
variable q atom q
variable qz atom q*(z-lz/2)
@ -69,7 +70,7 @@ 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
fix conp bot electrode/conp -1.0 1.805132 couple top 1.0 symm on ffield yes etypes on
3240 atoms in group conp_group
fix_modify conp tf 6 1.0 18.1715745
fix_modify conp tf 7 1.0 18.1715745
@ -77,6 +78,35 @@ 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
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
Your simulation uses code contributions which should be cited:
- kspace_style pppm/electrode command:
@article{Ahrens2021,
author = {Ahrens-Iwers, Ludwig J.V. and Mei{\ss}ner, Robert H.},
doi = {10.1063/5.0063381},
title = {{Constant potential simulations on a mesh}},
journal = {Journal of Chemical Physics},
year = {2021}
volume = {155},
pages = {104104},
}
- fix electrode command:
@article{Ahrens2022
author = {Ahrens-Iwers, Ludwig J.V. and Janssen, Mahijs and Tee, Shern R. and Mei{\ss}ner, Robert H.},
doi = {10.1063/5.0099239},
title = {{ELECTRODE: An electrochemistry package for LAMMPS}},
journal = {The Journal of Chemical Physics},
year = {2022}
volume = {157},
pages = {084801},
}
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
PPPM/electrode initialization ...
using 12-bit tables for long-range coulomb (src/kspace.cpp:342)
G vector (1/distance) = 0.24017705
@ -86,9 +116,9 @@ PPPM/electrode initialization ...
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
Generated 21 of 21 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update every 1 steps, delay 10 steps, check yes
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 17
ghost atom cutoff = 17
@ -109,35 +139,35 @@ Neighbor list info ...
pair build: skip
stencil: none
bin: none
Per MPI rank memory allocation (min/avg/max) = 194.6 | 194.6 | 194.6 Mbytes
Per MPI rank memory allocation (min/avg/max) = 194.8 | 194.8 | 194.8 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
0 171.61215 298.06731 -39001.911 -35095.255 4.0804484 -4.0804484 79.075127 131.20697
50 147.14308 255.56782 -39665.525 -36315.894 3.9990346 -3.9990346 77.497181 128.57759
100 149.94935 260.44194 -39679.441 -36265.927 3.8613914 -3.8613914 74.82985 124.15315
150 151.95924 263.93285 -39677.184 -36217.916 3.8677064 -3.8677064 74.957279 124.33201
200 151.66737 263.42591 -39618.173 -36165.549 3.99842 -3.99842 77.491015 128.54496
250 152.36874 264.64408 -39579.164 -36110.574 3.9925863 -3.9925863 77.379445 128.37226
300 153.83916 267.19802 -39554.899 -36052.836 3.94995 -3.94995 76.553896 127.00395
350 155.88897 270.75827 -39535.02 -35986.294 4.0598524 -4.0598524 78.679643 130.5394
400 156.51993 271.85415 -39484.219 -35921.13 4.1312898 -4.1312898 80.060368 132.83598
450 160.21339 278.26919 -39517.776 -35870.607 3.9068098 -3.9068098 75.713484 125.59216
500 161.63639 280.74075 -39488.333 -35808.771 3.9261656 -3.9261656 76.080599 126.22255
Loop time of 185.804 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
Performance: 0.233 ns/day, 103.225 hours/ns, 2.691 timesteps/s, 26.366 katom-step/s
100.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 | 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
Pair | 91 | 91 | 91 | 0.0 | 48.98
Bond | 0.0010315 | 0.0010315 | 0.0010315 | 0.0 | 0.00
Kspace | 40.32 | 40.32 | 40.32 | 0.0 | 21.70
Neigh | 5.6505 | 5.6505 | 5.6505 | 0.0 | 3.04
Comm | 0.15304 | 0.15304 | 0.15304 | 0.0 | 0.08
Output | 0.0041829 | 0.0041829 | 0.0041829 | 0.0 | 0.00
Modify | 48.607 | 48.607 | 48.607 | 0.0 | 26.16
Other | | 0.06807 | | | 0.04
Nlocal: 9798 ave 9798 max 9798 min
Histogram: 1 0 0 0 0 0 0 0 0 0
@ -151,4 +181,4 @@ Ave neighs/atom = 842.7079
Ave special neighs/atom = 1.3227189
Neighbor list builds = 23
Dangerous builds = 0
Total wall time: 0:21:11
Total wall time: 0:06:18

View File

@ -1,4 +1,4 @@
LAMMPS (24 Mar 2022)
LAMMPS (3 Nov 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
@ -41,7 +41,7 @@ Finding 1-2 1-3 1-4 neighbors ...
1 = max # of 1-4 neighbors
2 = max # of special neighbors
special bonds CPU = 0.002 seconds
read_data CPU = 0.091 seconds
read_data CPU = 0.114 seconds
group bot type 6
1620 atoms in group bot
@ -55,11 +55,12 @@ 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
Finding SHAKE clusters ...
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
find clusters CPU = 0.002 seconds
variable q atom q
variable qz atom q*(z-lz/2)
@ -70,7 +71,7 @@ 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
fix conp bot electrode/conp -1.0 1.805132 couple top 1.0 symm on ffield yes etypes on
3240 atoms in group conp_group
fix_modify conp tf 6 1.0 18.1715745
fix_modify conp tf 7 1.0 18.1715745
@ -78,6 +79,35 @@ 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
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
Your simulation uses code contributions which should be cited:
- kspace_style pppm/electrode command:
@article{Ahrens2021,
author = {Ahrens-Iwers, Ludwig J.V. and Mei{\ss}ner, Robert H.},
doi = {10.1063/5.0063381},
title = {{Constant potential simulations on a mesh}},
journal = {Journal of Chemical Physics},
year = {2021}
volume = {155},
pages = {104104},
}
- fix electrode command:
@article{Ahrens2022
author = {Ahrens-Iwers, Ludwig J.V. and Janssen, Mahijs and Tee, Shern R. and Mei{\ss}ner, Robert H.},
doi = {10.1063/5.0099239},
title = {{ELECTRODE: An electrochemistry package for LAMMPS}},
journal = {The Journal of Chemical Physics},
year = {2022}
volume = {157},
pages = {084801},
}
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
PPPM/electrode initialization ...
using 12-bit tables for long-range coulomb (src/kspace.cpp:342)
G vector (1/distance) = 0.24017705
@ -87,9 +117,9 @@ PPPM/electrode initialization ...
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
Generated 21 of 21 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update every 1 steps, delay 10 steps, check yes
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 17
ghost atom cutoff = 17
@ -110,35 +140,35 @@ Neighbor list info ...
pair build: skip
stencil: none
bin: none
Per MPI rank memory allocation (min/avg/max) = 118.1 | 120.6 | 123.1 Mbytes
Per MPI rank memory allocation (min/avg/max) = 118.2 | 120.7 | 123.2 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
0 171.61215 298.06731 -39001.911 -35095.255 4.0804484 -4.0804484 79.075127 131.20697
50 147.14308 255.56782 -39665.525 -36315.894 3.9990346 -3.9990346 77.497181 128.57759
100 149.94935 260.44194 -39679.441 -36265.927 3.8613914 -3.8613914 74.82985 124.15315
150 151.95924 263.93285 -39677.184 -36217.916 3.8677064 -3.8677064 74.957279 124.33201
200 151.66737 263.42591 -39618.173 -36165.549 3.99842 -3.99842 77.491015 128.54496
250 152.36874 264.64408 -39579.163 -36110.574 3.9925863 -3.9925863 77.379445 128.37226
300 153.83916 267.19802 -39554.899 -36052.835 3.94995 -3.94995 76.553896 127.00395
350 155.88897 270.75826 -39535.02 -35986.294 4.0598523 -4.0598523 78.679642 130.5394
400 156.51993 271.85415 -39484.219 -35921.13 4.1312897 -4.1312897 80.060366 132.83598
450 160.21339 278.26919 -39517.776 -35870.607 3.9068099 -3.9068099 75.713486 125.59216
500 161.63639 280.74075 -39488.333 -35808.771 3.9261657 -3.9261657 76.080602 126.22256
Loop time of 104.099 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
Performance: 0.415 ns/day, 57.833 hours/ns, 4.803 timesteps/s, 47.061 katom-step/s
87.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 | 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
Pair | 20.951 | 30.326 | 40.07 | 166.7 | 29.13
Bond | 0.00098259 | 0.0010706 | 0.0011926 | 0.3 | 0.00
Kspace | 33.465 | 43.037 | 52.268 | 137.5 | 41.34
Neigh | 2.6007 | 2.6014 | 2.6021 | 0.0 | 2.50
Comm | 0.57766 | 0.58318 | 0.58875 | 0.7 | 0.56
Output | 0.0022277 | 0.0024765 | 0.0031841 | 0.8 | 0.00
Modify | 27.292 | 27.47 | 27.647 | 3.1 | 26.39
Other | | 0.0787 | | | 0.08
Nlocal: 2449.5 ave 2908 max 2017 min
Histogram: 2 0 0 0 0 0 0 0 0 2
@ -147,9 +177,9 @@ 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
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:08:22
Total wall time: 0:03:12

View File

@ -1 +1,2 @@
log.lammps*
in.temp

View File

@ -0,0 +1,28 @@
#!/bin/bash
LMP_BIN="$1"
NP="${2:-1}"
echo "MPI over $NP procs:"
for feat in conp etypes tf
do
echo "Using base input file in.$feat:"
echo "mat_inv, log excerpts:"
logfile="log.algo_test.$NP.$feat"
mpirun -np $NP $LMP_BIN -i in.$feat -l $logfile > /dev/null 2>&1
grep -A2 'Per MPI rank' $logfile
grep -B1 'Loop time' $logfile
rm $logfile
for cgtype in mat_cg cg
do
for tol in 1e-4 1e-5 1e-6
do
echo "$cgtype, tol = $tol, log excerpts:"
logfile="log.algo_test.$NP.$feat.$cgtype.$tol"
sed '/electrode/ s/$/ algo '"$cgtype"' '"$tol"'/' in.$feat > in.temp
mpirun -np $NP $LMP_BIN -i in.temp -l $logfile > /dev/null 2>&1
grep -A2 'Per MPI rank' $logfile
grep -B1 'Loop time' $logfile
rm $logfile
done
done
done

File diff suppressed because it is too large Load Diff

View File

@ -3,9 +3,9 @@
boundary p p f # slab calculation
include settings.mod # styles, groups, computes and fixes
kspace_modify slab 3.0
kspace_modify slab 3.0 # amat twostep
fix conp bot electrode/conp -1.0 1.979 couple top 1.0 symm on
fix conp bot electrode/conp -1.0 1.979 couple top 1.0 symm on #algo mat_inv
thermo 50
thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop

View File

@ -5,14 +5,10 @@ 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
fix conq bot electrode/conq -1.0 1.979 couple top 1.0 etypes on # symm on
variable dv equal f_conq[2]-f_conq[1]
# symm on and off give different electrode potentials, but identical potential difference
thermo 50
thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop v_vbot v_vtop
thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop f_conq[1] f_conq[2] v_dv
run 500

View File

@ -5,30 +5,16 @@ 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
fix conp bot electrode/conp v_vbot 1.979 couple top v_vtop etypes on
# 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
variable qex_bot equal -1.0-f_conp[1][1] # difference between desired and 0V charge
variable qex_top equal 1.0-f_conp[2][1] # 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
# which is why we can define variable names *after* fix conp without error
variable vbot equal f_conp[1][4]*v_qex_bot+f_conp[1][5]*v_qex_top
variable vtop equal f_conp[2][4]*v_qex_bot+f_conp[2][5]*v_qex_top
thermo 50
thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop v_vbot v_vtop

View File

@ -5,7 +5,7 @@ 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
fix conp bot electrode/conp -1.0 1.979 couple top 1.0 symm on etypes on
thermo 50
thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop

View File

@ -4,7 +4,7 @@
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
fix conp bot electrode/conp -1.0 1.979 couple top 1.0 symm on etypes on ffield yes
thermo 50
thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop

View File

@ -6,7 +6,7 @@ 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
fix conp bot electrode/conp 0.0 1.979 couple top v_v symm on etypes on
thermo 50
thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop v_v

View File

@ -6,9 +6,9 @@ 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
fix conpthermo bot electrode/thermo -1.0 1.979 couple top 1.0 etypes on temp 500 100 7 symm on # 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 conp bot electrode/conp -1.0 1.979 couple top 1.0 etypes on symm on
fix nve electrolyte nve
# note ionic liquid does not reach 500K immediately

View File

@ -1,4 +1,4 @@
LAMMPS (24 Mar 2022)
LAMMPS (3 Nov 2022)
# electrodes with constant potential
# for graphene-ionic liquid supercapacitor
@ -37,13 +37,20 @@ Finding 1-2 1-3 1-4 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
special bonds CPU = 0.004 seconds
read_data CPU = 0.027 seconds
group bot molecule 641
416 atoms in group bot
group top molecule 642
# replicate 4 4 1 # test different sys sizes
variable zpos atom "z > 0"
group zpos variable zpos
1891 atoms in group zpos
group ele type 5
832 atoms in group ele
group top intersect ele zpos
416 atoms in group top
group bot subtract ele top
416 atoms in group bot
group bmi type 1 2 3
960 atoms in group bmi
@ -52,24 +59,54 @@ 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
Finding SHAKE clusters ...
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
find clusters CPU = 0.005 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
kspace_modify slab 3.0 # amat twostep
fix conp bot electrode/conp -1.0 1.979 couple top 1.0 symm on
fix conp bot electrode/conp -1.0 1.979 couple top 1.0 symm on #algo mat_inv
832 atoms in group conp_group
thermo 50
thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop
run 500
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
Your simulation uses code contributions which should be cited:
- kspace_style pppm/electrode command:
@article{Ahrens2021,
author = {Ahrens-Iwers, Ludwig J.V. and Mei{\ss}ner, Robert H.},
doi = {10.1063/5.0063381},
title = {{Constant potential simulations on a mesh}},
journal = {Journal of Chemical Physics},
year = {2021}
volume = {155},
pages = {104104},
}
- fix electrode command:
@article{Ahrens2022
author = {Ahrens-Iwers, Ludwig J.V. and Janssen, Mahijs and Tee, Shern R. and Mei{\ss}ner, Robert H.},
doi = {10.1063/5.0099239},
title = {{ELECTRODE: An electrochemistry package for LAMMPS}},
journal = {The Journal of Chemical Physics},
year = {2022}
volume = {157},
pages = {084801},
}
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
PPPM/electrode initialization ...
using 12-bit tables for long-range coulomb (src/kspace.cpp:342)
G vector (1/distance) = 0.20904498
@ -79,9 +116,9 @@ PPPM/electrode initialization ...
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
Generated 15 of 15 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update every 1 steps, delay 10 steps, check yes
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 18
ghost atom cutoff = 18
@ -97,35 +134,35 @@ Neighbor list info ...
pair build: copy
stencil: none
bin: none
Per MPI rank memory allocation (min/avg/max) = 57.15 | 57.15 | 57.15 Mbytes
Per MPI rank memory allocation (min/avg/max) = 57.19 | 57.19 | 57.19 Mbytes
Step Temp c_ctemp E_pair TotEng c_qbot c_qtop
0 0 0 25137191 25137191 0.0085142912 -0.0085142912
0 0 0 25137190 25137190 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
100 48.393682 174.34846 25136775 25137273 -0.009514517 0.009514517
150 70.421272 253.7075 25136657 25137382 -0.033017005 0.033017005
200 82.204844 296.16031 25136670 25137517 -0.063668175 0.063668175
250 87.54223 315.38937 25136762 25137663 -0.096776257 0.096776257
300 91.704746 330.38571 25136871 25137816 -0.1283784 0.1283784
350 100.36017 361.56871 25136941 25137975 -0.15649799 0.15649799
400 111.37575 401.25467 25136994 25138141 -0.18065435 0.18065435
450 121.79848 438.80476 25137052 25138307 -0.19979365 0.19979365
500 126.95916 457.39718 25137155 25138463 -0.21037535 0.21037535
Loop time of 91.5523 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
Performance: 0.472 ns/day, 50.862 hours/ns, 5.461 timesteps/s, 20.622 katom-step/s
100.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 | 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
Pair | 18.906 | 18.906 | 18.906 | 0.0 | 20.65
Bond | 0.0012922 | 0.0012922 | 0.0012922 | 0.0 | 0.00
Kspace | 34.476 | 34.476 | 34.476 | 0.0 | 37.66
Neigh | 0.26641 | 0.26641 | 0.26641 | 0.0 | 0.29
Comm | 0.069067 | 0.069067 | 0.069067 | 0.0 | 0.08
Output | 0.0021466 | 0.0021466 | 0.0021466 | 0.0 | 0.00
Modify | 37.805 | 37.805 | 37.805 | 0.0 | 41.29
Other | | 0.0271 | | | 0.03
Nlocal: 3776 ave 3776 max 3776 min
Histogram: 1 0 0 0 0 0 0 0 0 0
@ -139,4 +176,4 @@ Ave neighs/atom = 457.18432
Ave special neighs/atom = 0.50847458
Neighbor list builds = 7
Dangerous builds = 0
Total wall time: 0:03:10
Total wall time: 0:01:48

View File

@ -1,4 +1,4 @@
LAMMPS (24 Mar 2022)
LAMMPS (3 Nov 2022)
# electrodes with constant potential
# for graphene-ionic liquid supercapacitor
@ -38,13 +38,20 @@ Finding 1-2 1-3 1-4 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
special bonds CPU = 0.003 seconds
read_data CPU = 0.038 seconds
group bot molecule 641
416 atoms in group bot
group top molecule 642
# replicate 4 4 1 # test different sys sizes
variable zpos atom "z > 0"
group zpos variable zpos
1891 atoms in group zpos
group ele type 5
832 atoms in group ele
group top intersect ele zpos
416 atoms in group top
group bot subtract ele top
416 atoms in group bot
group bmi type 1 2 3
960 atoms in group bmi
@ -53,24 +60,54 @@ 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
Finding SHAKE clusters ...
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
find clusters CPU = 0.003 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
kspace_modify slab 3.0 # amat twostep
fix conp bot electrode/conp -1.0 1.979 couple top 1.0 symm on
fix conp bot electrode/conp -1.0 1.979 couple top 1.0 symm on #algo mat_inv
832 atoms in group conp_group
thermo 50
thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop
run 500
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
Your simulation uses code contributions which should be cited:
- kspace_style pppm/electrode command:
@article{Ahrens2021,
author = {Ahrens-Iwers, Ludwig J.V. and Mei{\ss}ner, Robert H.},
doi = {10.1063/5.0063381},
title = {{Constant potential simulations on a mesh}},
journal = {Journal of Chemical Physics},
year = {2021}
volume = {155},
pages = {104104},
}
- fix electrode command:
@article{Ahrens2022
author = {Ahrens-Iwers, Ludwig J.V. and Janssen, Mahijs and Tee, Shern R. and Mei{\ss}ner, Robert H.},
doi = {10.1063/5.0099239},
title = {{ELECTRODE: An electrochemistry package for LAMMPS}},
journal = {The Journal of Chemical Physics},
year = {2022}
volume = {157},
pages = {084801},
}
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
PPPM/electrode initialization ...
using 12-bit tables for long-range coulomb (src/kspace.cpp:342)
G vector (1/distance) = 0.20904498
@ -80,9 +117,9 @@ PPPM/electrode initialization ...
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
Generated 15 of 15 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update every 1 steps, delay 10 steps, check yes
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 18
ghost atom cutoff = 18
@ -98,35 +135,35 @@ Neighbor list info ...
pair build: copy
stencil: none
bin: none
Per MPI rank memory allocation (min/avg/max) = 23.13 | 26.96 | 30.79 Mbytes
Per MPI rank memory allocation (min/avg/max) = 23.16 | 26.99 | 30.82 Mbytes
Step Temp c_ctemp E_pair TotEng c_qbot c_qtop
0 0 0 25137191 25137191 0.0085142912 -0.0085142912
0 0 0 25137190 25137190 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
100 48.393682 174.34846 25136775 25137273 -0.009514517 0.009514517
150 70.421272 253.7075 25136657 25137382 -0.033017005 0.033017005
200 82.204844 296.16031 25136670 25137517 -0.063668175 0.063668175
250 87.54223 315.38937 25136762 25137663 -0.096776257 0.096776257
300 91.704746 330.38571 25136871 25137816 -0.1283784 0.1283784
350 100.36017 361.56871 25136941 25137975 -0.15649799 0.15649799
400 111.37575 401.25467 25136994 25138141 -0.18065435 0.18065435
450 121.79848 438.80476 25137052 25138307 -0.19979365 0.19979365
500 126.95916 457.39718 25137155 25138463 -0.21037535 0.21037535
Loop time of 49.6413 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
Performance: 0.870 ns/day, 27.578 hours/ns, 10.072 timesteps/s, 38.033 katom-step/s
76.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 | 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
Pair | 5.3666 | 5.4998 | 5.6946 | 5.4 | 11.08
Bond | 0.0011638 | 0.0012711 | 0.0014555 | 0.3 | 0.00
Kspace | 24.047 | 24.241 | 24.374 | 2.6 | 48.83
Neigh | 0.088235 | 0.088328 | 0.088432 | 0.0 | 0.18
Comm | 0.30907 | 0.31913 | 0.32916 | 1.7 | 0.64
Output | 0.0010669 | 0.0014463 | 0.0024232 | 1.5 | 0.00
Modify | 19.435 | 19.445 | 19.454 | 0.2 | 39.17
Other | | 0.04549 | | | 0.09
Nlocal: 944 ave 951 max 941 min
Histogram: 1 2 0 0 0 0 0 0 0 1
@ -140,4 +177,4 @@ Ave neighs/atom = 457.18432
Ave special neighs/atom = 0.50847458
Neighbor list builds = 7
Dangerous builds = 0
Total wall time: 0:01:11
Total wall time: 0:00:55

View File

@ -0,0 +1,186 @@
LAMMPS (3 Nov 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.002 seconds
read_data CPU = 0.023 seconds
# replicate 4 4 1 # test different sys sizes
variable zpos atom "z > 0"
group zpos variable zpos
1891 atoms in group zpos
group ele type 5
832 atoms in group ele
group top intersect ele zpos
416 atoms in group top
group bot subtract ele top
416 atoms in group bot
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
Finding SHAKE clusters ...
0 = # of size 2 clusters
0 = # of size 3 clusters
0 = # of size 4 clusters
320 = # of frozen angles
find clusters CPU = 0.002 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 on # symm on
832 atoms in group conp_group
variable dv equal f_conq[2]-f_conq[1]
# symm on and off give different electrode potentials, but identical potential difference
thermo 50
thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop f_conq[1] f_conq[2] v_dv
run 500
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
Your simulation uses code contributions which should be cited:
- kspace_style pppm/electrode command:
@article{Ahrens2021,
author = {Ahrens-Iwers, Ludwig J.V. and Mei{\ss}ner, Robert H.},
doi = {10.1063/5.0063381},
title = {{Constant potential simulations on a mesh}},
journal = {Journal of Chemical Physics},
year = {2021}
volume = {155},
pages = {104104},
}
- fix electrode command:
@article{Ahrens2022
author = {Ahrens-Iwers, Ludwig J.V. and Janssen, Mahijs and Tee, Shern R. and Mei{\ss}ner, Robert H.},
doi = {10.1063/5.0099239},
title = {{ELECTRODE: An electrochemistry package for LAMMPS}},
journal = {The Journal of Chemical Physics},
year = {2022}
volume = {157},
pages = {084801},
}
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
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 15 of 15 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 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) = 54.25 | 54.25 | 54.25 Mbytes
Step Temp c_ctemp E_pair TotEng c_qbot c_qtop f_conq[1] f_conq[2] v_dv
0 0 0 25137446 25137446 -1 1 -9.931852 10.097344 20.029196
50 20.206425 72.797911 25137263 25137472 -1 1 -9.4359366 9.5964514 19.032388
100 55.931663 201.50563 25136961 25137537 -1 1 -8.0440112 8.1861787 16.23019
150 81.389273 293.22204 25136818 25137656 -1 1 -6.1113109 6.2267114 12.338022
200 92.867946 334.57639 25136841 25137798 -1 1 -4.1857807 4.2740694 8.4598501
250 97.518304 351.33028 25136942 25137946 -1 1 -2.8383703 2.9101475 5.7485179
300 102.36577 368.79431 25137045 25138099 -1 1 -2.3831643 2.4461115 4.8292759
350 113.66597 409.50566 25137086 25138256 -1 1 -2.7083563 2.7457811 5.4541374
400 122.8443 442.57252 25137148 25138413 -1 1 -3.4311003 3.3941657 6.825266
450 128.63713 463.44243 25137235 25138560 -1 1 -4.132871 3.9852959 8.1181669
500 131.18361 472.61665 25137344 25138695 -1 1 -4.5104095 4.2567261 8.7671355
Loop time of 89.4461 on 1 procs for 500 steps with 3776 atoms
Performance: 0.483 ns/day, 49.692 hours/ns, 5.590 timesteps/s, 21.108 katom-step/s
100.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 | 19.404 | 19.404 | 19.404 | 0.0 | 21.69
Bond | 0.0014902 | 0.0014902 | 0.0014902 | 0.0 | 0.00
Kspace | 35.449 | 35.449 | 35.449 | 0.0 | 39.63
Neigh | 0.26499 | 0.26499 | 0.26499 | 0.0 | 0.30
Comm | 0.068497 | 0.068497 | 0.068497 | 0.0 | 0.08
Output | 0.0023974 | 0.0023974 | 0.0023974 | 0.0 | 0.00
Modify | 34.225 | 34.225 | 34.225 | 0.0 | 38.26
Other | | 0.03044 | | | 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:48

View File

@ -0,0 +1,187 @@
LAMMPS (3 Nov 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.002 seconds
read_data CPU = 0.034 seconds
# replicate 4 4 1 # test different sys sizes
variable zpos atom "z > 0"
group zpos variable zpos
1891 atoms in group zpos
group ele type 5
832 atoms in group ele
group top intersect ele zpos
416 atoms in group top
group bot subtract ele top
416 atoms in group bot
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
Finding SHAKE clusters ...
0 = # of size 2 clusters
0 = # of size 3 clusters
0 = # of size 4 clusters
320 = # of frozen angles
find clusters CPU = 0.002 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 on # symm on
832 atoms in group conp_group
variable dv equal f_conq[2]-f_conq[1]
# symm on and off give different electrode potentials, but identical potential difference
thermo 50
thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop f_conq[1] f_conq[2] v_dv
run 500
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
Your simulation uses code contributions which should be cited:
- kspace_style pppm/electrode command:
@article{Ahrens2021,
author = {Ahrens-Iwers, Ludwig J.V. and Mei{\ss}ner, Robert H.},
doi = {10.1063/5.0063381},
title = {{Constant potential simulations on a mesh}},
journal = {Journal of Chemical Physics},
year = {2021}
volume = {155},
pages = {104104},
}
- fix electrode command:
@article{Ahrens2022
author = {Ahrens-Iwers, Ludwig J.V. and Janssen, Mahijs and Tee, Shern R. and Mei{\ss}ner, Robert H.},
doi = {10.1063/5.0099239},
title = {{ELECTRODE: An electrochemistry package for LAMMPS}},
journal = {The Journal of Chemical Physics},
year = {2022}
volume = {157},
pages = {084801},
}
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
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 15 of 15 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 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) = 22.9 | 26.72 | 30.55 Mbytes
Step Temp c_ctemp E_pair TotEng c_qbot c_qtop f_conq[1] f_conq[2] v_dv
0 0 0 25137446 25137446 -1 1 -9.931852 10.097344 20.029196
50 20.206425 72.797911 25137263 25137472 -1 1 -9.4359366 9.5964514 19.032388
100 55.931663 201.50563 25136961 25137537 -1 1 -8.0440112 8.1861787 16.23019
150 81.389273 293.22204 25136818 25137656 -1 1 -6.1113109 6.2267114 12.338022
200 92.867946 334.57639 25136841 25137798 -1 1 -4.1857807 4.2740694 8.4598501
250 97.518304 351.33028 25136942 25137946 -1 1 -2.8383703 2.9101475 5.7485179
300 102.36577 368.79431 25137045 25138099 -1 1 -2.3831643 2.4461115 4.8292759
350 113.66597 409.50566 25137086 25138256 -1 1 -2.7083563 2.7457811 5.4541374
400 122.8443 442.57252 25137148 25138413 -1 1 -3.4311003 3.3941657 6.825266
450 128.63713 463.44243 25137235 25138560 -1 1 -4.132871 3.9852959 8.1181669
500 131.18361 472.61665 25137344 25138695 -1 1 -4.5104095 4.2567261 8.7671355
Loop time of 53.4299 on 4 procs for 500 steps with 3776 atoms
Performance: 0.809 ns/day, 29.683 hours/ns, 9.358 timesteps/s, 35.336 katom-step/s
74.0% 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.5806 | 5.8872 | 6.1547 | 8.8 | 11.02
Bond | 0.0011404 | 0.0012245 | 0.0012898 | 0.2 | 0.00
Kspace | 26.55 | 26.822 | 27.129 | 4.1 | 50.20
Neigh | 0.098647 | 0.099673 | 0.10083 | 0.3 | 0.19
Comm | 0.35493 | 0.37282 | 0.3909 | 2.1 | 0.70
Output | 0.0012274 | 0.001617 | 0.0026374 | 1.5 | 0.00
Modify | 20.172 | 20.188 | 20.203 | 0.3 | 37.78
Other | | 0.05647 | | | 0.11
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:59

View File

@ -0,0 +1,193 @@
LAMMPS (3 Nov 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.002 seconds
read_data CPU = 0.022 seconds
# replicate 4 4 1 # test different sys sizes
variable zpos atom "z > 0"
group zpos variable zpos
1891 atoms in group zpos
group ele type 5
832 atoms in group ele
group top intersect ele zpos
416 atoms in group top
group bot subtract ele top
416 atoms in group bot
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
Finding SHAKE clusters ...
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 on
832 atoms in group conp_group
variable qex_bot equal -1.0-f_conp[1][1] # difference between desired and 0V charge
variable qex_top equal 1.0-f_conp[2][1] # 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
# which is why we can define variable names *after* fix conp without error
variable vbot equal f_conp[1][4]*v_qex_bot+f_conp[1][5]*v_qex_top
variable vtop equal f_conp[2][4]*v_qex_bot+f_conp[2][5]*v_qex_top
thermo 50
thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop v_vbot v_vtop
run 500
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
Your simulation uses code contributions which should be cited:
- kspace_style pppm/electrode command:
@article{Ahrens2021,
author = {Ahrens-Iwers, Ludwig J.V. and Mei{\ss}ner, Robert H.},
doi = {10.1063/5.0063381},
title = {{Constant potential simulations on a mesh}},
journal = {Journal of Chemical Physics},
year = {2021}
volume = {155},
pages = {104104},
}
- fix electrode command:
@article{Ahrens2022
author = {Ahrens-Iwers, Ludwig J.V. and Janssen, Mahijs and Tee, Shern R. and Mei{\ss}ner, Robert H.},
doi = {10.1063/5.0099239},
title = {{ELECTRODE: An electrochemistry package for LAMMPS}},
journal = {The Journal of Chemical Physics},
year = {2022}
volume = {157},
pages = {084801},
}
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
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 15 of 15 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 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) = 54.25 | 54.25 | 54.25 Mbytes
Step Temp c_ctemp E_pair TotEng c_qbot c_qtop v_vbot v_vtop
0 0 0 25137446 25137446 -1 1 -9.931852 10.097344
50 20.206425 72.797911 25137263 25137472 -1 1 -9.4359366 9.5964514
100 55.931663 201.50563 25136961 25137537 -1 1 -8.0440112 8.1861787
150 81.389273 293.22204 25136818 25137656 -1 1 -6.1113109 6.2267114
200 92.867946 334.57639 25136841 25137798 -1 1 -4.1857807 4.2740694
250 97.518304 351.33028 25136942 25137946 -1 1 -2.8383703 2.9101475
300 102.36577 368.79431 25137045 25138099 -1 1 -2.3831643 2.4461115
350 113.66597 409.50566 25137086 25138256 -1 1 -2.7083563 2.7457811
400 122.8443 442.57252 25137148 25138413 -1 1 -3.4311003 3.3941657
450 128.63713 463.44243 25137235 25138560 -1 1 -4.132871 3.9852959
500 131.18361 472.61665 25137344 25138695 -1 1 -4.5104095 4.2567261
Loop time of 85.5691 on 1 procs for 500 steps with 3776 atoms
Performance: 0.505 ns/day, 47.538 hours/ns, 5.843 timesteps/s, 22.064 katom-step/s
100.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 | 18.558 | 18.558 | 18.558 | 0.0 | 21.69
Bond | 0.001404 | 0.001404 | 0.001404 | 0.0 | 0.00
Kspace | 33.78 | 33.78 | 33.78 | 0.0 | 39.48
Neigh | 0.27017 | 0.27017 | 0.27017 | 0.0 | 0.32
Comm | 0.067438 | 0.067438 | 0.067438 | 0.0 | 0.08
Output | 0.0026656 | 0.0026656 | 0.0026656 | 0.0 | 0.00
Modify | 32.86 | 32.86 | 32.86 | 0.0 | 38.40
Other | | 0.02916 | | | 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:42

View File

@ -0,0 +1,194 @@
LAMMPS (3 Nov 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.005 seconds
read_data CPU = 0.044 seconds
# replicate 4 4 1 # test different sys sizes
variable zpos atom "z > 0"
group zpos variable zpos
1891 atoms in group zpos
group ele type 5
832 atoms in group ele
group top intersect ele zpos
416 atoms in group top
group bot subtract ele top
416 atoms in group bot
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
Finding SHAKE clusters ...
0 = # of size 2 clusters
0 = # of size 3 clusters
0 = # of size 4 clusters
320 = # of frozen angles
find clusters CPU = 0.002 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 on
832 atoms in group conp_group
variable qex_bot equal -1.0-f_conp[1][1] # difference between desired and 0V charge
variable qex_top equal 1.0-f_conp[2][1] # 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
# which is why we can define variable names *after* fix conp without error
variable vbot equal f_conp[1][4]*v_qex_bot+f_conp[1][5]*v_qex_top
variable vtop equal f_conp[2][4]*v_qex_bot+f_conp[2][5]*v_qex_top
thermo 50
thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop v_vbot v_vtop
run 500
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
Your simulation uses code contributions which should be cited:
- kspace_style pppm/electrode command:
@article{Ahrens2021,
author = {Ahrens-Iwers, Ludwig J.V. and Mei{\ss}ner, Robert H.},
doi = {10.1063/5.0063381},
title = {{Constant potential simulations on a mesh}},
journal = {Journal of Chemical Physics},
year = {2021}
volume = {155},
pages = {104104},
}
- fix electrode command:
@article{Ahrens2022
author = {Ahrens-Iwers, Ludwig J.V. and Janssen, Mahijs and Tee, Shern R. and Mei{\ss}ner, Robert H.},
doi = {10.1063/5.0099239},
title = {{ELECTRODE: An electrochemistry package for LAMMPS}},
journal = {The Journal of Chemical Physics},
year = {2022}
volume = {157},
pages = {084801},
}
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
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 15 of 15 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 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) = 22.9 | 26.72 | 30.55 Mbytes
Step Temp c_ctemp E_pair TotEng c_qbot c_qtop v_vbot v_vtop
0 0 0 25137446 25137446 -1 1 -9.931852 10.097344
50 20.206425 72.797911 25137263 25137472 -1 1 -9.4359366 9.5964514
100 55.931663 201.50563 25136961 25137537 -1 1 -8.0440112 8.1861787
150 81.389273 293.22204 25136818 25137656 -1 1 -6.1113109 6.2267114
200 92.867946 334.57639 25136841 25137798 -1 1 -4.1857807 4.2740694
250 97.518304 351.33028 25136942 25137946 -1 1 -2.8383703 2.9101475
300 102.36577 368.79431 25137045 25138099 -1 1 -2.3831643 2.4461115
350 113.66597 409.50566 25137086 25138256 -1 1 -2.7083563 2.7457811
400 122.8443 442.57252 25137148 25138413 -1 1 -3.4311003 3.3941657
450 128.63713 463.44243 25137235 25138560 -1 1 -4.132871 3.9852959
500 131.18361 472.61665 25137344 25138695 -1 1 -4.5104095 4.2567261
Loop time of 54.0351 on 4 procs for 500 steps with 3776 atoms
Performance: 0.799 ns/day, 30.019 hours/ns, 9.253 timesteps/s, 34.940 katom-step/s
75.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 | 6.5878 | 6.8799 | 7.1455 | 8.0 | 12.73
Bond | 0.0011081 | 0.0014187 | 0.0018792 | 0.8 | 0.00
Kspace | 25.907 | 26.173 | 26.464 | 4.1 | 48.44
Neigh | 0.16417 | 0.16425 | 0.16438 | 0.0 | 0.30
Comm | 0.34948 | 0.36296 | 0.37524 | 1.9 | 0.67
Output | 0.0017398 | 0.0021707 | 0.0033966 | 1.5 | 0.00
Modify | 20.392 | 20.403 | 20.416 | 0.2 | 37.76
Other | | 0.04783 | | | 0.09
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:00

View File

@ -1,4 +1,4 @@
LAMMPS (24 Mar 2022)
LAMMPS (3 Nov 2022)
# electrodes with constant potential and smart neighborlists
# for graphene-ionic liquid supercapacitor
@ -37,13 +37,20 @@ Finding 1-2 1-3 1-4 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
special bonds CPU = 0.002 seconds
read_data CPU = 0.021 seconds
group bot molecule 641
416 atoms in group bot
group top molecule 642
# replicate 4 4 1 # test different sys sizes
variable zpos atom "z > 0"
group zpos variable zpos
1891 atoms in group zpos
group ele type 5
832 atoms in group ele
group top intersect ele zpos
416 atoms in group top
group bot subtract ele top
416 atoms in group bot
group bmi type 1 2 3
960 atoms in group bmi
@ -52,6 +59,7 @@ 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
Finding SHAKE clusters ...
0 = # of size 2 clusters
0 = # of size 3 clusters
0 = # of size 4 clusters
@ -64,12 +72,41 @@ 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
fix conp bot electrode/conp -1.0 1.979 couple top 1.0 symm on etypes on
832 atoms in group conp_group
thermo 50
thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop
run 500
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
Your simulation uses code contributions which should be cited:
- kspace_style pppm/electrode command:
@article{Ahrens2021,
author = {Ahrens-Iwers, Ludwig J.V. and Mei{\ss}ner, Robert H.},
doi = {10.1063/5.0063381},
title = {{Constant potential simulations on a mesh}},
journal = {Journal of Chemical Physics},
year = {2021}
volume = {155},
pages = {104104},
}
- fix electrode command:
@article{Ahrens2022
author = {Ahrens-Iwers, Ludwig J.V. and Janssen, Mahijs and Tee, Shern R. and Mei{\ss}ner, Robert H.},
doi = {10.1063/5.0099239},
title = {{ELECTRODE: An electrochemistry package for LAMMPS}},
journal = {The Journal of Chemical Physics},
year = {2022}
volume = {157},
pages = {084801},
}
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
PPPM/electrode initialization ...
using 12-bit tables for long-range coulomb (src/kspace.cpp:342)
G vector (1/distance) = 0.20904498
@ -79,9 +116,9 @@ PPPM/electrode initialization ...
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
Generated 15 of 15 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update every 1 steps, delay 10 steps, check yes
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 18
ghost atom cutoff = 18
@ -102,35 +139,35 @@ Neighbor list info ...
pair build: skip
stencil: none
bin: none
Per MPI rank memory allocation (min/avg/max) = 56.89 | 56.89 | 56.89 Mbytes
Per MPI rank memory allocation (min/avg/max) = 54.25 | 54.25 | 54.25 Mbytes
Step Temp c_ctemp E_pair TotEng c_qbot c_qtop
0 0 0 25137191 25137191 0.0085142912 -0.0085142912
0 0 0 25137190 25137190 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
100 48.393682 174.34846 25136775 25137273 -0.009514517 0.009514517
150 70.421272 253.7075 25136657 25137382 -0.033017005 0.033017005
200 82.204844 296.16031 25136670 25137517 -0.063668175 0.063668175
250 87.54223 315.38937 25136762 25137663 -0.096776257 0.096776257
300 91.704746 330.38571 25136871 25137816 -0.1283784 0.1283784
350 100.36017 361.56871 25136942 25137975 -0.15649799 0.15649799
400 111.37575 401.25467 25136994 25138141 -0.18065435 0.18065435
450 121.79848 438.80476 25137052 25138307 -0.19979365 0.19979365
500 126.95916 457.39718 25137155 25138463 -0.21037535 0.21037535
Loop time of 87.0709 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
Performance: 0.496 ns/day, 48.373 hours/ns, 5.742 timesteps/s, 21.683 katom-step/s
100.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 | 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
Pair | 18.617 | 18.617 | 18.617 | 0.0 | 21.38
Bond | 0.0014056 | 0.0014056 | 0.0014056 | 0.0 | 0.00
Kspace | 34.856 | 34.856 | 34.856 | 0.0 | 40.03
Neigh | 0.30015 | 0.30015 | 0.30015 | 0.0 | 0.34
Comm | 0.065303 | 0.065303 | 0.065303 | 0.0 | 0.08
Output | 0.0021663 | 0.0021663 | 0.0021663 | 0.0 | 0.00
Modify | 33.201 | 33.201 | 33.201 | 0.0 | 38.13
Other | | 0.0282 | | | 0.03
Nlocal: 3776 ave 3776 max 3776 min
Histogram: 1 0 0 0 0 0 0 0 0 0
@ -144,4 +181,4 @@ Ave neighs/atom = 457.18432
Ave special neighs/atom = 0.50847458
Neighbor list builds = 7
Dangerous builds = 0
Total wall time: 0:02:24
Total wall time: 0:01:43

View File

@ -1,4 +1,4 @@
LAMMPS (24 Mar 2022)
LAMMPS (3 Nov 2022)
# electrodes with constant potential and smart neighborlists
# for graphene-ionic liquid supercapacitor
@ -38,13 +38,20 @@ Finding 1-2 1-3 1-4 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
special bonds CPU = 0.004 seconds
read_data CPU = 0.047 seconds
group bot molecule 641
416 atoms in group bot
group top molecule 642
# replicate 4 4 1 # test different sys sizes
variable zpos atom "z > 0"
group zpos variable zpos
1891 atoms in group zpos
group ele type 5
832 atoms in group ele
group top intersect ele zpos
416 atoms in group top
group bot subtract ele top
416 atoms in group bot
group bmi type 1 2 3
960 atoms in group bmi
@ -53,11 +60,12 @@ 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
Finding SHAKE clusters ...
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
find clusters CPU = 0.005 seconds
variable q atom q
compute qtop top reduce sum v_q
@ -65,12 +73,41 @@ 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
fix conp bot electrode/conp -1.0 1.979 couple top 1.0 symm on etypes on
832 atoms in group conp_group
thermo 50
thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop
run 500
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
Your simulation uses code contributions which should be cited:
- kspace_style pppm/electrode command:
@article{Ahrens2021,
author = {Ahrens-Iwers, Ludwig J.V. and Mei{\ss}ner, Robert H.},
doi = {10.1063/5.0063381},
title = {{Constant potential simulations on a mesh}},
journal = {Journal of Chemical Physics},
year = {2021}
volume = {155},
pages = {104104},
}
- fix electrode command:
@article{Ahrens2022
author = {Ahrens-Iwers, Ludwig J.V. and Janssen, Mahijs and Tee, Shern R. and Mei{\ss}ner, Robert H.},
doi = {10.1063/5.0099239},
title = {{ELECTRODE: An electrochemistry package for LAMMPS}},
journal = {The Journal of Chemical Physics},
year = {2022}
volume = {157},
pages = {084801},
}
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
PPPM/electrode initialization ...
using 12-bit tables for long-range coulomb (src/kspace.cpp:342)
G vector (1/distance) = 0.20904498
@ -80,9 +117,9 @@ PPPM/electrode initialization ...
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
Generated 15 of 15 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update every 1 steps, delay 10 steps, check yes
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 18
ghost atom cutoff = 18
@ -103,35 +140,35 @@ Neighbor list info ...
pair build: skip
stencil: none
bin: none
Per MPI rank memory allocation (min/avg/max) = 23.63 | 27.46 | 31.29 Mbytes
Per MPI rank memory allocation (min/avg/max) = 22.9 | 26.72 | 30.55 Mbytes
Step Temp c_ctemp E_pair TotEng c_qbot c_qtop
0 0 0 25137191 25137191 0.0085142912 -0.0085142912
0 0 0 25137190 25137190 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
100 48.393682 174.34846 25136775 25137273 -0.009514517 0.009514517
150 70.421272 253.7075 25136657 25137382 -0.033017005 0.033017005
200 82.204844 296.16031 25136670 25137517 -0.063668175 0.063668175
250 87.54223 315.38937 25136762 25137663 -0.096776257 0.096776257
300 91.704746 330.38571 25136871 25137816 -0.1283784 0.1283784
350 100.36017 361.56871 25136942 25137975 -0.15649799 0.15649799
400 111.37575 401.25467 25136994 25138141 -0.18065435 0.18065435
450 121.79848 438.80476 25137052 25138307 -0.19979365 0.19979365
500 126.95916 457.39718 25137155 25138463 -0.21037535 0.21037535
Loop time of 48.4075 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
Performance: 0.892 ns/day, 26.893 hours/ns, 10.329 timesteps/s, 39.002 katom-step/s
75.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 | 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
Pair | 5.3095 | 5.5504 | 5.7923 | 8.2 | 11.47
Bond | 0.0011128 | 0.0012414 | 0.0014028 | 0.3 | 0.00
Kspace | 24.084 | 24.322 | 24.559 | 3.9 | 50.24
Neigh | 0.093557 | 0.09408 | 0.094377 | 0.1 | 0.19
Comm | 0.30394 | 0.31319 | 0.3225 | 1.6 | 0.65
Output | 0.0012719 | 0.0015908 | 0.0024592 | 1.3 | 0.00
Modify | 18.066 | 18.079 | 18.091 | 0.2 | 37.35
Other | | 0.04692 | | | 0.10
Nlocal: 944 ave 951 max 941 min
Histogram: 1 2 0 0 0 0 0 0 0 1
@ -145,4 +182,4 @@ Ave neighs/atom = 457.18432
Ave special neighs/atom = 0.50847458
Neighbor list builds = 7
Dangerous builds = 0
Total wall time: 0:00:56
Total wall time: 0:00:54

View File

@ -1,4 +1,4 @@
LAMMPS (24 Mar 2022)
LAMMPS (3 Nov 2022)
# electrodes with constant potential using finite field
# for z-periodic graphene-ionic liquid supercapacitor
@ -37,13 +37,20 @@ Finding 1-2 1-3 1-4 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
special bonds CPU = 0.002 seconds
read_data CPU = 0.021 seconds
group bot molecule 641
416 atoms in group bot
group top molecule 642
# replicate 4 4 1 # test different sys sizes
variable zpos atom "z > 0"
group zpos variable zpos
1891 atoms in group zpos
group ele type 5
832 atoms in group ele
group top intersect ele zpos
416 atoms in group top
group bot subtract ele top
416 atoms in group bot
group bmi type 1 2 3
960 atoms in group bmi
@ -52,6 +59,7 @@ 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
Finding SHAKE clusters ...
0 = # of size 2 clusters
0 = # of size 3 clusters
0 = # of size 4 clusters
@ -63,12 +71,41 @@ 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
fix conp bot electrode/conp -1.0 1.979 couple top 1.0 symm on etypes on 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
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
Your simulation uses code contributions which should be cited:
- kspace_style pppm/electrode command:
@article{Ahrens2021,
author = {Ahrens-Iwers, Ludwig J.V. and Mei{\ss}ner, Robert H.},
doi = {10.1063/5.0063381},
title = {{Constant potential simulations on a mesh}},
journal = {Journal of Chemical Physics},
year = {2021}
volume = {155},
pages = {104104},
}
- fix electrode command:
@article{Ahrens2022
author = {Ahrens-Iwers, Ludwig J.V. and Janssen, Mahijs and Tee, Shern R. and Mei{\ss}ner, Robert H.},
doi = {10.1063/5.0099239},
title = {{ELECTRODE: An electrochemistry package for LAMMPS}},
journal = {The Journal of Chemical Physics},
year = {2022}
volume = {157},
pages = {084801},
}
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
PPPM/electrode initialization ...
using 12-bit tables for long-range coulomb (src/kspace.cpp:342)
G vector (1/distance) = 0.20949995
@ -78,9 +115,9 @@ PPPM/electrode initialization ...
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
Generated 15 of 15 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update every 1 steps, delay 10 steps, check yes
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 18
ghost atom cutoff = 18
@ -101,35 +138,35 @@ Neighbor list info ...
pair build: skip
stencil: none
bin: none
Per MPI rank memory allocation (min/avg/max) = 49.5 | 49.5 | 49.5 Mbytes
Per MPI rank memory allocation (min/avg/max) = 46.1 | 46.1 | 46.1 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
0 0 0 25137186 25137186 0.0085209384 -0.0085209384
50 17.837642 64.263873 25137027 25137210 0.0045513522 -0.0045513522
100 48.393984 174.34955 25136771 25137270 -0.0097291786 0.0097291786
150 70.421823 253.70949 25136653 25137378 -0.033522793 0.033522793
200 82.205535 296.1628 25136667 25137513 -0.064555648 0.064555648
250 87.542843 315.39158 25136758 25137660 -0.098075546 0.098075546
300 91.705733 330.38927 25136868 25137812 -0.13006751 0.13006751
350 100.36128 361.5727 25136938 25137971 -0.15852814 0.15852814
400 111.37586 401.25505 25136990 25138137 -0.18297207 0.18297207
450 121.79814 438.80351 25137049 25138303 -0.2023394 0.2023394
500 126.95882 457.39597 25137151 25138459 -0.21305221 0.21305221
Loop time of 53.8411 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
Performance: 0.802 ns/day, 29.912 hours/ns, 9.287 timesteps/s, 35.066 katom-step/s
100.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 | 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
Pair | 19.843 | 19.843 | 19.843 | 0.0 | 36.85
Bond | 0.0016963 | 0.0016963 | 0.0016963 | 0.0 | 0.00
Kspace | 11.232 | 11.232 | 11.232 | 0.0 | 20.86
Neigh | 0.39189 | 0.39189 | 0.39189 | 0.0 | 0.73
Comm | 0.12348 | 0.12348 | 0.12348 | 0.0 | 0.23
Output | 0.0017904 | 0.0017904 | 0.0017904 | 0.0 | 0.00
Modify | 22.207 | 22.207 | 22.207 | 0.0 | 41.25
Other | | 0.04008 | | | 0.07
Nlocal: 3776 ave 3776 max 3776 min
Histogram: 1 0 0 0 0 0 0 0 0 0
@ -143,4 +180,4 @@ Ave neighs/atom = 493.56224
Ave special neighs/atom = 0.50847458
Neighbor list builds = 7
Dangerous builds = 0
Total wall time: 0:01:39
Total wall time: 0:01:10

View File

@ -1,4 +1,4 @@
LAMMPS (24 Mar 2022)
LAMMPS (3 Nov 2022)
# electrodes with constant potential using finite field
# for z-periodic graphene-ionic liquid supercapacitor
@ -38,13 +38,20 @@ Finding 1-2 1-3 1-4 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
special bonds CPU = 0.002 seconds
read_data CPU = 0.033 seconds
group bot molecule 641
416 atoms in group bot
group top molecule 642
# replicate 4 4 1 # test different sys sizes
variable zpos atom "z > 0"
group zpos variable zpos
1891 atoms in group zpos
group ele type 5
832 atoms in group ele
group top intersect ele zpos
416 atoms in group top
group bot subtract ele top
416 atoms in group bot
group bmi type 1 2 3
960 atoms in group bmi
@ -53,23 +60,53 @@ 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
Finding SHAKE clusters ...
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
find clusters CPU = 0.002 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
fix conp bot electrode/conp -1.0 1.979 couple top 1.0 symm on etypes on 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
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
Your simulation uses code contributions which should be cited:
- kspace_style pppm/electrode command:
@article{Ahrens2021,
author = {Ahrens-Iwers, Ludwig J.V. and Mei{\ss}ner, Robert H.},
doi = {10.1063/5.0063381},
title = {{Constant potential simulations on a mesh}},
journal = {Journal of Chemical Physics},
year = {2021}
volume = {155},
pages = {104104},
}
- fix electrode command:
@article{Ahrens2022
author = {Ahrens-Iwers, Ludwig J.V. and Janssen, Mahijs and Tee, Shern R. and Mei{\ss}ner, Robert H.},
doi = {10.1063/5.0099239},
title = {{ELECTRODE: An electrochemistry package for LAMMPS}},
journal = {The Journal of Chemical Physics},
year = {2022}
volume = {157},
pages = {084801},
}
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
PPPM/electrode initialization ...
using 12-bit tables for long-range coulomb (src/kspace.cpp:342)
G vector (1/distance) = 0.20949995
@ -79,9 +116,9 @@ PPPM/electrode initialization ...
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
Generated 15 of 15 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update every 1 steps, delay 10 steps, check yes
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 18
ghost atom cutoff = 18
@ -102,35 +139,35 @@ Neighbor list info ...
pair build: skip
stencil: none
bin: none
Per MPI rank memory allocation (min/avg/max) = 21.96 | 22.27 | 22.77 Mbytes
Per MPI rank memory allocation (min/avg/max) = 21.23 | 21.34 | 21.65 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
0 0 0 25137186 25137186 0.0085209384 -0.0085209384
50 17.837642 64.263873 25137027 25137210 0.0045513522 -0.0045513522
100 48.393984 174.34955 25136771 25137270 -0.0097291786 0.0097291786
150 70.421823 253.70949 25136653 25137378 -0.033522793 0.033522793
200 82.205535 296.1628 25136667 25137513 -0.064555648 0.064555648
250 87.542843 315.39158 25136758 25137660 -0.098075546 0.098075546
300 91.705733 330.38927 25136868 25137812 -0.13006751 0.13006751
350 100.36128 361.5727 25136938 25137971 -0.15852814 0.15852814
400 111.37586 401.25505 25136990 25138137 -0.18297207 0.18297207
450 121.79814 438.80351 25137049 25138303 -0.2023394 0.2023394
500 126.95882 457.39597 25137151 25138459 -0.21305221 0.21305221
Loop time of 26.2807 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
Performance: 1.644 ns/day, 14.600 hours/ns, 19.025 timesteps/s, 71.840 katom-step/s
83.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 | 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
Pair | 5.8233 | 6.1941 | 6.6294 | 12.1 | 23.57
Bond | 0.0010807 | 0.0011705 | 0.0013494 | 0.3 | 0.00
Kspace | 8.0325 | 8.4703 | 8.8457 | 10.4 | 32.23
Neigh | 0.14184 | 0.1421 | 0.14238 | 0.1 | 0.54
Comm | 0.52248 | 0.54323 | 0.56352 | 2.7 | 2.07
Output | 0.00079782 | 0.0011547 | 0.0021987 | 1.8 | 0.00
Modify | 10.831 | 10.856 | 10.881 | 0.7 | 41.31
Other | | 0.07293 | | | 0.28
Nlocal: 944 ave 951 max 941 min
Histogram: 1 2 0 0 0 0 0 0 0 1
@ -144,4 +181,4 @@ Ave neighs/atom = 493.56224
Ave special neighs/atom = 0.50847458
Neighbor list builds = 7
Dangerous builds = 0
Total wall time: 0:00:44
Total wall time: 0:00:32

View File

@ -1,4 +1,4 @@
LAMMPS (24 Mar 2022)
LAMMPS (3 Nov 2022)
# electrodes with equal-style ramped (electrode-)constant potential
# for graphene-ionic liquid supercapacitor
@ -37,13 +37,20 @@ Finding 1-2 1-3 1-4 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
special bonds CPU = 0.002 seconds
read_data CPU = 0.021 seconds
group bot molecule 641
416 atoms in group bot
group top molecule 642
# replicate 4 4 1 # test different sys sizes
variable zpos atom "z > 0"
group zpos variable zpos
1891 atoms in group zpos
group ele type 5
832 atoms in group ele
group top intersect ele zpos
416 atoms in group top
group bot subtract ele top
416 atoms in group bot
group bmi type 1 2 3
960 atoms in group bmi
@ -52,6 +59,7 @@ 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
Finding SHAKE clusters ...
0 = # of size 2 clusters
0 = # of size 3 clusters
0 = # of size 4 clusters
@ -65,12 +73,41 @@ 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
fix conp bot electrode/conp 0.0 1.979 couple top v_v symm on etypes on
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
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
Your simulation uses code contributions which should be cited:
- kspace_style pppm/electrode command:
@article{Ahrens2021,
author = {Ahrens-Iwers, Ludwig J.V. and Mei{\ss}ner, Robert H.},
doi = {10.1063/5.0063381},
title = {{Constant potential simulations on a mesh}},
journal = {Journal of Chemical Physics},
year = {2021}
volume = {155},
pages = {104104},
}
- fix electrode command:
@article{Ahrens2022
author = {Ahrens-Iwers, Ludwig J.V. and Janssen, Mahijs and Tee, Shern R. and Mei{\ss}ner, Robert H.},
doi = {10.1063/5.0099239},
title = {{ELECTRODE: An electrochemistry package for LAMMPS}},
journal = {The Journal of Chemical Physics},
year = {2022}
volume = {157},
pages = {084801},
}
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
PPPM/electrode initialization ...
using 12-bit tables for long-range coulomb (src/kspace.cpp:342)
G vector (1/distance) = 0.20904498
@ -80,9 +117,9 @@ PPPM/electrode initialization ...
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
Generated 15 of 15 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update every 1 steps, delay 10 steps, check yes
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 18
ghost atom cutoff = 18
@ -103,35 +140,35 @@ Neighbor list info ...
pair build: skip
stencil: none
bin: none
Per MPI rank memory allocation (min/avg/max) = 56.89 | 56.89 | 56.89 Mbytes
Per MPI rank memory allocation (min/avg/max) = 54.25 | 54.25 | 54.25 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
0 0 0 25137190 25137190 0.0085142912 -0.0085142912 2
50 17.839699 64.271283 25137031 25137215 -0.0067894391 0.0067894391 2.2
100 48.411618 174.41308 25136776 25137275 -0.033422174 0.033422174 2.4
150 70.478909 253.91515 25136658 25137384 -0.071583953 0.071583953 2.6
200 82.322716 296.58497 25136673 25137521 -0.11962095 0.11962095 2.8
250 87.739905 316.10153 25136766 25137670 -0.17281469 0.17281469 3
300 91.974584 331.35786 25136877 25137825 -0.22657123 0.22657123 3.2
350 100.73048 362.90284 25136949 25137987 -0.27817429 0.27817429 3.4
400 111.78597 402.73256 25137004 25138156 -0.32659395 0.32659395 3.6
450 122.14181 440.04167 25137066 25138324 -0.37054363 0.37054363 3.8
500 127.32331 458.70912 25137171 25138482 -0.40653009 0.40653009 4
Loop time of 87.6405 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
Performance: 0.493 ns/day, 48.689 hours/ns, 5.705 timesteps/s, 21.543 katom-step/s
100.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 | 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
Pair | 18.484 | 18.484 | 18.484 | 0.0 | 21.09
Bond | 0.0016824 | 0.0016824 | 0.0016824 | 0.0 | 0.00
Kspace | 35.426 | 35.426 | 35.426 | 0.0 | 40.42
Neigh | 0.30201 | 0.30201 | 0.30201 | 0.0 | 0.34
Comm | 0.066546 | 0.066546 | 0.066546 | 0.0 | 0.08
Output | 0.0022768 | 0.0022768 | 0.0022768 | 0.0 | 0.00
Modify | 33.33 | 33.33 | 33.33 | 0.0 | 38.03
Other | | 0.0286 | | | 0.03
Nlocal: 3776 ave 3776 max 3776 min
Histogram: 1 0 0 0 0 0 0 0 0 0
@ -145,4 +182,4 @@ Ave neighs/atom = 457.17161
Ave special neighs/atom = 0.50847458
Neighbor list builds = 7
Dangerous builds = 0
Total wall time: 0:01:50
Total wall time: 0:01:44

View File

@ -1,4 +1,4 @@
LAMMPS (24 Mar 2022)
LAMMPS (3 Nov 2022)
# electrodes with equal-style ramped (electrode-)constant potential
# for graphene-ionic liquid supercapacitor
@ -38,13 +38,20 @@ Finding 1-2 1-3 1-4 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
special bonds CPU = 0.003 seconds
read_data CPU = 0.034 seconds
group bot molecule 641
416 atoms in group bot
group top molecule 642
# replicate 4 4 1 # test different sys sizes
variable zpos atom "z > 0"
group zpos variable zpos
1891 atoms in group zpos
group ele type 5
832 atoms in group ele
group top intersect ele zpos
416 atoms in group top
group bot subtract ele top
416 atoms in group bot
group bmi type 1 2 3
960 atoms in group bmi
@ -53,11 +60,12 @@ 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
Finding SHAKE clusters ...
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
find clusters CPU = 0.002 seconds
variable q atom q
compute qtop top reduce sum v_q
@ -66,12 +74,41 @@ 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
fix conp bot electrode/conp 0.0 1.979 couple top v_v symm on etypes on
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
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
Your simulation uses code contributions which should be cited:
- kspace_style pppm/electrode command:
@article{Ahrens2021,
author = {Ahrens-Iwers, Ludwig J.V. and Mei{\ss}ner, Robert H.},
doi = {10.1063/5.0063381},
title = {{Constant potential simulations on a mesh}},
journal = {Journal of Chemical Physics},
year = {2021}
volume = {155},
pages = {104104},
}
- fix electrode command:
@article{Ahrens2022
author = {Ahrens-Iwers, Ludwig J.V. and Janssen, Mahijs and Tee, Shern R. and Mei{\ss}ner, Robert H.},
doi = {10.1063/5.0099239},
title = {{ELECTRODE: An electrochemistry package for LAMMPS}},
journal = {The Journal of Chemical Physics},
year = {2022}
volume = {157},
pages = {084801},
}
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
PPPM/electrode initialization ...
using 12-bit tables for long-range coulomb (src/kspace.cpp:342)
G vector (1/distance) = 0.20904498
@ -81,9 +118,9 @@ PPPM/electrode initialization ...
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
Generated 15 of 15 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update every 1 steps, delay 10 steps, check yes
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 18
ghost atom cutoff = 18
@ -104,35 +141,35 @@ Neighbor list info ...
pair build: skip
stencil: none
bin: none
Per MPI rank memory allocation (min/avg/max) = 23.63 | 27.46 | 31.29 Mbytes
Per MPI rank memory allocation (min/avg/max) = 22.9 | 26.72 | 30.55 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
0 0 0 25137190 25137190 0.0085142912 -0.0085142912 2
50 17.839699 64.271283 25137031 25137215 -0.0067894391 0.0067894391 2.2
100 48.411618 174.41308 25136776 25137275 -0.033422174 0.033422174 2.4
150 70.478909 253.91515 25136658 25137384 -0.071583953 0.071583953 2.6
200 82.322716 296.58497 25136673 25137521 -0.11962095 0.11962095 2.8
250 87.739905 316.10153 25136766 25137670 -0.17281469 0.17281469 3
300 91.974584 331.35786 25136877 25137825 -0.22657123 0.22657123 3.2
350 100.73048 362.90284 25136949 25137987 -0.27817429 0.27817429 3.4
400 111.78597 402.73256 25137004 25138156 -0.32659395 0.32659395 3.6
450 122.14181 440.04167 25137066 25138324 -0.37054363 0.37054363 3.8
500 127.32331 458.70912 25137171 25138482 -0.40653009 0.40653009 4
Loop time of 49.2075 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
Performance: 0.878 ns/day, 27.337 hours/ns, 10.161 timesteps/s, 38.368 katom-step/s
75.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 | 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
Pair | 5.7517 | 5.9151 | 6.0961 | 6.6 | 12.02
Bond | 0.0011959 | 0.0013362 | 0.0014512 | 0.2 | 0.00
Kspace | 24.223 | 24.404 | 24.566 | 3.2 | 49.59
Neigh | 0.10283 | 0.10288 | 0.10301 | 0.0 | 0.21
Comm | 0.30801 | 0.31944 | 0.33141 | 2.0 | 0.65
Output | 0.0010416 | 0.0014127 | 0.0024086 | 1.5 | 0.00
Modify | 18.405 | 18.418 | 18.432 | 0.3 | 37.43
Other | | 0.04459 | | | 0.09
Nlocal: 944 ave 951 max 941 min
Histogram: 1 2 0 0 0 0 0 0 0 1
@ -146,4 +183,4 @@ Ave neighs/atom = 457.17161
Ave special neighs/atom = 0.50847458
Neighbor list builds = 7
Dangerous builds = 0
Total wall time: 0:00:58
Total wall time: 0:00:55

View File

@ -1,4 +1,4 @@
LAMMPS (24 Mar 2022)
LAMMPS (3 Nov 2022)
# electrodes with thermopotentiostat
# for graphene-ionic liquid supercapacitor
@ -38,12 +38,19 @@ Finding 1-2 1-3 1-4 neighbors ...
1 = max # of 1-4 neighbors
2 = max # of special neighbors
special bonds CPU = 0.002 seconds
read_data CPU = 0.024 seconds
read_data CPU = 0.021 seconds
group bot molecule 641
416 atoms in group bot
group top molecule 642
# replicate 4 4 1 # test different sys sizes
variable zpos atom "z > 0"
group zpos variable zpos
1891 atoms in group zpos
group ele type 5
832 atoms in group ele
group top intersect ele zpos
416 atoms in group top
group bot subtract ele top
416 atoms in group bot
group bmi type 1 2 3
960 atoms in group bmi
@ -52,11 +59,12 @@ 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
Finding SHAKE clusters ...
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
find clusters CPU = 0.001 seconds
variable q atom q
compute qtop top reduce sum v_q
@ -65,10 +73,10 @@ 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
fix conpthermo bot electrode/thermo -1.0 1.979 couple top 1.0 etypes on temp 500 100 7 symm on # 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 conp bot electrode/conp -1.0 1.979 couple top 1.0 etypes on symm on
fix nve electrolyte nve
# note ionic liquid does not reach 500K immediately
@ -77,6 +85,35 @@ fix nve electrolyte nve
thermo 50
thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop
run 500
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
Your simulation uses code contributions which should be cited:
- kspace_style pppm/electrode command:
@article{Ahrens2021,
author = {Ahrens-Iwers, Ludwig J.V. and Mei{\ss}ner, Robert H.},
doi = {10.1063/5.0063381},
title = {{Constant potential simulations on a mesh}},
journal = {Journal of Chemical Physics},
year = {2021}
volume = {155},
pages = {104104},
}
- fix electrode command:
@article{Ahrens2022
author = {Ahrens-Iwers, Ludwig J.V. and Janssen, Mahijs and Tee, Shern R. and Mei{\ss}ner, Robert H.},
doi = {10.1063/5.0099239},
title = {{ELECTRODE: An electrochemistry package for LAMMPS}},
journal = {The Journal of Chemical Physics},
year = {2022}
volume = {157},
pages = {084801},
}
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
PPPM/electrode initialization ...
using 12-bit tables for long-range coulomb (src/kspace.cpp:342)
G vector (1/distance) = 0.20904498
@ -86,9 +123,9 @@ PPPM/electrode initialization ...
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
Generated 15 of 15 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update every 1 steps, delay 10 steps, check yes
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 18
ghost atom cutoff = 18
@ -109,35 +146,35 @@ Neighbor list info ...
pair build: skip
stencil: none
bin: none
Per MPI rank memory allocation (min/avg/max) = 56.89 | 56.89 | 56.89 Mbytes
Per MPI rank memory allocation (min/avg/max) = 54.25 | 54.25 | 54.25 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
0 0 0 25137188 25137188 0.12767608 -0.12767608
50 16.63971 59.94807 25137031 25137202 0.11714711 -0.11714711
100 40.785523 146.93846 25136782 25137202 0.12783578 -0.12783578
150 53.394067 192.3634 25136653 25137203 0.080257127 -0.080257127
200 56.419019 203.26143 25136623 25137204 0.024756474 -0.024756474
250 54.922935 197.87147 25136641 25137206 -0.024533734 0.024533734
300 52.884861 190.52888 25136664 25137209 -0.066341109 0.066341109
350 52.41676 188.84244 25136670 25137210 -0.089546266 0.089546266
400 54.366979 195.86852 25136651 25137211 -0.10239755 0.10239755
450 54.906542 197.81241 25136645 25137210 -0.099987411 0.099987411
500 54.33841 195.7656 25136656 25137216 -0.21295943 0.21295943
Loop time of 87.5281 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
Performance: 0.494 ns/day, 48.627 hours/ns, 5.712 timesteps/s, 21.570 katom-step/s
100.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 | 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
Pair | 18.819 | 18.819 | 18.819 | 0.0 | 21.50
Bond | 0.0014336 | 0.0014336 | 0.0014336 | 0.0 | 0.00
Kspace | 34.891 | 34.891 | 34.891 | 0.0 | 39.86
Neigh | 0.21542 | 0.21542 | 0.21542 | 0.0 | 0.25
Comm | 0.063383 | 0.063383 | 0.063383 | 0.0 | 0.07
Output | 0.0020476 | 0.0020476 | 0.0020476 | 0.0 | 0.00
Modify | 33.507 | 33.507 | 33.507 | 0.0 | 38.28
Other | | 0.0281 | | | 0.03
Nlocal: 3776 ave 3776 max 3776 min
Histogram: 1 0 0 0 0 0 0 0 0 0
@ -151,4 +188,4 @@ Ave neighs/atom = 457.08845
Ave special neighs/atom = 0.50847458
Neighbor list builds = 5
Dangerous builds = 0
Total wall time: 0:01:50
Total wall time: 0:01:44

View File

@ -1,4 +1,4 @@
LAMMPS (24 Mar 2022)
LAMMPS (3 Nov 2022)
# electrodes with thermopotentiostat
# for graphene-ionic liquid supercapacitor
@ -39,12 +39,19 @@ Finding 1-2 1-3 1-4 neighbors ...
1 = max # of 1-4 neighbors
2 = max # of special neighbors
special bonds CPU = 0.002 seconds
read_data CPU = 0.025 seconds
read_data CPU = 0.036 seconds
group bot molecule 641
416 atoms in group bot
group top molecule 642
# replicate 4 4 1 # test different sys sizes
variable zpos atom "z > 0"
group zpos variable zpos
1891 atoms in group zpos
group ele type 5
832 atoms in group ele
group top intersect ele zpos
416 atoms in group top
group bot subtract ele top
416 atoms in group bot
group bmi type 1 2 3
960 atoms in group bmi
@ -53,11 +60,12 @@ 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
Finding SHAKE clusters ...
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
find clusters CPU = 0.005 seconds
variable q atom q
compute qtop top reduce sum v_q
@ -66,10 +74,10 @@ 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
fix conpthermo bot electrode/thermo -1.0 1.979 couple top 1.0 etypes on temp 500 100 7 symm on # 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 conp bot electrode/conp -1.0 1.979 couple top 1.0 etypes on symm on
fix nve electrolyte nve
# note ionic liquid does not reach 500K immediately
@ -78,6 +86,35 @@ fix nve electrolyte nve
thermo 50
thermo_style custom step temp c_ctemp epair etotal c_qbot c_qtop
run 500
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
Your simulation uses code contributions which should be cited:
- kspace_style pppm/electrode command:
@article{Ahrens2021,
author = {Ahrens-Iwers, Ludwig J.V. and Mei{\ss}ner, Robert H.},
doi = {10.1063/5.0063381},
title = {{Constant potential simulations on a mesh}},
journal = {Journal of Chemical Physics},
year = {2021}
volume = {155},
pages = {104104},
}
- fix electrode command:
@article{Ahrens2022
author = {Ahrens-Iwers, Ludwig J.V. and Janssen, Mahijs and Tee, Shern R. and Mei{\ss}ner, Robert H.},
doi = {10.1063/5.0099239},
title = {{ELECTRODE: An electrochemistry package for LAMMPS}},
journal = {The Journal of Chemical Physics},
year = {2022}
volume = {157},
pages = {084801},
}
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
PPPM/electrode initialization ...
using 12-bit tables for long-range coulomb (src/kspace.cpp:342)
G vector (1/distance) = 0.20904498
@ -87,9 +124,9 @@ PPPM/electrode initialization ...
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
Generated 15 of 15 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update every 1 steps, delay 10 steps, check yes
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 18
ghost atom cutoff = 18
@ -110,35 +147,35 @@ Neighbor list info ...
pair build: skip
stencil: none
bin: none
Per MPI rank memory allocation (min/avg/max) = 23.63 | 27.46 | 31.29 Mbytes
Per MPI rank memory allocation (min/avg/max) = 22.9 | 26.72 | 30.55 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
0 0 0 25137188 25137188 0.12767608 -0.12767608
50 16.63971 59.94807 25137031 25137202 0.11714711 -0.11714711
100 40.785523 146.93846 25136782 25137202 0.12783578 -0.12783578
150 53.394067 192.3634 25136653 25137203 0.080257127 -0.080257127
200 56.419019 203.26143 25136623 25137204 0.024756474 -0.024756474
250 54.922935 197.87147 25136641 25137206 -0.024533734 0.024533734
300 52.884861 190.52888 25136664 25137209 -0.066341109 0.066341109
350 52.41676 188.84244 25136670 25137210 -0.089546266 0.089546266
400 54.366979 195.86852 25136651 25137211 -0.10239755 0.10239755
450 54.906542 197.81241 25136645 25137210 -0.099987411 0.099987411
500 54.33841 195.7656 25136656 25137216 -0.21295943 0.21295943
Loop time of 49.2564 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
Performance: 0.877 ns/day, 27.365 hours/ns, 10.151 timesteps/s, 38.330 katom-step/s
76.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 | 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
Pair | 5.6984 | 5.9083 | 6.1177 | 6.4 | 12.00
Bond | 0.0011785 | 0.0012201 | 0.0013055 | 0.1 | 0.00
Kspace | 24.311 | 24.519 | 24.729 | 3.1 | 49.78
Neigh | 0.075406 | 0.075487 | 0.07556 | 0.0 | 0.15
Comm | 0.29972 | 0.30943 | 0.31881 | 1.7 | 0.63
Output | 0.0012474 | 0.001684 | 0.0027062 | 1.5 | 0.00
Modify | 18.377 | 18.384 | 18.391 | 0.2 | 37.32
Other | | 0.05679 | | | 0.12
Nlocal: 944 ave 951 max 940 min
Histogram: 1 1 1 0 0 0 0 0 0 1
@ -152,4 +189,4 @@ Ave neighs/atom = 457.08845
Ave special neighs/atom = 0.50847458
Neighbor list builds = 5
Dangerous builds = 0
Total wall time: 0:00:50
Total wall time: 0:00:55

View File

@ -1,153 +0,0 @@
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

@ -1,154 +0,0 @@
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

@ -1,170 +0,0 @@
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

@ -1,171 +0,0 @@
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

@ -12,8 +12,13 @@ kspace_style pppm/electrode 1e-7
read_data "data.graph-il"
group bot molecule 641
group top molecule 642
# replicate 4 4 1 # test different sys sizes
variable zpos atom "z > 0"
group zpos variable zpos
group ele type 5
group top intersect ele zpos
group bot subtract ele top
group bmi type 1 2 3
group electrolyte type 1 2 3 4

View File

@ -0,0 +1,2 @@
*.csv
*.txt

View File

@ -0,0 +1,27 @@
LAMMPS data file via write_data, version 24 Dec 2020, timestep = 0
4 atoms
3 atom types
0 1 xlo xhi
0 1 ylo yhi
-10 10 zlo zhi
Masses
1 196.966553
2 196.966553
3 1.0
Pair Coeffs # lj/cut/coul/long
1 0 0
2 0 0
3 0 0
Atoms # full
1 1 1 0.00 0.00 0.00 -2.00 # bottom electrode
2 2 2 0.00 0.00 0.00 2.00 # top electrode
3 3 3 0.50 0.00 0.00 -1.00 # bottom electrolyte
4 3 3 -0.50 0.00 0.00 1.00 # top electrolyte

View File

@ -0,0 +1,53 @@
#!/usr/env/python3
import sys
import os.path as op
def rel_error(out, ref):
return 100 * abs((ref - out) / out)
assert len(sys.argv) == 5
with open(sys.argv[1]) as f:
ref_line = f.readlines()[-1].split(", ")
e_ref = float(ref_line[1])
q_ref = float(ref_line[3])
inv11_ref = float(ref_line[4])
inv12_ref = float(ref_line[5])
b1_ref = float(ref_line[6])
# out.csv
with open(sys.argv[2]) as f:
out_line = f.readlines()[-1].split(", ")
e_out = float(out_line[0])
q_out = float(out_line[1])
out_lines = [("energy", e_ref, e_out), ("charge", q_ref, q_out)]
# vec.csv
vec_file = "vec.csv"
if op.isfile(vec_file):
with open(sys.argv[4]) as f:
vec_line = f.readlines()[1:]
b1_out = float(vec_line[0])
b2_out = float(vec_line[1])
out_lines.append(("b1", b1_ref, b1_out))
# inv.csv
inv_file = "inv.csv"
if op.isfile(inv_file):
with open(inv_file) as f:
inv_line = f.readlines()[1].split()
inv11_out = float(inv_line[0])
inv12_out = float(inv_line[1])
out_lines.append(("inv11", inv11_ref, inv11_out))
lines = []
for label, ref, out in out_lines:
error = rel_error(out, ref)
lines.append(f"{label}: {out:.5f}, {error:.5f}\n")
with open("madelung.txt", 'a') as f:
f.writelines(lines)

View File

@ -0,0 +1,11 @@
boundary p p f
kspace_style ewald/electrode 1.0e-8
kspace_modify slab 8.0 # ew3dc
include "settings.mod" # styles, computes, groups and fixes
thermo_style custom step pe c_qbot c_qtop
fix conp bot electrode/conp 0 2 couple top 1 symm on algo cg 1e-6
run 0

View File

@ -0,0 +1,11 @@
boundary p p f
kspace_style ewald/electrode 1.0e-8
kspace_modify slab ew2d
include "settings.mod" # styles, computes, groups and fixes
thermo_style custom step pe c_qbot c_qtop
fix conp bot electrode/conp 0 2 couple top 1 symm on write_inv inv.csv write_vec vec.csv
run 0

View File

@ -0,0 +1,11 @@
boundary p p f
kspace_style ewald/electrode 1.0e-8
kspace_modify slab 8.0 # ew3dc
include "settings.mod" # styles, computes, groups and fixes
thermo_style custom step pe c_qbot c_qtop
fix conp bot electrode/conp 0 2 couple top 1 symm on write_inv inv.csv write_vec vec.csv
run 0

View File

@ -0,0 +1,10 @@
boundary p p p
kspace_style ewald/electrode 1.0e-8
include "settings.mod" # styles, computes, groups and fixes
thermo_style custom step pe c_qbot c_qtop
fix conp bot electrode/conp 0 2 couple top 1 symm on ffield yes write_inv inv.csv write_vec vec.csv
run 0

View File

@ -0,0 +1,11 @@
boundary p p f
kspace_style pppm/electrode 1.0e-10
kspace_modify slab 8.0 # ew3dc
include "settings.mod" # styles, computes, groups and fixes
thermo_style custom step pe c_qbot c_qtop
fix conp bot electrode/conp 0 2 couple top 1 symm on write_inv inv.csv write_vec vec.csv
run 0

View File

@ -0,0 +1,10 @@
boundary p p p
kspace_style pppm/electrode 1.0e-10
include "settings.mod" # styles, computes, groups and fixes
thermo_style custom step pe c_qbot c_qtop
fix conp bot electrode/conp 0 2 couple top 1 symm on ffield yes write_inv inv.csv write_vec vec.csv
run 0

View File

@ -0,0 +1,131 @@
LAMMPS (3 Nov 2022)
boundary p p f
kspace_style ewald/electrode 1.0e-8
kspace_modify slab 8.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 12
read_data "data.au-elyt"
Reading data file ...
orthogonal box = (0 0 -10) to (1 1 10)
1 by 1 by 1 MPI processor grid
reading atoms ...
4 atoms
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.003 seconds
group bot type 1
1 atoms in group bot
group top type 2
1 atoms in group top
# get electrode charges
variable q atom q
compute qbot bot reduce sum v_q
compute qtop top reduce sum v_q
compute compute_pe all pe
variable vpe equal c_compute_pe
variable charge equal c_qtop
fix fxprint all print 1 "${vpe}, ${charge}" file "out.csv"
thermo_style custom step pe c_qbot c_qtop
fix conp bot electrode/conp 0 2 couple top 1 symm on algo cg 1e-6
2 atoms in group conp_group
run 0
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
Your simulation uses code contributions which should be cited:
- fix electrode command:
@article{Ahrens2022
author = {Ahrens-Iwers, Ludwig J.V. and Janssen, Mahijs and Tee, Shern R. and Mei{\ss}ner, Robert H.},
doi = {10.1063/5.0099239},
title = {{ELECTRODE: An electrochemistry package for LAMMPS}},
journal = {The Journal of Chemical Physics},
year = {2022}
volume = {157},
pages = {084801},
}
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
WARNING: No fixes with time integration, atoms won't move (src/verlet.cpp:60)
Ewald/electrode initialization ...
using 12-bit tables for long-range coulomb (src/kspace.cpp:342)
WARNING: For better accuracy use 'pair_modify table 0' (src/kspace.cpp:365)
G vector (1/distance) = 0.32261103
estimated absolute RMS force accuracy = 3.8272011e-06
estimated relative force accuracy = 1.1525502e-08
KSpace vectors: actual max1d max3d = 52 50 515150
kxmax kymax kzmax = 1 1 50
Generated 3 of 3 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 14
ghost atom cutoff = 14
binsize = 7, bins = 1 1 3
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: Proc sub-domain size < neighbor skin, could lead to lost atoms (src/domain.cpp:966)
139.943964815502, 0.279214485147241
Per MPI rank memory allocation (min/avg/max) = 144.1 | 144.1 | 144.1 Mbytes
Step PotEng c_qbot c_qtop
0 139.94396 -0.27921449 0.27921449
Loop time of 1.092e-06 on 1 procs for 0 steps with 4 atoms
91.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 | 0 | 0 | 0 | 0.0 | 0.00
Bond | 0 | 0 | 0 | 0.0 | 0.00
Kspace | 0 | 0 | 0 | 0.0 | 0.00
Neigh | 0 | 0 | 0 | 0.0 | 0.00
Comm | 0 | 0 | 0 | 0.0 | 0.00
Output | 0 | 0 | 0 | 0.0 | 0.00
Modify | 0 | 0 | 0 | 0.0 | 0.00
Other | | 1.092e-06 | | |100.00
Nlocal: 4 ave 4 max 4 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 3596 ave 3596 max 3596 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 4790 ave 4790 max 4790 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 4790
Ave neighs/atom = 1197.5
Ave special neighs/atom = 0
Neighbor list builds = 0
Dangerous builds = 0
Average conjugate gradient steps: 1
Total wall time: 0:00:00

View File

@ -0,0 +1,130 @@
LAMMPS (3 Nov 2022)
boundary p p f
kspace_style ewald/electrode 1.0e-8
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 12
read_data "data.au-elyt"
Reading data file ...
orthogonal box = (0 0 -10) to (1 1 10)
1 by 1 by 1 MPI processor grid
reading atoms ...
4 atoms
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.002 seconds
group bot type 1
1 atoms in group bot
group top type 2
1 atoms in group top
# get electrode charges
variable q atom q
compute qbot bot reduce sum v_q
compute qtop top reduce sum v_q
compute compute_pe all pe
variable vpe equal c_compute_pe
variable charge equal c_qtop
fix fxprint all print 1 "${vpe}, ${charge}" file "out.csv"
thermo_style custom step pe c_qbot c_qtop
fix conp bot electrode/conp 0 2 couple top 1 symm on write_inv inv.csv write_vec vec.csv
2 atoms in group conp_group
run 0
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
Your simulation uses code contributions which should be cited:
- fix electrode command:
@article{Ahrens2022
author = {Ahrens-Iwers, Ludwig J.V. and Janssen, Mahijs and Tee, Shern R. and Mei{\ss}ner, Robert H.},
doi = {10.1063/5.0099239},
title = {{ELECTRODE: An electrochemistry package for LAMMPS}},
journal = {The Journal of Chemical Physics},
year = {2022}
volume = {157},
pages = {084801},
}
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
WARNING: No fixes with time integration, atoms won't move (src/verlet.cpp:60)
Ewald/electrode initialization ...
using 12-bit tables for long-range coulomb (src/kspace.cpp:342)
WARNING: For better accuracy use 'pair_modify table 0' (src/kspace.cpp:365)
G vector (1/distance) = 0.32261103
estimated absolute RMS force accuracy = 9.9990544e-06
estimated relative force accuracy = 3.0111855e-08
KSpace vectors: actual max1d max3d = 2 8 2456
kxmax kymax kzmax = 1 1 8
Generated 3 of 3 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 14
ghost atom cutoff = 14
binsize = 7, bins = 1 1 3
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: Proc sub-domain size < neighbor skin, could lead to lost atoms (src/domain.cpp:966)
139.946125020193, 0.279214126709814
Per MPI rank memory allocation (min/avg/max) = 20.42 | 20.42 | 20.42 Mbytes
Step PotEng c_qbot c_qtop
0 139.94613 -0.27921413 0.27921413
Loop time of 1.082e-06 on 1 procs for 0 steps with 4 atoms
0.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 | 0 | 0 | 0.0 | 0.00
Bond | 0 | 0 | 0 | 0.0 | 0.00
Kspace | 0 | 0 | 0 | 0.0 | 0.00
Neigh | 0 | 0 | 0 | 0.0 | 0.00
Comm | 0 | 0 | 0 | 0.0 | 0.00
Output | 0 | 0 | 0 | 0.0 | 0.00
Modify | 0 | 0 | 0 | 0.0 | 0.00
Other | | 1.082e-06 | | |100.00
Nlocal: 4 ave 4 max 4 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 3596 ave 3596 max 3596 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 4790 ave 4790 max 4790 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 4790
Ave neighs/atom = 1197.5
Ave special neighs/atom = 0
Neighbor list builds = 0
Dangerous builds = 0
Total wall time: 0:00:00

View File

@ -0,0 +1,130 @@
LAMMPS (3 Nov 2022)
boundary p p f
kspace_style ewald/electrode 1.0e-8
kspace_modify slab 8.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 12
read_data "data.au-elyt"
Reading data file ...
orthogonal box = (0 0 -10) to (1 1 10)
1 by 1 by 1 MPI processor grid
reading atoms ...
4 atoms
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.003 seconds
group bot type 1
1 atoms in group bot
group top type 2
1 atoms in group top
# get electrode charges
variable q atom q
compute qbot bot reduce sum v_q
compute qtop top reduce sum v_q
compute compute_pe all pe
variable vpe equal c_compute_pe
variable charge equal c_qtop
fix fxprint all print 1 "${vpe}, ${charge}" file "out.csv"
thermo_style custom step pe c_qbot c_qtop
fix conp bot electrode/conp 0 2 couple top 1 symm on write_inv inv.csv write_vec vec.csv
2 atoms in group conp_group
run 0
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
Your simulation uses code contributions which should be cited:
- fix electrode command:
@article{Ahrens2022
author = {Ahrens-Iwers, Ludwig J.V. and Janssen, Mahijs and Tee, Shern R. and Mei{\ss}ner, Robert H.},
doi = {10.1063/5.0099239},
title = {{ELECTRODE: An electrochemistry package for LAMMPS}},
journal = {The Journal of Chemical Physics},
year = {2022}
volume = {157},
pages = {084801},
}
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
WARNING: No fixes with time integration, atoms won't move (src/verlet.cpp:60)
Ewald/electrode initialization ...
using 12-bit tables for long-range coulomb (src/kspace.cpp:342)
WARNING: For better accuracy use 'pair_modify table 0' (src/kspace.cpp:365)
G vector (1/distance) = 0.32261103
estimated absolute RMS force accuracy = 3.8272011e-06
estimated relative force accuracy = 1.1525502e-08
KSpace vectors: actual max1d max3d = 52 50 515150
kxmax kymax kzmax = 1 1 50
Generated 3 of 3 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 14
ghost atom cutoff = 14
binsize = 7, bins = 1 1 3
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: Proc sub-domain size < neighbor skin, could lead to lost atoms (src/domain.cpp:966)
139.943964815502, 0.279214485147238
Per MPI rank memory allocation (min/avg/max) = 144.1 | 144.1 | 144.1 Mbytes
Step PotEng c_qbot c_qtop
0 139.94396 -0.27921449 0.27921449
Loop time of 7.31e-07 on 1 procs for 0 steps with 4 atoms
0.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 | 0 | 0 | 0.0 | 0.00
Bond | 0 | 0 | 0 | 0.0 | 0.00
Kspace | 0 | 0 | 0 | 0.0 | 0.00
Neigh | 0 | 0 | 0 | 0.0 | 0.00
Comm | 0 | 0 | 0 | 0.0 | 0.00
Output | 0 | 0 | 0 | 0.0 | 0.00
Modify | 0 | 0 | 0 | 0.0 | 0.00
Other | | 7.31e-07 | | |100.00
Nlocal: 4 ave 4 max 4 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 3596 ave 3596 max 3596 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 4790 ave 4790 max 4790 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 4790
Ave neighs/atom = 1197.5
Ave special neighs/atom = 0
Neighbor list builds = 0
Dangerous builds = 0
Total wall time: 0:00:00

View File

@ -0,0 +1,129 @@
LAMMPS (3 Nov 2022)
boundary p p p
kspace_style ewald/electrode 1.0e-8
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 12
read_data "data.au-elyt"
Reading data file ...
orthogonal box = (0 0 -10) to (1 1 10)
1 by 1 by 1 MPI processor grid
reading atoms ...
4 atoms
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.002 seconds
group bot type 1
1 atoms in group bot
group top type 2
1 atoms in group top
# get electrode charges
variable q atom q
compute qbot bot reduce sum v_q
compute qtop top reduce sum v_q
compute compute_pe all pe
variable vpe equal c_compute_pe
variable charge equal c_qtop
fix fxprint all print 1 "${vpe}, ${charge}" file "out.csv"
thermo_style custom step pe c_qbot c_qtop
fix conp bot electrode/conp 0 2 couple top 1 symm on ffield yes write_inv inv.csv write_vec vec.csv
2 atoms in group conp_group
run 0
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
Your simulation uses code contributions which should be cited:
- fix electrode command:
@article{Ahrens2022
author = {Ahrens-Iwers, Ludwig J.V. and Janssen, Mahijs and Tee, Shern R. and Mei{\ss}ner, Robert H.},
doi = {10.1063/5.0099239},
title = {{ELECTRODE: An electrochemistry package for LAMMPS}},
journal = {The Journal of Chemical Physics},
year = {2022}
volume = {157},
pages = {084801},
}
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
WARNING: No fixes with time integration, atoms won't move (src/verlet.cpp:60)
Ewald/electrode initialization ...
using 12-bit tables for long-range coulomb (src/kspace.cpp:342)
WARNING: For better accuracy use 'pair_modify table 0' (src/kspace.cpp:365)
G vector (1/distance) = 0.32261103
estimated absolute RMS force accuracy = 9.9990544e-06
estimated relative force accuracy = 3.0111855e-08
KSpace vectors: actual max1d max3d = 10 8 2456
kxmax kymax kzmax = 1 1 8
Generated 3 of 3 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 14
ghost atom cutoff = 14
binsize = 7, bins = 1 1 3
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: Proc sub-domain size < neighbor skin, could lead to lost atoms (src/domain.cpp:966)
138.299024320284, 0.287160231879378
Per MPI rank memory allocation (min/avg/max) = 21.19 | 21.19 | 21.19 Mbytes
Step PotEng c_qbot c_qtop
0 138.29902 -0.28716023 0.28716023
Loop time of 1.804e-06 on 1 procs for 0 steps with 4 atoms
55.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 | 0 | 0 | 0.0 | 0.00
Bond | 0 | 0 | 0 | 0.0 | 0.00
Kspace | 0 | 0 | 0 | 0.0 | 0.00
Neigh | 0 | 0 | 0 | 0.0 | 0.00
Comm | 0 | 0 | 0 | 0.0 | 0.00
Output | 0 | 0 | 0 | 0.0 | 0.00
Modify | 0 | 0 | 0 | 0.0 | 0.00
Other | | 1.804e-06 | | |100.00
Nlocal: 4 ave 4 max 4 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 10796 ave 10796 max 10796 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 4790 ave 4790 max 4790 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 4790
Ave neighs/atom = 1197.5
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 (3 Nov 2022)
boundary p p f
kspace_style pppm/electrode 1.0e-10
kspace_modify slab 8.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 12
read_data "data.au-elyt"
Reading data file ...
orthogonal box = (0 0 -10) to (1 1 10)
1 by 1 by 1 MPI processor grid
reading atoms ...
4 atoms
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.003 seconds
group bot type 1
1 atoms in group bot
group top type 2
1 atoms in group top
# get electrode charges
variable q atom q
compute qbot bot reduce sum v_q
compute qtop top reduce sum v_q
compute compute_pe all pe
variable vpe equal c_compute_pe
variable charge equal c_qtop
fix fxprint all print 1 "${vpe}, ${charge}" file "out.csv"
thermo_style custom step pe c_qbot c_qtop
fix conp bot electrode/conp 0 2 couple top 1 symm on write_inv inv.csv write_vec vec.csv
2 atoms in group conp_group
run 0
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
Your simulation uses code contributions which should be cited:
- kspace_style pppm/electrode command:
@article{Ahrens2021,
author = {Ahrens-Iwers, Ludwig J.V. and Mei{\ss}ner, Robert H.},
doi = {10.1063/5.0063381},
title = {{Constant potential simulations on a mesh}},
journal = {Journal of Chemical Physics},
year = {2021}
volume = {155},
pages = {104104},
}
- fix electrode command:
@article{Ahrens2022
author = {Ahrens-Iwers, Ludwig J.V. and Janssen, Mahijs and Tee, Shern R. and Mei{\ss}ner, Robert H.},
doi = {10.1063/5.0099239},
title = {{ELECTRODE: An electrochemistry package for LAMMPS}},
journal = {The Journal of Chemical Physics},
year = {2022}
volume = {157},
pages = {084801},
}
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
WARNING: No fixes with time integration, atoms won't move (src/verlet.cpp:60)
PPPM/electrode initialization ...
using 12-bit tables for long-range coulomb (src/kspace.cpp:342)
WARNING: For better accuracy use 'pair_modify table 0' (src/kspace.cpp:365)
G vector (1/distance) = 0.37216302
grid = 12 12 375
stencil order = 5
estimated absolute RMS force accuracy = 9.4312865e-06
estimated relative force accuracy = 2.8402039e-08
using double precision MKL FFT
3d grid and FFT values/proc = 637099 54000
Generated 3 of 3 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 14
ghost atom cutoff = 14
binsize = 7, bins = 1 1 3
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: Proc sub-domain size < neighbor skin, could lead to lost atoms (src/domain.cpp:966)
139.946107219358, 0.279214187928028
Per MPI rank memory allocation (min/avg/max) = 40.22 | 40.22 | 40.22 Mbytes
Step PotEng c_qbot c_qtop
0 139.94611 -0.27921419 0.27921419
Loop time of 8.32e-07 on 1 procs for 0 steps with 4 atoms
0.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 | 0 | 0 | 0.0 | 0.00
Bond | 0 | 0 | 0 | 0.0 | 0.00
Kspace | 0 | 0 | 0 | 0.0 | 0.00
Neigh | 0 | 0 | 0 | 0.0 | 0.00
Comm | 0 | 0 | 0 | 0.0 | 0.00
Output | 0 | 0 | 0 | 0.0 | 0.00
Modify | 0 | 0 | 0 | 0.0 | 0.00
Other | | 8.32e-07 | | |100.00
Nlocal: 4 ave 4 max 4 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 3596 ave 3596 max 3596 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 4790 ave 4790 max 4790 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 4790
Ave neighs/atom = 1197.5
Ave special neighs/atom = 0
Neighbor list builds = 0
Dangerous builds = 0
Total wall time: 0:00:00

View File

@ -0,0 +1,142 @@
LAMMPS (3 Nov 2022)
boundary p p p
kspace_style pppm/electrode 1.0e-10
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 12
read_data "data.au-elyt"
Reading data file ...
orthogonal box = (0 0 -10) to (1 1 10)
1 by 1 by 1 MPI processor grid
reading atoms ...
4 atoms
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.002 seconds
group bot type 1
1 atoms in group bot
group top type 2
1 atoms in group top
# get electrode charges
variable q atom q
compute qbot bot reduce sum v_q
compute qtop top reduce sum v_q
compute compute_pe all pe
variable vpe equal c_compute_pe
variable charge equal c_qtop
fix fxprint all print 1 "${vpe}, ${charge}" file "out.csv"
thermo_style custom step pe c_qbot c_qtop
fix conp bot electrode/conp 0 2 couple top 1 symm on ffield yes write_inv inv.csv write_vec vec.csv
2 atoms in group conp_group
run 0
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
Your simulation uses code contributions which should be cited:
- kspace_style pppm/electrode command:
@article{Ahrens2021,
author = {Ahrens-Iwers, Ludwig J.V. and Mei{\ss}ner, Robert H.},
doi = {10.1063/5.0063381},
title = {{Constant potential simulations on a mesh}},
journal = {Journal of Chemical Physics},
year = {2021}
volume = {155},
pages = {104104},
}
- fix electrode command:
@article{Ahrens2022
author = {Ahrens-Iwers, Ludwig J.V. and Janssen, Mahijs and Tee, Shern R. and Mei{\ss}ner, Robert H.},
doi = {10.1063/5.0099239},
title = {{ELECTRODE: An electrochemistry package for LAMMPS}},
journal = {The Journal of Chemical Physics},
year = {2022}
volume = {157},
pages = {084801},
}
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
WARNING: No fixes with time integration, atoms won't move (src/verlet.cpp:60)
PPPM/electrode initialization ...
using 12-bit tables for long-range coulomb (src/kspace.cpp:342)
WARNING: For better accuracy use 'pair_modify table 0' (src/kspace.cpp:365)
G vector (1/distance) = 0.37297537
grid = 12 12 90
stencil order = 5
estimated absolute RMS force accuracy = 9.4312758e-06
estimated relative force accuracy = 2.8402007e-08
using double precision MKL FFT
3d grid and FFT values/proc = 174824 12960
Generated 3 of 3 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 14
ghost atom cutoff = 14
binsize = 7, bins = 1 1 3
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: Proc sub-domain size < neighbor skin, could lead to lost atoms (src/domain.cpp:966)
138.298994634846, 0.287160247352281
Per MPI rank memory allocation (min/avg/max) = 16.7 | 16.7 | 16.7 Mbytes
Step PotEng c_qbot c_qtop
0 138.29899 -0.28716025 0.28716025
Loop time of 1.022e-06 on 1 procs for 0 steps with 4 atoms
0.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 | 0 | 0 | 0.0 | 0.00
Bond | 0 | 0 | 0 | 0.0 | 0.00
Kspace | 0 | 0 | 0 | 0.0 | 0.00
Neigh | 0 | 0 | 0 | 0.0 | 0.00
Comm | 0 | 0 | 0 | 0.0 | 0.00
Output | 0 | 0 | 0 | 0.0 | 0.00
Modify | 0 | 0 | 0 | 0.0 | 0.00
Other | | 1.022e-06 | | |100.00
Nlocal: 4 ave 4 max 4 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 10796 ave 10796 max 10796 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 4790 ave 4790 max 4790 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 4790
Ave neighs/atom = 1197.5
Ave special neighs/atom = 0
Neighbor list builds = 0
Dangerous builds = 0
Total wall time: 0:00:00

View File

@ -0,0 +1,94 @@
#!/usr/bin/env python3
import numpy as np
from scipy.special import erf
ETA = 2
SQRT2 = np.sqrt(2)
COULOMB = 332.06371 # Coulomb constant in Lammps 'real' units
QE2F = 23.060549
LENGTH = 10000 # convergence parameter
def lattice(length):
"""indices combinations of images in one quadrant"""
x = np.arange(length) # range(length)
y = np.arange(1, length)
return np.array(np.meshgrid(x, y)).T.reshape(-1, 2)
def a_element(r):
"""Coulomb contribution of two Gaussians"""
return erf(ETA / SQRT2 * r) / r
def b_element(r, q):
"""Coulomb contribution of a Gaussian with a point charge"""
return q * erf(ETA * r) / r
a = 1 # nearest neighbor distance i.e. lattice constant / sqrt(2)
x_elec = [-2, 2]
x_elyt = [-1, 1]
q_elyt = [0.5, -0.5]
distance_plates = x_elec[1] - x_elec[0] # distance between plates
v = np.array([-0.5, 0.5]) * (QE2F / COULOMB)
# distances to images within electrode and to opposite electrode
distances = a * np.linalg.norm(lattice(LENGTH), axis=1)
opposite_distances = np.sqrt(np.square(distances) + distance_plates ** 2)
# self interaction and within original box
A_11 = np.sqrt(2 / np.pi) * ETA
A_12 = erf(ETA * distance_plates / SQRT2) / distance_plates
# interaction with periodic images
A_11 += 4 * np.sum(a_element(distances))
A_12 += 4 * np.sum(a_element(opposite_distances))
A = np.array([[A_11, A_12], [A_12, A_11]])
inv = np.linalg.inv(A)
e = np.array([1, 1])
inv -= np.matmul(inv, np.matmul(np.outer(e, e), inv)) / np.dot(e, np.dot(inv, e))
# electrode-electrolyte interaction
b = []
for x in x_elec:
bi = 0
for y, q in zip(x_elyt, q_elyt):
d = abs(y - x)
bi += b_element(d, q)
image_distances = np.sqrt(np.square(distances) + d ** 2)
bi += 4 * np.sum(b_element(image_distances, q))
b.append(bi)
b = np.array(b)
# electrolyte-electrolyte energy
elyt_11 = 4 * np.sum(1 / distances)
distance_elyt = x_elyt[1] - x_elyt[0]
elyt_12 = 1 / distance_elyt + 4 * np.sum(
1 / np.sqrt(np.square(distances) + distance_elyt ** 2)
)
elyt = np.array([[elyt_11, elyt_12], [elyt_12, elyt_11]])
energy_elyt = 0.5 * np.dot(q_elyt, np.dot(elyt, q_elyt))
# electrode charges and energy
q = np.dot(inv, v - b)
energy = COULOMB * (0.5 * np.dot(q, np.dot(A, q)) + np.dot(b, q) + energy_elyt)
print(
"length, energy / kcal/mol, q1 / e, q2 / e, inv11 / A, inv12 / A, b1 / e/A, b2 / e/A"
)
print(
", ".join(
[
str(LENGTH),
f"{energy:.8f}",
f"{q[0]:.10f}",
f"{q[1]:.10f}",
f"{inv[0, 0]:.10f}",
f"{inv[0, 1]:.10f}",
f"{b[0]:.8f}",
f"{b[1]:.8f}",
]
)
)

View File

@ -0,0 +1,22 @@
# 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 12
read_data "data.au-elyt"
group bot type 1
group top type 2
# get electrode charges
variable q atom q
compute qbot bot reduce sum v_q
compute qtop top reduce sum v_q
compute compute_pe all pe
variable vpe equal c_compute_pe
variable charge equal c_qtop
fix fxprint all print 1 "${vpe}, ${charge}" file "out.csv"

View File

@ -0,0 +1,23 @@
#!/bin/bash -e
lmpbin=$1
if [ ! -f $lmpbin ]; then
echo "LAMMPS binary '$lmpbin' is not a file"
exit 1
fi
ref_out="plate_cap.csv"
if [ ! -f $ref_out ]; then
echo "Generating reference data"
python3 plate_cap.py > $ref_out
fi
echo "Running Lammps inputs"
rm -rf madelung.txt && touch madelung.txt
for file in in.*; do
printf "\n$file\n" >> madelung.txt
rm -f out.csv inv.csv vec.csv
$lmpbin -i $file &> /dev/null
python3 eval.py $ref_out out.csv inv.csv vec.csv
done
cat madelung.txt

View File

@ -0,0 +1,2 @@
top_wall.csv
data.pistoned

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,65 @@
# The intention is to find the average position of one wall at atmospheric
# pressure. The output is the wall position over time which can be used to
# find the average position for a run with fixed wall position.
#
# ----------------- Init Section -----------------
atom_style full
units real
boundary p p f
kspace_style pppm/electrode 1e-4
kspace_modify slab 3.0
pair_style lj/cut/coul/long 8 8
bond_style harmonic
angle_style harmonic
if "$(extract_setting(world_size) % 2) == 0" then "processors * * 2"
# ----------------- Atom Definition Section -----------------
read_data "data.piston"
# ----------------- Settings Section -----------------
pair_coeff 1 1 0.069 2.78
pair_coeff 2 2 5.29 2.951
pair_coeff 3 3 0.1553 3.166
pair_coeff 4 4 0.0 0.0
bond_coeff 1 600.0 1.0
angle_coeff 1 75.0 109.47
group wall type 1
group gold type 2
group spce type 3:4
group ele union wall gold
fix fRattleSPCE spce shake 0.0001 10 0 b 1 a 1
pair_modify mix arithmetic
# ----------------- Run Section -----------------
neigh_modify every 1 delay 0
timestep 2
fix fxnvt spce nvt temp 300 300 500
fix fxforce_au gold setforce 0.0 0.0 0.0
# equilibrate z-coordinate of upper electrode while keeping the electrode rigid
fix fxforce_wa wall setforce 0.0 0.0 NULL
fix fxpressure wall aveforce 0 0 -0.005246 # atomspheric pressure: area/force->nktv2p
fix fxdrag wall viscous 100
fix fxrigid wall rigid/nve single
# maintain constant potential during equilibration
# 'algo cg' allows for moving electrodes
fix fxele ele electrode/conp 0.0 1.805 symm on algo cg 1e-4
# setup output and run
variable q atom q
compute qwa wall reduce sum v_q
compute qau gold reduce sum v_q
variable top_wall equal (bound(wall,zmin))
compute temp_mobile spce temp
variable s equal step
fix fxprint all print 1000 "${s} ${top_wall}" file top_wall.csv screen no
thermo_style custom step c_temp_mobile c_qwa c_qau v_top_wall
thermo 5000
run 100000
write_data "data.piston.final"

View File

@ -0,0 +1,223 @@
LAMMPS (3 Nov 2022)
# The intention is to find the average position of one wall at atmospheric
# pressure. The output is the wall position over time which can be used to
# find the average position for a run with fixed wall position.
#
# ----------------- Init Section -----------------
atom_style full
units real
boundary p p f
kspace_style pppm/electrode 1e-4
kspace_modify slab 3.0
pair_style lj/cut/coul/long 8 8
bond_style harmonic
angle_style harmonic
if "$(extract_setting(world_size) % 2) == 0" then "processors * * 2"
# ----------------- Atom Definition Section -----------------
read_data "data.piston"
Reading data file ...
orthogonal box = (0 0 0) to (17.6494 20.3798 26)
1 by 1 by 1 MPI processor grid
reading atoms ...
726 atoms
reading velocities ...
726 velocities
scanning bonds ...
2 = max bonds/atom
scanning angles ...
1 = max angles/atom
reading bonds ...
420 bonds
reading angles ...
210 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.011 seconds
# ----------------- Settings Section -----------------
pair_coeff 1 1 0.069 2.78
pair_coeff 2 2 5.29 2.951
pair_coeff 3 3 0.1553 3.166
pair_coeff 4 4 0.0 0.0
bond_coeff 1 600.0 1.0
angle_coeff 1 75.0 109.47
group wall type 1
48 atoms in group wall
group gold type 2
48 atoms in group gold
group spce type 3:4
630 atoms in group spce
group ele union wall gold
96 atoms in group ele
fix fRattleSPCE spce shake 0.0001 10 0 b 1 a 1
Finding SHAKE clusters ...
0 = # of size 2 clusters
0 = # of size 3 clusters
0 = # of size 4 clusters
210 = # of frozen angles
find clusters CPU = 0.000 seconds
pair_modify mix arithmetic
# ----------------- Run Section -----------------
neigh_modify every 1 delay 0
timestep 2
fix fxnvt spce nvt temp 300 300 500
fix fxforce_au gold setforce 0.0 0.0 0.0
# equilibrate z-coordinate of upper electrode while keeping the electrode rigid
fix fxforce_wa wall setforce 0.0 0.0 NULL
fix fxpressure wall aveforce 0 0 -0.005246 # atomspheric pressure: area/force->nktv2p
fix fxdrag wall viscous 100
fix fxrigid wall rigid/nve single
1 rigid bodies with 48 atoms
# maintain constant potential during equilibration
# 'algo cg' allows for moving electrodes
fix fxele ele electrode/conp 0.0 1.805 symm on algo cg 1e-4
96 atoms in group conp_group
# setup output and run
variable q atom q
compute qwa wall reduce sum v_q
compute qau gold reduce sum v_q
variable top_wall equal (bound(wall,zmin))
compute temp_mobile spce temp
variable s equal step
fix fxprint all print 1000 "${s} ${top_wall}" file top_wall.csv screen no
thermo_style custom step c_temp_mobile c_qwa c_qau v_top_wall
thermo 5000
run 100000
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
Your simulation uses code contributions which should be cited:
- kspace_style pppm/electrode command:
@article{Ahrens2021,
author = {Ahrens-Iwers, Ludwig J.V. and Mei{\ss}ner, Robert H.},
doi = {10.1063/5.0063381},
title = {{Constant potential simulations on a mesh}},
journal = {Journal of Chemical Physics},
year = {2021}
volume = {155},
pages = {104104},
}
- fix electrode command:
@article{Ahrens2022
author = {Ahrens-Iwers, Ludwig J.V. and Janssen, Mahijs and Tee, Shern R. and Mei{\ss}ner, Robert H.},
doi = {10.1063/5.0099239},
title = {{ELECTRODE: An electrochemistry package for LAMMPS}},
journal = {The Journal of Chemical Physics},
year = {2022}
volume = {157},
pages = {084801},
}
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
PPPM/electrode initialization ...
using 12-bit tables for long-range coulomb (src/kspace.cpp:342)
G vector (1/distance) = 0.32814871
grid = 12 15 36
stencil order = 5
estimated absolute RMS force accuracy = 0.02930901
estimated relative force accuracy = 8.8263214e-05
using double precision MKL FFT
3d grid and FFT values/proc = 15884 6480
Generated 6 of 6 mixed pair_coeff terms from arithmetic mixing rule
Neighbor list info ...
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 10
ghost atom cutoff = 10
binsize = 5, bins = 4 5 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) = 11.7 | 11.7 | 11.7 Mbytes
Step c_temp_mobile c_qwa c_qau v_top_wall
0 303.38967 -0.042963484 0.042963484 21.4018
5000 285.08828 -0.26105255 0.26105255 25.155629
10000 323.19176 -0.26264003 0.26264003 24.541676
15000 310.479 -0.27318148 0.27318148 23.141522
20000 295.18544 -0.11313444 0.11313444 23.828735
25000 295.38607 -0.25433086 0.25433086 23.673314
30000 288.0613 -0.30099901 0.30099901 23.438086
35000 278.5591 -0.15823576 0.15823576 24.311915
40000 303.95751 -0.19941381 0.19941381 23.69594
45000 279.026 -0.1659962 0.1659962 23.588604
50000 298.79278 -0.28866703 0.28866703 23.372508
55000 301.03353 -0.078370381 0.078370381 23.192985
60000 306.77965 -0.12807205 0.12807205 23.968574
65000 309.86008 -0.27162663 0.27162663 23.616704
70000 287.31116 -0.029751882 0.029751882 23.667495
75000 312.48654 -0.10759866 0.10759866 23.504105
80000 309.94267 -0.2558548 0.2558548 23.810576
85000 328.04389 -0.1575471 0.1575471 24.013437
90000 302.9806 -0.032002164 0.032002164 24.264432
95000 294.20804 -0.27797238 0.27797238 23.291758
100000 307.63019 -0.19047448 0.19047448 23.632147
Loop time of 530.844 on 1 procs for 100000 steps with 726 atoms
Performance: 32.552 ns/day, 0.737 hours/ns, 188.379 timesteps/s, 136.763 katom-step/s
100.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 | 190.47 | 190.47 | 190.47 | 0.0 | 35.88
Bond | 0.10754 | 0.10754 | 0.10754 | 0.0 | 0.02
Kspace | 73.179 | 73.179 | 73.179 | 0.0 | 13.79
Neigh | 24.209 | 24.209 | 24.209 | 0.0 | 4.56
Comm | 1.6857 | 1.6857 | 1.6857 | 0.0 | 0.32
Output | 0.0016861 | 0.0016861 | 0.0016861 | 0.0 | 0.00
Modify | 240.23 | 240.23 | 240.23 | 0.0 | 45.26
Other | | 0.9595 | | | 0.18
Nlocal: 726 ave 726 max 726 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Nghost: 2335 ave 2335 max 2335 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Neighs: 120271 ave 120271 max 120271 min
Histogram: 1 0 0 0 0 0 0 0 0 0
Total # of neighbors = 120271
Ave neighs/atom = 165.66253
Ave special neighs/atom = 1.7355372
Neighbor list builds = 7722
Dangerous builds = 0
write_data "data.piston.final"
System init for write_data ...
PPPM/electrode initialization ...
using 12-bit tables for long-range coulomb (src/kspace.cpp:342)
G vector (1/distance) = 0.32814871
grid = 12 15 36
stencil order = 5
estimated absolute RMS force accuracy = 0.029311365
estimated relative force accuracy = 8.8270304e-05
using double precision MKL FFT
3d grid and FFT values/proc = 15884 6480
Generated 6 of 6 mixed pair_coeff terms from arithmetic mixing rule
Average conjugate gradient steps: 1.981
Total wall time: 0:08:50

View File

@ -0,0 +1,224 @@
LAMMPS (3 Nov 2022)
# The intention is to find the average position of one wall at atmospheric
# pressure. The output is the wall position over time which can be used to
# find the average position for a run with fixed wall position.
#
# ----------------- Init Section -----------------
atom_style full
units real
boundary p p f
kspace_style pppm/electrode 1e-4
kspace_modify slab 3.0
pair_style lj/cut/coul/long 8 8
bond_style harmonic
angle_style harmonic
if "$(extract_setting(world_size) % 2) == 0" then "processors * * 2"
processors * * 2
# ----------------- Atom Definition Section -----------------
read_data "data.piston"
Reading data file ...
orthogonal box = (0 0 0) to (17.6494 20.3798 26)
1 by 2 by 2 MPI processor grid
reading atoms ...
726 atoms
reading velocities ...
726 velocities
scanning bonds ...
2 = max bonds/atom
scanning angles ...
1 = max angles/atom
reading bonds ...
420 bonds
reading angles ...
210 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.017 seconds
# ----------------- Settings Section -----------------
pair_coeff 1 1 0.069 2.78
pair_coeff 2 2 5.29 2.951
pair_coeff 3 3 0.1553 3.166
pair_coeff 4 4 0.0 0.0
bond_coeff 1 600.0 1.0
angle_coeff 1 75.0 109.47
group wall type 1
48 atoms in group wall
group gold type 2
48 atoms in group gold
group spce type 3:4
630 atoms in group spce
group ele union wall gold
96 atoms in group ele
fix fRattleSPCE spce shake 0.0001 10 0 b 1 a 1
Finding SHAKE clusters ...
0 = # of size 2 clusters
0 = # of size 3 clusters
0 = # of size 4 clusters
210 = # of frozen angles
find clusters CPU = 0.002 seconds
pair_modify mix arithmetic
# ----------------- Run Section -----------------
neigh_modify every 1 delay 0
timestep 2
fix fxnvt spce nvt temp 300 300 500
fix fxforce_au gold setforce 0.0 0.0 0.0
# equilibrate z-coordinate of upper electrode while keeping the electrode rigid
fix fxforce_wa wall setforce 0.0 0.0 NULL
fix fxpressure wall aveforce 0 0 -0.005246 # atomspheric pressure: area/force->nktv2p
fix fxdrag wall viscous 100
fix fxrigid wall rigid/nve single
1 rigid bodies with 48 atoms
# maintain constant potential during equilibration
# 'algo cg' allows for moving electrodes
fix fxele ele electrode/conp 0.0 1.805 symm on algo cg 1e-4
96 atoms in group conp_group
# setup output and run
variable q atom q
compute qwa wall reduce sum v_q
compute qau gold reduce sum v_q
variable top_wall equal (bound(wall,zmin))
compute temp_mobile spce temp
variable s equal step
fix fxprint all print 1000 "${s} ${top_wall}" file top_wall.csv screen no
thermo_style custom step c_temp_mobile c_qwa c_qau v_top_wall
thermo 5000
run 100000
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
Your simulation uses code contributions which should be cited:
- kspace_style pppm/electrode command:
@article{Ahrens2021,
author = {Ahrens-Iwers, Ludwig J.V. and Mei{\ss}ner, Robert H.},
doi = {10.1063/5.0063381},
title = {{Constant potential simulations on a mesh}},
journal = {Journal of Chemical Physics},
year = {2021}
volume = {155},
pages = {104104},
}
- fix electrode command:
@article{Ahrens2022
author = {Ahrens-Iwers, Ludwig J.V. and Janssen, Mahijs and Tee, Shern R. and Mei{\ss}ner, Robert H.},
doi = {10.1063/5.0099239},
title = {{ELECTRODE: An electrochemistry package for LAMMPS}},
journal = {The Journal of Chemical Physics},
year = {2022}
volume = {157},
pages = {084801},
}
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
PPPM/electrode initialization ...
using 12-bit tables for long-range coulomb (src/kspace.cpp:342)
G vector (1/distance) = 0.32814871
grid = 12 15 36
stencil order = 5
estimated absolute RMS force accuracy = 0.02930901
estimated relative force accuracy = 8.8263214e-05
using double precision MKL FFT
3d grid and FFT values/proc = 8512 2880
Generated 6 of 6 mixed pair_coeff terms from arithmetic mixing rule
Neighbor list info ...
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 10
ghost atom cutoff = 10
binsize = 5, bins = 4 5 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) = 10.06 | 10.22 | 10.41 Mbytes
Step c_temp_mobile c_qwa c_qau v_top_wall
0 303.38967 -0.042963484 0.042963484 21.4018
5000 292.03027 -0.19040435 0.19040435 24.581338
10000 309.52764 -0.48308301 0.48308301 23.776985
15000 295.00243 -0.16591109 0.16591109 23.672038
20000 293.5536 -0.086669084 0.086669084 23.426455
25000 303.0079 -0.16488112 0.16488112 23.862966
30000 306.31463 -0.23192653 0.23192653 23.819882
35000 303.66268 -0.2317907 0.2317907 23.495344
40000 301.39435 -0.34661329 0.34661329 23.657835
45000 291.61205 -0.30539427 0.30539427 23.437303
50000 298.65319 -0.096107034 0.096107034 23.57809
55000 282.65069 -0.14943539 0.14943539 23.823728
60000 310.64182 -0.17418813 0.17418813 23.286959
65000 308.47141 -0.02075662 0.02075662 23.91313
70000 292.5186 -0.080163162 0.080163162 23.96283
75000 270.13928 -0.029528648 0.029528648 23.488972
80000 322.10914 0.030761045 -0.030761045 23.47592
85000 310.60347 -0.24069996 0.24069996 23.987091
90000 294.35695 -0.070458235 0.070458235 23.397929
95000 308.69043 -0.2652581 0.2652581 23.473813
100000 318.71883 0.024035956 -0.024035956 23.449863
Loop time of 590.232 on 4 procs for 100000 steps with 726 atoms
Performance: 29.277 ns/day, 0.820 hours/ns, 169.425 timesteps/s, 123.003 katom-step/s
72.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 | 57.391 | 75.867 | 96.292 | 212.1 | 12.85
Bond | 0.10177 | 0.11042 | 0.12415 | 2.7 | 0.02
Kspace | 102.79 | 123.16 | 141.5 | 165.7 | 20.87
Neigh | 12.808 | 12.895 | 12.982 | 2.3 | 2.18
Comm | 18.885 | 19.973 | 21.064 | 24.0 | 3.38
Output | 0.0022573 | 0.0022749 | 0.0023225 | 0.1 | 0.00
Modify | 355.89 | 356.74 | 357.61 | 4.2 | 60.44
Other | | 1.478 | | | 0.25
Nlocal: 181.5 ave 207 max 169 min
Histogram: 2 0 1 0 0 0 0 0 0 1
Nghost: 1961.5 ave 1984 max 1926 min
Histogram: 1 0 0 0 0 0 1 0 1 1
Neighs: 30051 ave 41646 max 20775 min
Histogram: 1 1 0 0 0 0 1 0 0 1
Total # of neighbors = 120204
Ave neighs/atom = 165.57025
Ave special neighs/atom = 1.7355372
Neighbor list builds = 7663
Dangerous builds = 0
write_data "data.piston.final"
System init for write_data ...
PPPM/electrode initialization ...
using 12-bit tables for long-range coulomb (src/kspace.cpp:342)
G vector (1/distance) = 0.32814871
grid = 12 15 36
stencil order = 5
estimated absolute RMS force accuracy = 0.029311028
estimated relative force accuracy = 8.8269289e-05
using double precision MKL FFT
3d grid and FFT values/proc = 8512 2880
Generated 6 of 6 mixed pair_coeff terms from arithmetic mixing rule
Average conjugate gradient steps: 1.982
Total wall time: 0:09:50

View File

@ -1,4 +1,4 @@
LAMMPS (24 Mar 2022)
LAMMPS (3 Nov 2022)
boundary p p f
kspace_style ewald/electrode 1.0e-7
kspace_modify slab ew2d
@ -28,8 +28,8 @@ Finding 1-2 1-3 1-4 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
special bonds CPU = 0.001 seconds
read_data CPU = 0.005 seconds
group bot molecule 1
144 atoms in group bot
@ -67,6 +67,24 @@ thermo 1
thermo_style custom step v_v c_qbot c_qtop v_qtheory v_percdev
run 10
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
Your simulation uses code contributions which should be cited:
- fix electrode command:
@article{Ahrens2022
author = {Ahrens-Iwers, Ludwig J.V. and Janssen, Mahijs and Tee, Shern R. and Mei{\ss}ner, Robert H.},
doi = {10.1063/5.0099239},
title = {{ELECTRODE: An electrochemistry package for LAMMPS}},
journal = {The Journal of Chemical Physics},
year = {2022}
volume = {157},
pages = {084801},
}
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
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)
@ -76,9 +94,9 @@ WARNING: System is not charge neutral, net charge = 0.000219 (src/kspace.cpp:327
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
Generated 1 of 1 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update every 1 steps, delay 10 steps, check yes
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 16
ghost atom cutoff = 16
@ -94,7 +112,7 @@ Neighbor list info ...
pair build: copy
stencil: none
bin: none
Per MPI rank memory allocation (min/avg/max) = 15.93 | 15.93 | 15.93 Mbytes
Per MPI rank memory allocation (min/avg/max) = 15.94 | 15.94 | 15.94 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
@ -107,22 +125,22 @@ Per MPI rank memory allocation (min/avg/max) = 15.93 | 15.93 | 15.93 Mbytes
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
Loop time of 0.0451804 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
Performance: 19.123 ns/day, 1.255 hours/ns, 221.335 timesteps/s, 63.744 katom-step/s
100.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.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
Pair | 0.0046814 | 0.0046814 | 0.0046814 | 0.0 | 10.36
Bond | 1.293e-06 | 1.293e-06 | 1.293e-06 | 0.0 | 0.00
Kspace | 0.028302 | 0.028302 | 0.028302 | 0.0 | 62.64
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
Comm | 7.3611e-05 | 7.3611e-05 | 7.3611e-05 | 0.0 | 0.16
Output | 0.001128 | 0.001128 | 0.001128 | 0.0 | 2.50
Modify | 0.010919 | 0.010919 | 0.010919 | 0.0 | 24.17
Other | | 7.567e-05 | | | 0.17
Nlocal: 288 ave 288 max 288 min
Histogram: 1 0 0 0 0 0 0 0 0 0

View File

@ -1,4 +1,4 @@
LAMMPS (24 Mar 2022)
LAMMPS (3 Nov 2022)
boundary p p f
kspace_style ewald/electrode 1.0e-7
kspace_modify slab ew2d
@ -29,8 +29,8 @@ Finding 1-2 1-3 1-4 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
special bonds CPU = 0.003 seconds
read_data CPU = 0.009 seconds
group bot molecule 1
144 atoms in group bot
@ -68,6 +68,24 @@ thermo 1
thermo_style custom step v_v c_qbot c_qtop v_qtheory v_percdev
run 10
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
Your simulation uses code contributions which should be cited:
- fix electrode command:
@article{Ahrens2022
author = {Ahrens-Iwers, Ludwig J.V. and Janssen, Mahijs and Tee, Shern R. and Mei{\ss}ner, Robert H.},
doi = {10.1063/5.0099239},
title = {{ELECTRODE: An electrochemistry package for LAMMPS}},
journal = {The Journal of Chemical Physics},
year = {2022}
volume = {157},
pages = {084801},
}
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
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)
@ -77,9 +95,9 @@ WARNING: System is not charge neutral, net charge = 0.000219 (src/kspace.cpp:327
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
Generated 1 of 1 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update every 1 steps, delay 10 steps, check yes
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 16
ghost atom cutoff = 16
@ -95,7 +113,7 @@ Neighbor list info ...
pair build: copy
stencil: none
bin: none
Per MPI rank memory allocation (min/avg/max) = 15.96 | 15.96 | 15.96 Mbytes
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.030920491 0.030920491 0.031376826 -1.4543703
@ -108,22 +126,22 @@ Per MPI rank memory allocation (min/avg/max) = 15.96 | 15.96 | 15.96 Mbytes
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
Loop time of 0.022489 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
Performance: 38.419 ns/day, 0.625 hours/ns, 444.661 timesteps/s, 128.062 katom-step/s
91.6% 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
Pair | 0.0011688 | 0.0013694 | 0.0016077 | 0.4 | 6.09
Bond | 6.72e-07 | 7.59e-07 | 9.02e-07 | 0.0 | 0.00
Kspace | 0.0077542 | 0.0093901 | 0.010384 | 1.0 | 41.75
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
Comm | 0.0015392 | 0.0016945 | 0.00183 | 0.3 | 7.53
Output | 0.00084374 | 0.0010929 | 0.0015437 | 0.8 | 4.86
Modify | 0.007495 | 0.0084669 | 0.010081 | 1.1 | 37.65
Other | | 0.0004745 | | | 2.11
Nlocal: 72 ave 72 max 72 min
Histogram: 4 0 0 0 0 0 0 0 0 0

View File

@ -1,4 +1,4 @@
LAMMPS (24 Mar 2022)
LAMMPS (3 Nov 2022)
boundary p p f
kspace_style ewald/electrode 1.0e-7
kspace_modify slab 3.0 # ew3dc
@ -28,8 +28,8 @@ Finding 1-2 1-3 1-4 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
special bonds CPU = 0.001 seconds
read_data CPU = 0.004 seconds
group bot molecule 1
144 atoms in group bot
@ -67,6 +67,24 @@ thermo 1
thermo_style custom step v_v c_qbot c_qtop v_qtheory v_percdev
run 10
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
Your simulation uses code contributions which should be cited:
- fix electrode command:
@article{Ahrens2022
author = {Ahrens-Iwers, Ludwig J.V. and Janssen, Mahijs and Tee, Shern R. and Mei{\ss}ner, Robert H.},
doi = {10.1063/5.0099239},
title = {{ELECTRODE: An electrochemistry package for LAMMPS}},
journal = {The Journal of Chemical Physics},
year = {2022}
volume = {157},
pages = {084801},
}
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
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)
@ -76,9 +94,9 @@ WARNING: System is not charge neutral, net charge = 0.000219 (src/kspace.cpp:327
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
Generated 1 of 1 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update every 1 steps, delay 10 steps, check yes
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 16
ghost atom cutoff = 16
@ -94,7 +112,7 @@ Neighbor list info ...
pair build: copy
stencil: none
bin: none
Per MPI rank memory allocation (min/avg/max) = 27.27 | 27.27 | 27.27 Mbytes
Per MPI rank memory allocation (min/avg/max) = 27.29 | 27.29 | 27.29 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
@ -107,22 +125,22 @@ Per MPI rank memory allocation (min/avg/max) = 27.27 | 27.27 | 27.27 Mbytes
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
Loop time of 0.0243868 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
Performance: 35.429 ns/day, 0.677 hours/ns, 410.058 timesteps/s, 118.097 katom-step/s
100.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.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
Pair | 0.0041504 | 0.0041504 | 0.0041504 | 0.0 | 17.02
Bond | 8.92e-07 | 8.92e-07 | 8.92e-07 | 0.0 | 0.00
Kspace | 0.0046942 | 0.0046942 | 0.0046942 | 0.0 | 19.25
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
Comm | 6.7942e-05 | 6.7942e-05 | 6.7942e-05 | 0.0 | 0.28
Output | 0.0010799 | 0.0010799 | 0.0010799 | 0.0 | 4.43
Modify | 0.014311 | 0.014311 | 0.014311 | 0.0 | 58.69
Other | | 8.199e-05 | | | 0.34
Nlocal: 288 ave 288 max 288 min
Histogram: 1 0 0 0 0 0 0 0 0 0

View File

@ -1,4 +1,4 @@
LAMMPS (24 Mar 2022)
LAMMPS (3 Nov 2022)
boundary p p f
kspace_style ewald/electrode 1.0e-7
kspace_modify slab 3.0 # ew3dc
@ -29,8 +29,8 @@ Finding 1-2 1-3 1-4 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
special bonds CPU = 0.003 seconds
read_data CPU = 0.007 seconds
group bot molecule 1
144 atoms in group bot
@ -68,6 +68,24 @@ thermo 1
thermo_style custom step v_v c_qbot c_qtop v_qtheory v_percdev
run 10
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
Your simulation uses code contributions which should be cited:
- fix electrode command:
@article{Ahrens2022
author = {Ahrens-Iwers, Ludwig J.V. and Janssen, Mahijs and Tee, Shern R. and Mei{\ss}ner, Robert H.},
doi = {10.1063/5.0099239},
title = {{ELECTRODE: An electrochemistry package for LAMMPS}},
journal = {The Journal of Chemical Physics},
year = {2022}
volume = {157},
pages = {084801},
}
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
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)
@ -77,9 +95,9 @@ WARNING: System is not charge neutral, net charge = 0.000219 (src/kspace.cpp:327
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
Generated 1 of 1 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update every 1 steps, delay 10 steps, check yes
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 16
ghost atom cutoff = 16
@ -95,7 +113,7 @@ Neighbor list info ...
pair build: copy
stencil: none
bin: none
Per MPI rank memory allocation (min/avg/max) = 27.31 | 27.31 | 27.31 Mbytes
Per MPI rank memory allocation (min/avg/max) = 27.32 | 27.32 | 27.32 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
@ -108,22 +126,22 @@ Per MPI rank memory allocation (min/avg/max) = 27.31 | 27.31 | 27.31 Mbytes
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
Loop time of 0.0200123 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
Performance: 43.173 ns/day, 0.556 hours/ns, 499.692 timesteps/s, 143.911 katom-step/s
90.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 | 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
Pair | 0.0014059 | 0.0015013 | 0.0015856 | 0.2 | 7.50
Bond | 7.12e-07 | 8.9675e-07 | 1.19e-06 | 0.0 | 0.00
Kspace | 0.0036091 | 0.0037586 | 0.0039024 | 0.2 | 18.78
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
Comm | 0.0017095 | 0.0017404 | 0.001775 | 0.1 | 8.70
Output | 0.00092975 | 0.0010846 | 0.0015398 | 0.8 | 5.42
Modify | 0.011292 | 0.011375 | 0.011438 | 0.1 | 56.84
Other | | 0.0005509 | | | 2.75
Nlocal: 72 ave 72 max 72 min
Histogram: 4 0 0 0 0 0 0 0 0 0

View File

@ -1,4 +1,4 @@
LAMMPS (24 Mar 2022)
LAMMPS (3 Nov 2022)
boundary p p p # finite field, fully periodic
kspace_style ewald/electrode 1.0e-7
@ -28,7 +28,7 @@ Finding 1-2 1-3 1-4 neighbors ...
0 = max # of 1-4 neighbors
1 = max # of special neighbors
special bonds CPU = 0.001 seconds
read_data CPU = 0.010 seconds
read_data CPU = 0.004 seconds
group bot molecule 1
144 atoms in group bot
@ -66,6 +66,24 @@ thermo 1
thermo_style custom step v_v c_qbot c_qtop v_qtheory v_percdev
run 10
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
Your simulation uses code contributions which should be cited:
- fix electrode command:
@article{Ahrens2022
author = {Ahrens-Iwers, Ludwig J.V. and Janssen, Mahijs and Tee, Shern R. and Mei{\ss}ner, Robert H.},
doi = {10.1063/5.0099239},
title = {{ELECTRODE: An electrochemistry package for LAMMPS}},
journal = {The Journal of Chemical Physics},
year = {2022}
volume = {157},
pages = {084801},
}
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
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)
@ -75,9 +93,9 @@ WARNING: System is not charge neutral, net charge = 0.000219 (src/kspace.cpp:327
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
Generated 1 of 1 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update every 1 steps, delay 10 steps, check yes
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 16
ghost atom cutoff = 16
@ -93,7 +111,7 @@ Neighbor list info ...
pair build: copy
stencil: none
bin: none
Per MPI rank memory allocation (min/avg/max) = 16.01 | 16.01 | 16.01 Mbytes
Per MPI rank memory allocation (min/avg/max) = 16.02 | 16.02 | 16.02 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
@ -106,22 +124,22 @@ Per MPI rank memory allocation (min/avg/max) = 16.01 | 16.01 | 16.01 Mbytes
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
Loop time of 0.0147727 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
Performance: 58.486 ns/day, 0.410 hours/ns, 676.926 timesteps/s, 194.955 katom-step/s
75.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.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
Pair | 0.0035163 | 0.0035163 | 0.0035163 | 0.0 | 23.80
Bond | 9.61e-07 | 9.61e-07 | 9.61e-07 | 0.0 | 0.01
Kspace | 0.0018156 | 0.0018156 | 0.0018156 | 0.0 | 12.29
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
Comm | 0.00012717 | 0.00012717 | 0.00012717 | 0.0 | 0.86
Output | 0.00083495 | 0.00083495 | 0.00083495 | 0.0 | 5.65
Modify | 0.0083949 | 0.0083949 | 0.0083949 | 0.0 | 56.83
Other | | 8.273e-05 | | | 0.56
Nlocal: 288 ave 288 max 288 min
Histogram: 1 0 0 0 0 0 0 0 0 0

View File

@ -1,4 +1,4 @@
LAMMPS (24 Mar 2022)
LAMMPS (3 Nov 2022)
boundary p p p # finite field, fully periodic
kspace_style ewald/electrode 1.0e-7
@ -28,8 +28,8 @@ Finding 1-2 1-3 1-4 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
special bonds CPU = 0.002 seconds
read_data CPU = 0.006 seconds
group bot molecule 1
144 atoms in group bot
@ -67,6 +67,24 @@ thermo 1
thermo_style custom step v_v c_qbot c_qtop v_qtheory v_percdev
run 10
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
Your simulation uses code contributions which should be cited:
- fix electrode command:
@article{Ahrens2022
author = {Ahrens-Iwers, Ludwig J.V. and Janssen, Mahijs and Tee, Shern R. and Mei{\ss}ner, Robert H.},
doi = {10.1063/5.0099239},
title = {{ELECTRODE: An electrochemistry package for LAMMPS}},
journal = {The Journal of Chemical Physics},
year = {2022}
volume = {157},
pages = {084801},
}
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
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)
@ -76,9 +94,9 @@ WARNING: System is not charge neutral, net charge = 0.000219 (src/kspace.cpp:327
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
Generated 1 of 1 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update every 1 steps, delay 10 steps, check yes
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 16
ghost atom cutoff = 16
@ -94,7 +112,7 @@ Neighbor list info ...
pair build: copy
stencil: none
bin: none
Per MPI rank memory allocation (min/avg/max) = 15.97 | 15.97 | 15.97 Mbytes
Per MPI rank memory allocation (min/avg/max) = 15.98 | 15.98 | 15.98 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
@ -107,22 +125,22 @@ Per MPI rank memory allocation (min/avg/max) = 15.97 | 15.97 | 15.97 Mbytes
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
Loop time of 0.0151333 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
Performance: 57.093 ns/day, 0.420 hours/ns, 660.794 timesteps/s, 190.309 katom-step/s
41.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 | 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
Pair | 0.0014606 | 0.0015586 | 0.0016093 | 0.1 | 10.30
Bond | 9.31e-07 | 1.0197e-06 | 1.084e-06 | 0.0 | 0.01
Kspace | 0.0014157 | 0.0015231 | 0.0016295 | 0.2 | 10.06
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
Comm | 0.0019994 | 0.0020111 | 0.0020282 | 0.0 | 13.29
Output | 0.00072893 | 0.00095378 | 0.0015177 | 0.0 | 6.30
Modify | 0.0081934 | 0.0082729 | 0.0083794 | 0.1 | 54.67
Other | | 0.0008128 | | | 5.37
Nlocal: 72 ave 72 max 72 min
Histogram: 4 0 0 0 0 0 0 0 0 0

View File

@ -1,4 +1,4 @@
LAMMPS (24 Mar 2022)
LAMMPS (3 Nov 2022)
boundary p p f
kspace_style pppm/electrode 1.0e-7
kspace_modify slab 3.0
@ -28,8 +28,8 @@ Finding 1-2 1-3 1-4 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
special bonds CPU = 0.001 seconds
read_data CPU = 0.004 seconds
group bot molecule 1
144 atoms in group bot
@ -67,6 +67,35 @@ thermo 1
thermo_style custom step v_v c_qbot c_qtop v_qtheory v_percdev
run 10
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
Your simulation uses code contributions which should be cited:
- kspace_style pppm/electrode command:
@article{Ahrens2021,
author = {Ahrens-Iwers, Ludwig J.V. and Mei{\ss}ner, Robert H.},
doi = {10.1063/5.0063381},
title = {{Constant potential simulations on a mesh}},
journal = {Journal of Chemical Physics},
year = {2021}
volume = {155},
pages = {104104},
}
- fix electrode command:
@article{Ahrens2022
author = {Ahrens-Iwers, Ludwig J.V. and Janssen, Mahijs and Tee, Shern R. and Mei{\ss}ner, Robert H.},
doi = {10.1063/5.0099239},
title = {{ELECTRODE: An electrochemistry package for LAMMPS}},
journal = {The Journal of Chemical Physics},
year = {2022}
volume = {157},
pages = {084801},
}
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
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)
@ -78,9 +107,9 @@ WARNING: System is not charge neutral, net charge = 0.000219 (src/kspace.cpp:327
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
Generated 1 of 1 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update every 1 steps, delay 10 steps, check yes
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 16
ghost atom cutoff = 16
@ -97,7 +126,7 @@ Neighbor list info ...
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
Per MPI rank memory allocation (min/avg/max) = 7.942 | 7.942 | 7.942 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
@ -110,22 +139,22 @@ Per MPI rank memory allocation (min/avg/max) = 7.93 | 7.93 | 7.93 Mbytes
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
Loop time of 0.0176221 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
Performance: 49.029 ns/day, 0.490 hours/ns, 567.471 timesteps/s, 163.432 katom-step/s
100.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
Pair | 0.0051407 | 0.0051407 | 0.0051407 | 0.0 | 29.17
Bond | 9.92e-07 | 9.92e-07 | 9.92e-07 | 0.0 | 0.01
Kspace | 0.0029456 | 0.0029456 | 0.0029456 | 0.0 | 16.72
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
Comm | 8.3497e-05 | 8.3497e-05 | 8.3497e-05 | 0.0 | 0.47
Output | 0.0012832 | 0.0012832 | 0.0012832 | 0.0 | 7.28
Modify | 0.0080737 | 0.0080737 | 0.0080737 | 0.0 | 45.82
Other | | 9.442e-05 | | | 0.54
Nlocal: 288 ave 288 max 288 min
Histogram: 1 0 0 0 0 0 0 0 0 0
@ -140,4 +169,4 @@ Ave special neighs/atom = 0
Neighbor list builds = 0
Dangerous builds = 0
Total wall time: 0:00:10
Total wall time: 0:00:01

View File

@ -1,4 +1,4 @@
LAMMPS (24 Mar 2022)
LAMMPS (3 Nov 2022)
boundary p p f
kspace_style pppm/electrode 1.0e-7
kspace_modify slab 3.0
@ -29,8 +29,8 @@ Finding 1-2 1-3 1-4 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
special bonds CPU = 0.003 seconds
read_data CPU = 0.007 seconds
group bot molecule 1
144 atoms in group bot
@ -68,6 +68,35 @@ thermo 1
thermo_style custom step v_v c_qbot c_qtop v_qtheory v_percdev
run 10
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
Your simulation uses code contributions which should be cited:
- kspace_style pppm/electrode command:
@article{Ahrens2021,
author = {Ahrens-Iwers, Ludwig J.V. and Mei{\ss}ner, Robert H.},
doi = {10.1063/5.0063381},
title = {{Constant potential simulations on a mesh}},
journal = {Journal of Chemical Physics},
year = {2021}
volume = {155},
pages = {104104},
}
- fix electrode command:
@article{Ahrens2022
author = {Ahrens-Iwers, Ludwig J.V. and Janssen, Mahijs and Tee, Shern R. and Mei{\ss}ner, Robert H.},
doi = {10.1063/5.0099239},
title = {{ELECTRODE: An electrochemistry package for LAMMPS}},
journal = {The Journal of Chemical Physics},
year = {2022}
volume = {157},
pages = {084801},
}
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
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)
@ -79,9 +108,9 @@ WARNING: System is not charge neutral, net charge = 0.000219 (src/kspace.cpp:327
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
Generated 1 of 1 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update every 1 steps, delay 10 steps, check yes
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 16
ghost atom cutoff = 16
@ -98,7 +127,7 @@ Neighbor list info ...
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
Per MPI rank memory allocation (min/avg/max) = 7.725 | 7.774 | 7.823 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
@ -111,22 +140,22 @@ Per MPI rank memory allocation (min/avg/max) = 7.716 | 7.765 | 7.814 Mbytes
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
Loop time of 0.0162257 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
Performance: 53.249 ns/day, 0.451 hours/ns, 616.306 timesteps/s, 177.496 katom-step/s
50.4% 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
Pair | 0.0010955 | 0.0013022 | 0.0014351 | 0.3 | 8.03
Bond | 6.13e-07 | 7.795e-07 | 1.031e-06 | 0.0 | 0.00
Kspace | 0.0034606 | 0.003541 | 0.0036869 | 0.2 | 21.82
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
Comm | 0.0015915 | 0.0017672 | 0.0019298 | 0.3 | 10.89
Output | 0.00071528 | 0.00095256 | 0.001506 | 0.0 | 5.87
Modify | 0.0080243 | 0.0080738 | 0.0081204 | 0.0 | 49.76
Other | | 0.0005881 | | | 3.62
Nlocal: 72 ave 72 max 72 min
Histogram: 4 0 0 0 0 0 0 0 0 0
@ -141,4 +170,4 @@ Ave special neighs/atom = 0
Neighbor list builds = 0
Dangerous builds = 0
Total wall time: 0:00:03
Total wall time: 0:00:00

View File

@ -1,4 +1,4 @@
LAMMPS (24 Mar 2022)
LAMMPS (3 Nov 2022)
boundary p p p # finite field, fully periodic
kspace_style pppm/electrode 1.0e-7
@ -28,7 +28,7 @@ Finding 1-2 1-3 1-4 neighbors ...
0 = max # of 1-4 neighbors
1 = max # of special neighbors
special bonds CPU = 0.001 seconds
read_data CPU = 0.006 seconds
read_data CPU = 0.004 seconds
group bot molecule 1
144 atoms in group bot
@ -66,6 +66,35 @@ thermo 1
thermo_style custom step v_v c_qbot c_qtop v_qtheory v_percdev
run 10
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
Your simulation uses code contributions which should be cited:
- kspace_style pppm/electrode command:
@article{Ahrens2021,
author = {Ahrens-Iwers, Ludwig J.V. and Mei{\ss}ner, Robert H.},
doi = {10.1063/5.0063381},
title = {{Constant potential simulations on a mesh}},
journal = {Journal of Chemical Physics},
year = {2021}
volume = {155},
pages = {104104},
}
- fix electrode command:
@article{Ahrens2022
author = {Ahrens-Iwers, Ludwig J.V. and Janssen, Mahijs and Tee, Shern R. and Mei{\ss}ner, Robert H.},
doi = {10.1063/5.0099239},
title = {{ELECTRODE: An electrochemistry package for LAMMPS}},
journal = {The Journal of Chemical Physics},
year = {2022}
volume = {157},
pages = {084801},
}
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
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)
@ -77,9 +106,9 @@ WARNING: System is not charge neutral, net charge = 0.000219 (src/kspace.cpp:327
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
Generated 1 of 1 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update every 1 steps, delay 10 steps, check yes
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 16
ghost atom cutoff = 16
@ -96,7 +125,7 @@ Neighbor list info ...
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
Per MPI rank memory allocation (min/avg/max) = 7.871 | 7.871 | 7.871 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
@ -109,22 +138,22 @@ Per MPI rank memory allocation (min/avg/max) = 7.86 | 7.86 | 7.86 Mbytes
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
Loop time of 0.0150845 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
Performance: 57.277 ns/day, 0.419 hours/ns, 662.933 timesteps/s, 190.925 katom-step/s
90.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 | 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
Pair | 0.0052281 | 0.0052281 | 0.0052281 | 0.0 | 34.66
Bond | 9.72e-07 | 9.72e-07 | 9.72e-07 | 0.0 | 0.01
Kspace | 0.0017267 | 0.0017267 | 0.0017267 | 0.0 | 11.45
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
Comm | 0.00016423 | 0.00016423 | 0.00016423 | 0.0 | 1.09
Output | 0.0010211 | 0.0010211 | 0.0010211 | 0.0 | 6.77
Modify | 0.0068532 | 0.0068532 | 0.0068532 | 0.0 | 45.43
Other | | 9.022e-05 | | | 0.60
Nlocal: 288 ave 288 max 288 min
Histogram: 1 0 0 0 0 0 0 0 0 0
@ -138,4 +167,4 @@ Ave neighs/atom = 92
Ave special neighs/atom = 0
Neighbor list builds = 0
Dangerous builds = 0
Total wall time: 0:00:09
Total wall time: 0:00:01

View File

@ -1,4 +1,4 @@
LAMMPS (24 Mar 2022)
LAMMPS (3 Nov 2022)
boundary p p p # finite field, fully periodic
kspace_style pppm/electrode 1.0e-7
@ -28,8 +28,8 @@ Finding 1-2 1-3 1-4 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
special bonds CPU = 0.002 seconds
read_data CPU = 0.006 seconds
group bot molecule 1
144 atoms in group bot
@ -67,6 +67,35 @@ thermo 1
thermo_style custom step v_v c_qbot c_qtop v_qtheory v_percdev
run 10
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
Your simulation uses code contributions which should be cited:
- kspace_style pppm/electrode command:
@article{Ahrens2021,
author = {Ahrens-Iwers, Ludwig J.V. and Mei{\ss}ner, Robert H.},
doi = {10.1063/5.0063381},
title = {{Constant potential simulations on a mesh}},
journal = {Journal of Chemical Physics},
year = {2021}
volume = {155},
pages = {104104},
}
- fix electrode command:
@article{Ahrens2022
author = {Ahrens-Iwers, Ludwig J.V. and Janssen, Mahijs and Tee, Shern R. and Mei{\ss}ner, Robert H.},
doi = {10.1063/5.0099239},
title = {{ELECTRODE: An electrochemistry package for LAMMPS}},
journal = {The Journal of Chemical Physics},
year = {2022}
volume = {157},
pages = {084801},
}
CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE-CITE
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)
@ -78,9 +107,9 @@ WARNING: System is not charge neutral, net charge = 0.000219 (src/kspace.cpp:327
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
Generated 1 of 1 mixed pair_coeff terms from geometric mixing rule
Neighbor list info ...
update every 1 steps, delay 10 steps, check yes
update: every = 1 steps, delay = 0 steps, check = yes
max neighbors/atom: 2000, page size: 100000
master list distance cutoff = 16
ghost atom cutoff = 16
@ -97,7 +126,7 @@ Neighbor list info ...
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
Per MPI rank memory allocation (min/avg/max) = 7.721 | 7.721 | 7.721 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
@ -110,22 +139,22 @@ Per MPI rank memory allocation (min/avg/max) = 7.712 | 7.712 | 7.712 Mbytes
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
Loop time of 0.0169132 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
Performance: 51.084 ns/day, 0.470 hours/ns, 591.252 timesteps/s, 170.281 katom-step/s
49.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
Pair | 0.00098343 | 0.0013515 | 0.0015461 | 0.6 | 7.99
Bond | 6.21e-07 | 6.81e-07 | 7.3e-07 | 0.0 | 0.00
Kspace | 0.0036673 | 0.0038144 | 0.004106 | 0.3 | 22.55
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
Comm | 0.0015601 | 0.0016528 | 0.0017294 | 0.2 | 9.77
Output | 0.00072013 | 0.00087465 | 0.0012429 | 0.0 | 5.17
Modify | 0.0086712 | 0.0087641 | 0.0089049 | 0.1 | 51.82
Other | | 0.0004551 | | | 2.69
Nlocal: 72 ave 72 max 72 min
Histogram: 4 0 0 0 0 0 0 0 0 0
@ -139,4 +168,4 @@ Ave neighs/atom = 92
Ave special neighs/atom = 0
Neighbor list builds = 0
Dangerous builds = 0
Total wall time: 0:00:03
Total wall time: 0:00:00

View File

@ -19,34 +19,18 @@
#include "atom.h"
#include "comm.h"
#include "domain.h"
#include "force.h"
#include "kspace.h"
using namespace LAMMPS_NS;
// use EW3DC slab correction
//
BoundaryCorrection::BoundaryCorrection(LAMMPS *lmp) : Pointers(lmp) {}
void BoundaryCorrection::setup(double x, double y, double z)
double BoundaryCorrection::get_volume()
{
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;
return domain->xprd * force->kspace->wire_volfactor * domain->yprd *
force->kspace->wire_volfactor * domain->zprd * force->kspace->slab_volfactor;
}
std::vector<int> BoundaryCorrection::gather_recvcounts(int n)

View File

@ -27,20 +27,10 @@ class BoundaryCorrection : protected Pointers {
BoundaryCorrection(LAMMPS *);
virtual void vector_corr(double *, int, int, bool){};
virtual void matrix_corr(bigint *, double **){};
virtual void compute_corr(double, double, int, int, double &, double *){};
void setup(double, double, double);
void setup(double, double, double, double);
virtual void compute_corr(double, int, int, double &, double *){};
protected:
double area;
double volume;
double xprd_wire;
double yprd_wire;
double zprd_slab;
double qqrd2e;
double scale;
double g_ewald;
double get_volume();
std::vector<bigint> gather_jmat(bigint *);
std::vector<int> gather_recvcounts(int);
std::vector<int> gather_displs(const std::vector<int> &);

View File

@ -82,7 +82,9 @@ void ElectrodeMatrix::compute_array(double **array, bool 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));
//cout << array[0][0] << ", " << array[0][1] << endl;
pair_contribution(array);
//cout << array[0][0] << ", " << array[0][1] << endl;
self_contribution(array);
electrode_kspace->compute_matrix_corr(&mpos[0], array);
if (tfflag) tf_contribution(array);
@ -110,7 +112,7 @@ void ElectrodeMatrix::pair_contribution(double **array)
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)
double const 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;

View File

@ -25,10 +25,12 @@
#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;
ElectrodeVector::ElectrodeVector(LAMMPS *lmp, int sensor_group, int source_group, double eta,
bool invert_source) :
@ -41,6 +43,7 @@ ElectrodeVector::ElectrodeVector(LAMMPS *lmp, int sensor_group, int source_group
ngroup = group->count(igroup);
source_grpbit = group->bitmask[source_group];
this->eta = eta;
tfflag = false;
kspace_time_total = 0;
pair_time_total = 0;
@ -79,6 +82,14 @@ void ElectrodeVector::setup(class Pair *fix_pair, class NeighList *fix_neighlist
/* ---------------------------------------------------------------------- */
void ElectrodeVector::setup_tf(const std::map<int, double> &tf_types)
{
tfflag = true;
this->tf_types = tf_types;
}
/* ---------------------------------------------------------------------- */
void ElectrodeVector::compute_vector(double *vector)
{
MPI_Barrier(world);
@ -86,6 +97,8 @@ void ElectrodeVector::compute_vector(double *vector)
// pair
double pair_start_time = MPI_Wtime();
pair_contribution(vector);
self_contribution(vector);
if (tfflag) tf_contribution(vector);
MPI_Barrier(world);
pair_time_total += MPI_Wtime() - pair_start_time;
// kspace
@ -105,6 +118,7 @@ void ElectrodeVector::compute_vector(double *vector)
void ElectrodeVector::pair_contribution(double *vector)
{
double const etaij = eta * MY_ISQRT2;
double **x = atom->x;
double *q = atom->q;
int *type = atom->type;
@ -121,6 +135,7 @@ void ElectrodeVector::pair_contribution(double *vector)
int const i = ilist[ii];
bool const i_in_sensor = (mask[i] & groupbit);
bool const i_in_source = !!(mask[i] & source_grpbit) != invert_source;
if (!(i_in_sensor || i_in_source)) continue;
double const xtmp = x[i][0];
double const ytmp = x[i][1];
double const ztmp = x[i][2];
@ -144,12 +159,53 @@ void ElectrodeVector::pair_contribution(double *vector)
double const rinv = 1.0 / r;
double aij = rinv;
aij *= ElectrodeMath::safe_erfc(g_ewald * r);
aij -= ElectrodeMath::safe_erfc(eta * r) * rinv;
if (invert_source)
aij -= ElectrodeMath::safe_erfc(eta * r) * rinv;
else
aij -= ElectrodeMath::safe_erfc(etaij * r) * rinv;
if (i_in_sensor) {
vector[i] += aij * q[j];
} else if (j_in_sensor) {
vector[j] += aij * q[i];
//} else if (j_in_sensor) {
}
if (j_in_sensor && (!invert_source || !i_in_sensor)) { vector[j] += aij * q[i]; }
}
}
}
/* ---------------------------------------------------------------------- */
void ElectrodeVector::self_contribution(double *vector)
{
int const inum = list->inum;
int *mask = atom->mask;
int *ilist = list->ilist;
double *q = atom->q;
const double selfint = 2.0 / MY_PIS * g_ewald;
const double preta = MY_SQRT2 / MY_PIS;
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;
if (i_in_sensor && i_in_source) vector[i] += (preta * eta - selfint) * q[i];
}
}
/* ---------------------------------------------------------------------- */
void ElectrodeVector::tf_contribution(double *vector)
{
int const inum = list->inum;
int *mask = atom->mask;
int *type = atom->type;
int *ilist = list->ilist;
double *q = atom->q;
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;
if (i_in_sensor && i_in_source) vector[i] += tf_types[type[i]] * q[i];
}
}

View File

@ -19,6 +19,7 @@
#define LMP_ELECTRODE_VECTOR_H
#include "pointers.h"
#include <map>
namespace LAMMPS_NS {
@ -27,6 +28,7 @@ class ElectrodeVector : protected Pointers {
ElectrodeVector(class LAMMPS *, int, int, double, bool);
~ElectrodeVector() override;
void setup(class Pair *, class NeighList *, bool);
void setup_tf(const std::map<int, double> &);
void compute_vector(double *);
int igroup, source_group;
@ -36,11 +38,15 @@ class ElectrodeVector : protected Pointers {
bigint ngroup;
double **cutsq;
double g_ewald, eta;
bool tfflag;
std::map<int, double> tf_types;
class Pair *pair;
class NeighList *list;
class ElectrodeKSpace *electrode_kspace;
void pair_contribution(double *);
void self_contribution(double *);
void tf_contribution(double *);
double kspace_time_total;
double pair_time_total;

View File

@ -32,6 +32,7 @@
#include <algorithm>
#include <cmath>
#include <limits>
using namespace LAMMPS_NS;
using namespace MathConst;
@ -40,7 +41,7 @@ using namespace MathConst;
/* ---------------------------------------------------------------------- */
EwaldElectrode::EwaldElectrode(LAMMPS *lmp) : Ewald(lmp)
EwaldElectrode::EwaldElectrode(LAMMPS *lmp) : Ewald(lmp), boundcorr(nullptr)
{
eikr_step = -1;
}
@ -88,6 +89,7 @@ void EwaldElectrode::init()
};
int periodicity_2d[] = {1, 1, 0};
int periodicity_1d[] = {0, 0, 1};
if (boundcorr != nullptr) delete boundcorr;
if (slabflag == 1) {
// EW3Dc dipole correction
if (!equal_periodicity(periodicity_2d))
@ -301,7 +303,6 @@ void EwaldElectrode::setup()
memory->create3d_offset(sn, -kmax, kmax, 3, nmax, "ewald/electrode:sn");
kmax_created = kmax;
}
boundcorr->setup(xprd_wire, yprd_wire, zprd_slab, g_ewald);
// pre-compute Ewald coefficients
@ -418,7 +419,7 @@ void EwaldElectrode::compute(int eflag, int vflag)
for (int j = 0; j < 6; j++) vatom[i][j] *= q[i] * qscale;
}
boundcorr->compute_corr(qsum, slab_volfactor, eflag_atom, eflag_global, energy, eatom);
boundcorr->compute_corr(qsum, eflag_atom, eflag_global, energy, eatom);
}
/* ---------------------------------------------------------------------- */
@ -1007,7 +1008,8 @@ void EwaldElectrode::compute_matrix(bigint *imat, double **matrix, bool /* timer
n++;
}
// TODO check if ((bigint) kxmax+1)*ngroup overflows ...
if (((bigint) kxmax + 1) * ngroup > INT_MAX)
error->all(FLERR, "kmax is too large, integer overflows might occur.");
memory->create(csx_all, ((bigint) kxmax + 1) * ngroup, "ewald/electrode:csx_all");
memory->create(snx_all, ((bigint) kxmax + 1) * ngroup, "ewald/electrode:snx_all");
@ -1018,15 +1020,12 @@ void EwaldElectrode::compute_matrix(bigint *imat, double **matrix, bool /* timer
memory->create(jmat, ngroup, "ewald/electrode:jmat");
int *recvcounts, *displs; // TODO allgather requires int for displs but
// displs might overflow!
int *recvcounts, *displs;
memory->create(recvcounts, nprocs, "ewald/electrode:recvcounts");
memory->create(displs, nprocs, "ewald/electrode:displs");
// gather subsets global cs and sn
int n = (kxmax + 1) * ngrouplocal;
// TODO check if (kxmax+1)*ngrouplocal, etc.
// overflows int n! typically kxmax small
MPI_Allgather(&n, 1, MPI_INT, recvcounts, 1, MPI_INT, world);
displs[0] = 0;

File diff suppressed because it is too large Load Diff

View File

@ -31,11 +31,13 @@ FixStyle(electrode/conp, FixElectrodeConp);
#include <algorithm>
#include <map>
#include <memory>
#include <unordered_map>
namespace LAMMPS_NS {
class FixElectrodeConp : public Fix {
public:
FixElectrodeConp(class LAMMPS *, int, char **);
~FixElectrodeConp() override;
@ -47,6 +49,7 @@ class FixElectrodeConp : public Fix {
void pre_reverse(int, int) override;
double compute_scalar() override;
double compute_vector(int) override;
double compute_array(int, int) override;
int modify_param(int, char **) override;
int modify_param(const std::string &);
void init() override;
@ -60,54 +63,64 @@ class FixElectrodeConp : public Fix {
int pack_reverse_comm(int, int, double *) override;
void unpack_reverse_comm(int, int *, double *) override;
int pack_forward_comm(int, int *, double *, int, int *) override;
void unpack_forward_comm(int, int, double *) override;
protected:
enum class Algo { MATRIX_INV, MATRIX_CG, CG };
enum class VarStyle { CONST, EQUAL };
virtual void update_psi();
virtual void pre_update(){};
virtual void recompute_potential(std::vector<double>, std::vector<double>){};
virtual std::vector<double> constraint_projection(std::vector<double>);
virtual std::vector<double> constraint_correction(std::vector<double>);
virtual void compute_macro_matrices();
std::vector<double> ele_ele_interaction(std::vector<double>);
std::vector<double> group_psi;
std::vector<int> group_bits;
std::vector<int> groups;
int num_of_groups;
bigint ngroup;
double evscale;
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<int> group_psi_var_ids;
std::vector<VarStyle> 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<int> iele_to_group_local;
bool symm; // symmetrize elastance for charge neutrality
Algo algo;
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
std::unique_ptr<ElectrodeAccelInterface> accel_interface; // used by /intel
private:
FILE *f_inv, *f_mat, *f_vec; // files for capacitance, eleastance and vector
std::string output_file_inv, output_file_mat, output_file_vec;
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;
class ElectrodeVector *elyt_vector, *elec_vector;
double **capacitance, **elastance;
bool read_inv, read_mat, write_inv, write_mat, write_vec;
bool matrix_algo, need_array_compute, need_elec_vector;
double eta, cg_threshold;
double update_time, mult_time;
long n_cg_step, n_call;
void create_taglist();
void invert();
void symmetrize();
double gausscorr(int, bool);
void update_charges();
double potential_energy(int);
double potential_energy();
double self_energy(int);
void write_to_file(FILE *, const std::vector<tagint> &, const std::vector<std::vector<double>> &);
void read_from_file(const 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;
@ -119,12 +132,21 @@ class FixElectrodeConp : public Fix {
bool tfflag;
bool timer_flag;
std::map<int, double> tf_types;
// cg
std::vector<double> scale_vector(double, std::vector<double>);
std::vector<double> add_nlocalele(std::vector<double>, std::vector<double>);
double dot_nlocalele(std::vector<double>, std::vector<double>);
std::vector<double> times_elastance(std::vector<double>);
std::vector<double> gather_ngroup(std::vector<double>);
std::vector<double> gather_elevec_local(ElectrodeVector *);
void set_charges(std::vector<double>);
// 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::vector<tagint> taglist; // global list: all tags in combined electrode group
std::vector<tagint> taglist_local;
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
@ -138,7 +160,6 @@ class FixElectrodeConp : public Fix {
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

View File

@ -17,44 +17,108 @@
#include "fix_electrode_conq.h"
#include "comm.h"
#include "error.h"
#include "fix_electrode_conp.h"
#include "group.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"); }
if (symm) {
if (num_of_groups == 1)
error->all(FLERR, "Keyword symm on not allowed in electrode/conq with only one electrode");
if (comm->me == 0)
error->warning(FLERR,
"Fix electrode/conq with keyword symm ignores the charge setting for the last "
"electrode listed");
if (algo != Algo::MATRIX_INV) {
double last_q = 0.;
for (int g = 0; g < num_of_groups - 1; g++) last_q -= group_q[g];
group_q.back() = last_q; // needed for CG algos
}
}
}
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;
int const numsymm = num_of_groups - ((symm) ? 1 : 0);
bool symm_update_back = false;
for (int g = 0; g < numsymm; g++) {
if (group_psi_var_styles[g] == VarStyle::CONST) continue;
group_q[g] = input->variable->compute_equal(group_psi_var_ids[g]);
symm_update_back = true;
}
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];
if (algo == Algo::MATRIX_INV) {
std::vector<double> group_remainder_q(num_of_groups, 0.);
for (int g = 0; g < numsymm; 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;
}
group_psi[g] = vtmp;
} else {
if (symm && symm_update_back) { // needed for CG algos
double last_q = 0.;
for (int g = 0; g < num_of_groups - 1; g++) last_q -= group_q[g];
group_q.back() = last_q;
}
for (double &g : group_psi) g = 0;
}
}
/* ----------------------------------------------------------------------
Correct charge of each electrode to target charge by adding a homogeneous charge
------------------------------------------------------------------------- */
std::vector<double> FixElectrodeConq::constraint_correction(std::vector<double> x)
{
int const n = x.size();
auto sums = std::vector<double>(num_of_groups, 0);
for (int i = 0; i < n; i++) sums[iele_to_group_local[i]] += x[i];
MPI_Allreduce(MPI_IN_PLACE, &sums.front(), num_of_groups, MPI_DOUBLE, MPI_SUM, world);
for (int g = 0; g < num_of_groups; g++) {
sums[g] -= group_q[g];
sums[g] /= group->count(groups[g]);
}
for (int i = 0; i < n; i++) x[i] -= sums[iele_to_group_local[i]];
return x;
}
/* ----------------------------------------------------------------------
Project into direction that conserves charge of each electrode (cf. M. Shariff (1995))
------------------------------------------------------------------------- */
std::vector<double> FixElectrodeConq::constraint_projection(std::vector<double> x)
{
int const n = x.size();
auto sums = std::vector<double>(num_of_groups, 0);
for (int i = 0; i < n; i++) sums[iele_to_group_local[i]] += x[i];
MPI_Allreduce(MPI_IN_PLACE, &sums.front(), num_of_groups, MPI_DOUBLE, MPI_SUM, world);
for (int g = 0; g < num_of_groups; g++) sums[g] /= group->count(groups[g]);
for (int i = 0; i < n; i++) x[i] -= sums[iele_to_group_local[i]];
return x;
}
/* ----------------------------------------------------------------------
Recompute group potential as average for output if using cg algo
------------------------------------------------------------------------- */
void FixElectrodeConq::recompute_potential(std::vector<double> b, std::vector<double> q_local)
{
int const n = b.size();
auto a = ele_ele_interaction(q_local);
auto psi_sums = std::vector<double>(num_of_groups, 0);
for (int i = 0; i < n; i++) { psi_sums[iele_to_group_local[i]] += (a[i] + b[i]) / evscale; }
MPI_Allreduce(MPI_IN_PLACE, &psi_sums.front(), num_of_groups, MPI_DOUBLE, MPI_SUM, world);
for (int g = 0; g < num_of_groups; g++) group_psi[g] = psi_sums[g] / group->count(groups[g]);
}

View File

@ -34,6 +34,9 @@ class FixElectrodeConq : public FixElectrodeConp {
public:
FixElectrodeConq(class LAMMPS *, int, char **);
void update_psi() override;
void recompute_potential(std::vector<double>, std::vector<double>) override;
std::vector<double> constraint_projection(std::vector<double>) override;
std::vector<double> constraint_correction(std::vector<double>) override;
private:
std::vector<double> group_q;

View File

@ -31,8 +31,6 @@ using namespace LAMMPS_NS;
#define NUM_GROUPS 2
#define SMALL 0.00001
enum { CONST, EQUAL };
/* ----------------------------------------------------------------------- */
// 0 1 2 3 4
@ -44,11 +42,11 @@ FixElectrodeThermo::FixElectrodeThermo(LAMMPS *lmp, int narg, char **arg) :
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 (algo != Algo::MATRIX_INV) error->all(FLERR, "Algorithm 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];
if (group_psi_var_styles[0] == VarStyle::CONST) delta_psi_0 = group_psi[1] - group_psi[0];
}
/* ----------------------------------------------------------------------- */
@ -63,9 +61,12 @@ FixElectrodeThermo::~FixElectrodeThermo()
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]);
if (symm)
vac_cap = macro_capacitance[0][0];
else
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]);
}
/* ----------------------------------------------------------------------- */
@ -92,18 +93,15 @@ 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 group_q_eff[NUM_GROUPS] = {group_q_old[0] - sb_charges[0],
(symm) ? 0. : group_q_old[1] - sb_charges[1]};
double const group_psi_old[NUM_GROUPS] = {
macro_elastance[0][0] * group_q_eff[0] + macro_elastance[0][1] * group_q_eff[1],
macro_elastance[1][0] * group_q_eff[0] + macro_elastance[1][1] * group_q_eff[1]};
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) {
if (group_psi_var_styles[0] != VarStyle::CONST) {
delta_psi_0 = input->variable->compute_equal(group_psi_var_ids[1]) -
input->variable->compute_equal(group_psi_var_ids[0]);
}
@ -114,11 +112,10 @@ void FixElectrodeThermo::update_psi()
thermo_random->gaussian();
double const group_remainder_q[NUM_GROUPS] = {-delta_charge - sb_charges[0],
delta_charge - sb_charges[1]};
(symm) ? 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;
}
group_psi[0] =
macro_elastance[0][0] * group_remainder_q[0] + macro_elastance[0][1] * group_remainder_q[1];
group_psi[1] =
macro_elastance[1][0] * group_remainder_q[0] + macro_elastance[1][1] * group_remainder_q[1];
}

View File

@ -20,7 +20,7 @@
#include "angle.h"
#include "atom.h"
#include "bond.h"
#include "boundary_correction.h"
#include "citeme.h"
#include "comm.h"
#include "domain.h"
#include "error.h"
@ -62,11 +62,26 @@ enum { FORWARD_IK, FORWARD_AD, FORWARD_IK_PERATOM, FORWARD_AD_PERATOM };
#define ONEF 1.0
#endif
static const char cite_pppm_electrode[] =
"kspace_style pppm/electrode command:\n\n"
"@article{Ahrens2021,\n"
"author = {Ahrens-Iwers, Ludwig J.V. and Mei{\\ss}ner, Robert H.},\n"
"doi = {10.1063/5.0063381},\n"
"title = {{Constant potential simulations on a mesh}},\n"
"journal = {Journal of Chemical Physics},\n"
"year = {2021}\n"
"volume = {155},\n"
"pages = {104104},\n"
"}\n";
/* ---------------------------------------------------------------------- */
PPPMElectrode::PPPMElectrode(LAMMPS *lmp) :
PPPM(lmp), electrolyte_density_brick(nullptr), electrolyte_density_fft(nullptr)
PPPM(lmp), electrolyte_density_brick(nullptr), electrolyte_density_fft(nullptr),
boundcorr(nullptr)
{
if (lmp->citeme) lmp->citeme->add(cite_pppm_electrode);
group_group_enable = 0;
electrolyte_density_brick = nullptr;
electrolyte_density_fft = nullptr;
@ -83,7 +98,6 @@ PPPMElectrode::~PPPMElectrode()
if (copymode) return;
deallocate();
delete boundcorr;
if (peratom_allocate_flag) deallocate_peratom();
if (group_allocate_flag) deallocate_groups();
memory->destroy(part2grid);
@ -308,8 +322,6 @@ void PPPMElectrode::setup()
double zprd_slab = zprd * slab_volfactor;
volume = xprd_wire * yprd_wire * zprd_slab;
boundcorr->setup(xprd_wire, yprd_wire, zprd_slab);
delxinv = nx_pppm / xprd_wire;
delyinv = ny_pppm / yprd_wire;
delzinv = nz_pppm / zprd_slab;
@ -323,7 +335,7 @@ void PPPMElectrode::setup()
// fkx,fky,fkz for my FFT grid pts
for (i = nxlo_fft; i <= nxhi_fft; i++) {
int per = i - nx_pppm * (2 * i / nx_pppm); // TODO int division intentional?
int per = i - nx_pppm * (2 * i / nx_pppm);
fkx[i] = unitkx * per;
}
@ -435,13 +447,12 @@ void PPPMElectrode::compute(int eflag, int vflag)
// return if there are no charges
// if (qsqsum == 0.0) return; TODO move back in
start_compute();
if (compute_vector_called) {
// electrolyte_density_brick is filled, so we can
// grab only electrode atoms
if (compute_vector_called && last_invert_source) {
// electrolyte_density_brick is filled, so we can grab only electrode atoms.
// Does not work for direct cg algorithm because electrode charges change after compute_vector.
// Therefore, only when last_invert_source true.
// TODO: this is dangerous now that compute_vector's interface has been
// changed since a compute could call an arbitrary source, needs tightening
make_rho_in_brick(last_source_grpbit, density_brick, !last_invert_source);
@ -471,9 +482,6 @@ void PPPMElectrode::compute(int eflag, int vflag)
// also performs per-atom calculations via poisson_peratom()
poisson();
// cout << "###" << endl
//<< "POISSON ENERGY: " << energy * 0.5 * volume << endl
//<< "###" << endl;
// all procs communicate E-field values
// to fill ghost cells surrounding their 3d bricks
@ -552,7 +560,7 @@ void PPPMElectrode::compute(int eflag, int vflag)
}
}
boundcorr->compute_corr(qsum, slab_volfactor, eflag_atom, eflag_global, energy, eatom);
boundcorr->compute_corr(qsum, eflag_atom, eflag_global, energy, eatom);
compute_vector_called = false;
}
@ -665,11 +673,12 @@ void PPPMElectrode::project_psi(double *vec, int sensor_grpbit)
void PPPMElectrode::compute_matrix(bigint *imat, double **matrix, bool timer_flag)
{
// TODO replace compute with required setup
compute(1, 0);
compute(1, 0); // make sure density bricks etc. are set up
// fft green's function k -> r
std::vector<double> greens_real((std::size_t) nz_pppm * ny_pppm * nx_pppm, 0.0);
// fft green's function k -> r (double)
double *greens_real;
memory->create(greens_real, nz_pppm * ny_pppm * nx_pppm, "pppm/electrode:greens_real");
memset(greens_real, 0, nz_pppm * ny_pppm * nx_pppm * sizeof(double));
for (int i = 0, n = 0; i < nfft; i++) {
work2[n++] = greensfn[i];
work2[n++] = ZEROF;
@ -681,13 +690,14 @@ void PPPMElectrode::compute_matrix(bigint *imat, double **matrix, bool timer_fla
greens_real[ny_pppm * nx_pppm * k + nx_pppm * j + i] = work2[n];
n += 2;
}
MPI_Allreduce(MPI_IN_PLACE, &greens_real.front(), nz_pppm * ny_pppm * nx_pppm, MPI_DOUBLE,
MPI_SUM, world);
MPI_Allreduce(MPI_IN_PLACE, greens_real, nz_pppm * ny_pppm * nx_pppm, MPI_DOUBLE, MPI_SUM, world);
int const nlocal = atom->nlocal;
int nmat = std::count_if(&imat[0], &imat[nlocal], [](int x) {
return x >= 0;
});
MPI_Allreduce(MPI_IN_PLACE, &nmat, 1, MPI_INT, MPI_SUM, world);
// gather x_ele
double **x_ele;
memory->create(x_ele, nmat, 3, "pppm/electrode:x_ele");
memset(&(x_ele[0][0]), 0, nmat * 3 * sizeof(double));
@ -703,14 +713,14 @@ void PPPMElectrode::compute_matrix(bigint *imat, double **matrix, bool timer_fla
one_step_multiplication(imat, greens_real, x_ele, matrix, nmat, timer_flag);
else
two_step_multiplication(imat, greens_real, x_ele, matrix, nmat, timer_flag);
memory->destroy(greens_real);
memory->destroy(x_ele);
}
/* ----------------------------------------------------------------------*/
void PPPMElectrode::one_step_multiplication(bigint *imat, const std::vector<double> &greens_real,
double **x_ele, double **matrix, int const nmat,
bool timer_flag)
void PPPMElectrode::one_step_multiplication(bigint *imat, double *greens_real, double **x_ele,
double **matrix, int const nmat, bool timer_flag)
{
// map green's function in real space from mesh to particle positions
// with matrix multiplication 'W^T G W' in one steps. Uses less memory than
@ -722,11 +732,19 @@ void PPPMElectrode::one_step_multiplication(bigint *imat, const std::vector<doub
double step1_time = MPI_Wtime();
// precalculate rho_1d for local electrode
std::vector<std::vector<std::vector<double>>> rho1d_j(
nlocal, std::vector<std::vector<double>>(3, std::vector<double>(order, 0)));
std::vector<int> j_list;
for (int j = 0; j < nlocal; j++) {
int jpos = imat[j];
if (jpos < 0) continue;
j_list.push_back(j);
}
int const nj_local = j_list.size();
FFT_SCALAR ***rho1d_j;
memory->create(rho1d_j, nj_local, 3, order, "pppm/electrode:rho1d_j");
for (int jlist_pos = 0; jlist_pos < nj_local; jlist_pos++) {
int j = j_list[jlist_pos];
int njx = part2grid[j][0];
int njy = part2grid[j][1];
int njz = part2grid[j][2];
@ -735,7 +753,7 @@ void PPPMElectrode::one_step_multiplication(bigint *imat, const std::vector<doub
FFT_SCALAR const djz = njz + shiftone - (x[j][2] - boxlo[2]) * delzinv;
compute_rho1d(djx, djy, djz);
for (int dim = 0; dim < 3; dim++) {
for (int oi = 0; oi < order; oi++) { rho1d_j[j][dim][oi] = rho1d[dim][oi + nlower]; }
for (int oi = 0; oi < order; oi++) { rho1d_j[jlist_pos][dim][oi] = rho1d[dim][oi + nlower]; }
}
}
@ -743,6 +761,10 @@ void PPPMElectrode::one_step_multiplication(bigint *imat, const std::vector<doub
// (nx,ny,nz) = global coords of grid pt to "lower left" of charge
// (dx,dy,dz) = distance to "lower left" grid pt
// (mx,my,mz) = global coords of moving stencil pt
int const order2 = order * order;
int const order6 = order2 * order2 * order2;
double *amesh;
memory->create(amesh, order6, "pppm/electrode:amesh");
for (int ipos = 0; ipos < nmat; ipos++) {
double *_noalias xi_ele = x_ele[ipos];
// new calculation for nx, ny, nz because part2grid available for nlocal,
@ -754,44 +776,48 @@ void PPPMElectrode::one_step_multiplication(bigint *imat, const std::vector<doub
FFT_SCALAR const diy = niy + shiftone - (xi_ele[1] - boxlo[1]) * delyinv;
FFT_SCALAR const diz = niz + shiftone - (xi_ele[2] - boxlo[2]) * delzinv;
compute_rho1d(dix, diy, diz);
for (int j = 0; j < nlocal; j++) {
int njx = -1;
int njy = -1;
int njz = -1; // force initial build_amesh
for (int jlist_pos = 0; jlist_pos < nj_local; jlist_pos++) {
int j = j_list[jlist_pos];
int ind_amesh = 0;
int jpos = imat[j];
if (jpos < 0) continue;
if ((ipos < jpos) == !((ipos - jpos) % 2)) continue;
double aij = 0.;
int njx = part2grid[j][0];
int njy = part2grid[j][1];
int njz = part2grid[j][2];
for (int ni = nlower; ni <= nupper; ni++) {
double iz0 = rho1d[2][ni];
int miz = ni + niz;
for (int mi = nlower; mi <= nupper; mi++) {
double iy0 = iz0 * rho1d[1][mi];
int miy = mi + niy;
for (int li = nlower; li <= nupper; li++) {
int mix = li + nix;
double const ix0 = iy0 * rho1d[0][li];
for (int nj = nlower; nj <= nupper; nj++) {
double jz0 = rho1d_j[j][2][nj - nlower];
int mjz = nj + njz;
int mz = abs(mjz - miz) % nz_pppm;
for (int mj = nlower; mj <= nupper; mj++) {
double jy0 = jz0 * rho1d_j[j][1][mj - nlower];
int mjy = mj + njy;
int my = abs(mjy - miy) % ny_pppm;
for (int lj = nlower; lj <= nupper; lj++) {
int mjx = lj + njx;
int mx = abs(mjx - mix) % nx_pppm;
double const jx0 = jy0 * rho1d_j[j][0][lj - nlower];
aij += ix0 * jx0 * greens_real[mz * nx_pppm * ny_pppm + my * nx_pppm + mx];
if (njx != part2grid[j][0] || njy != part2grid[j][1] || njz != part2grid[j][2]) {
njx = part2grid[j][0];
njy = part2grid[j][1];
njz = part2grid[j][2];
build_amesh(njx - nix, njy - niy, njz - niz, amesh, greens_real);
}
for (int ni = nlower; ni <= nupper; ni++) { // i's rho1d[dim] indexed from nlower to nupper
FFT_SCALAR const iz0 = rho1d[2][ni];
for (int nj = 0; nj < order; nj++) { // j's rho1d_j[][dim] indexed from 0 to order-1
FFT_SCALAR const jz0 = rho1d_j[jlist_pos][2][nj];
for (int mi = nlower; mi <= nupper; mi++) {
FFT_SCALAR const iy0 = iz0 * rho1d[1][mi];
for (int mj = 0; mj < order; mj++) {
FFT_SCALAR const jy0 = jz0 * rho1d_j[jlist_pos][1][mj];
for (int li = nlower; li <= nupper; li++) {
FFT_SCALAR const ix0 = iy0 * rho1d[0][li];
double aij_xscan = 0.;
for (int lj = 0; lj < order; lj++) {
aij_xscan += (double) amesh[ind_amesh] * rho1d_j[jlist_pos][0][lj];
ind_amesh++;
}
aij += (double) ix0 * jy0 * aij_xscan;
}
}
}
}
}
matrix[ipos][jpos] += aij / volume;
if (ipos != jpos) matrix[jpos][ipos] += aij / volume;
}
}
memory->destroy(amesh);
memory->destroy(rho1d_j);
MPI_Barrier(world);
if (timer_flag && (comm->me == 0))
utils::logmesg(lmp, fmt::format("Single step time: {:.4g} s\n", MPI_Wtime() - step1_time));
@ -799,9 +825,38 @@ void PPPMElectrode::one_step_multiplication(bigint *imat, const std::vector<doub
/* ----------------------------------------------------------------------*/
void PPPMElectrode::two_step_multiplication(bigint *imat, const std::vector<double> &greens_real,
double **x_ele, double **matrix, int const nmat,
bool timer_flag)
void PPPMElectrode::build_amesh(const int dx, // = njx - nix
const int dy, // = njy - niy
const int dz, // = njz - niz
double *amesh, double *const greens_real)
{
auto fmod = [](int x, int n) { // fast unsigned mod
int r = abs(x);
while (r >= n) r -= n;
return r;
};
int ind_amesh = 0;
for (int iz = 0; iz < order; iz++)
for (int jz = 0; jz < order; jz++) {
int const mz = fmod(dz + jz - iz, nz_pppm) * nx_pppm * ny_pppm;
for (int iy = 0; iy < order; iy++)
for (int jy = 0; jy < order; jy++) {
int const my = fmod(dy + jy - iy, ny_pppm) * nx_pppm;
for (int ix = 0; ix < order; ix++)
for (int jx = 0; jx < order; jx++) {
int const mx = fmod(dx + jx - ix, nx_pppm);
amesh[ind_amesh] = greens_real[mz + my + mx];
ind_amesh++;
}
}
}
}
/* ----------------------------------------------------------------------*/
void PPPMElectrode::two_step_multiplication(bigint *imat, double *greens_real, double **x_ele,
double **matrix, int const nmat, bool timer_flag)
{
// map green's function in real space from mesh to particle positions
// with matrix multiplication 'W^T G W' in two steps. gw is result of
@ -813,7 +868,16 @@ void PPPMElectrode::two_step_multiplication(bigint *imat, const std::vector<doub
int ny_ele = nyhi_out - nylo_out + 1; // ny_pppm + order + 1;
int nz_ele = nzhi_out - nzlo_out + 1; // nz_pppm + order + 1;
int nxyz = nx_ele * ny_ele * nz_ele;
std::vector<std::vector<double>> gw(nmat, std::vector<double>(nxyz, 0.));
double **gw;
memory->create(gw, nmat, nxyz, "pppm/electrode:gw");
memset(&(gw[0][0]), 0, nmat * nxyz * sizeof(double));
auto fmod = [](int x, int n) { // fast unsigned mod
int r = abs(x);
while (r >= n) r -= n;
return r;
};
// loops over weights of electrode atoms and weights of complete grid
// (nx,ny,nz) = global coords of grid pt to "lower left" of charge
@ -830,21 +894,21 @@ void PPPMElectrode::two_step_multiplication(bigint *imat, const std::vector<doub
FFT_SCALAR dy = niy + shiftone - (xi_ele[1] - boxlo[1]) * delyinv;
FFT_SCALAR dz = niz + shiftone - (xi_ele[2] - boxlo[2]) * delzinv;
compute_rho1d(dx, dy, dz);
for (int ni = nlower; ni <= nupper; ni++) {
double iz0 = rho1d[2][ni];
int miz = ni + niz;
for (int mi = nlower; mi <= nupper; mi++) {
double iy0 = iz0 * rho1d[1][mi];
int miy = mi + niy;
for (int li = nlower; li <= nupper; li++) {
int mix = li + nix;
double ix0 = iy0 * rho1d[0][li];
for (int mjz = nzlo_out; mjz <= nzhi_out; mjz++) {
int mz = abs(mjz - miz) % nz_pppm;
for (int mjy = nylo_out; mjy <= nyhi_out; mjy++) {
int my = abs(mjy - miy) % ny_pppm;
for (int mjx = nxlo_out; mjx <= nxhi_out; mjx++) {
int mx = abs(mjx - mix) % nx_pppm;
// DO NOT TOUCH THESE LOOPS!
// Attempted optimizations (such as calculating parts of indices
// in the outer loops) have been shown harmful upon benchmarking!
for (int mjz = nzlo_out; mjz <= nzhi_out; mjz++) {
for (int ni = nlower; ni <= nupper; ni++) {
double const iz0 = rho1d[2][ni];
int const mz = fmod(mjz - ni - niz, nz_pppm);
for (int mjy = nylo_out; mjy <= nyhi_out; mjy++) {
for (int mi = nlower; mi <= nupper; mi++) {
double const iy0 = iz0 * rho1d[1][mi];
int const my = fmod(mjy - mi - niy, ny_pppm);
for (int mjx = nxlo_out; mjx <= nxhi_out; mjx++) {
for (int li = nlower; li <= nupper; li++) {
double const ix0 = iy0 * rho1d[0][li];
int const mx = fmod(mjx - li - nix, nx_pppm);
gw[ipos][nx_ele * ny_ele * (mjz - nzlo_out) + nx_ele * (mjy - nylo_out) +
(mjx - nxlo_out)] +=
ix0 * greens_real[mz * nx_pppm * ny_pppm + my * nx_pppm + mx];
@ -860,6 +924,8 @@ void PPPMElectrode::two_step_multiplication(bigint *imat, const std::vector<doub
utils::logmesg(lmp, fmt::format("step 1 time: {:.4g} s\n", MPI_Wtime() - step1_time));
// nested loop over electrode atoms i and j and stencil of i
// in theory could reuse make_rho1d_j here -- but this step is already
// super-fast
double step2_time = MPI_Wtime();
double **x = atom->x;
for (int i = 0; i < nlocal; i++) {
@ -894,6 +960,7 @@ void PPPMElectrode::two_step_multiplication(bigint *imat, const std::vector<doub
}
}
MPI_Barrier(world);
memory->destroy(gw);
if (timer_flag && (comm->me == 0))
utils::logmesg(lmp, fmt::format("step 2 time: {:.4g} s\n", MPI_Wtime() - step2_time));
}
@ -932,6 +999,7 @@ void PPPMElectrode::allocate()
void PPPMElectrode::deallocate()
{
if (boundcorr != nullptr) delete boundcorr;
memory->destroy3d_offset(electrolyte_density_brick, nzlo_out, nylo_out, nxlo_out);
memory->destroy(electrolyte_density_fft);

View File

@ -93,10 +93,9 @@ class PPPMElectrode : public PPPM, public ElectrodeKSpace {
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);
void one_step_multiplication(bigint *, double *, double **, double **, int const, bool);
void two_step_multiplication(bigint *, double *, double **, double **, int const, bool);
void build_amesh(int, int, int, double *, double *);
bool compute_vector_called;
};

View File

@ -20,6 +20,8 @@
#include "atom.h"
#include "comm.h"
#include "domain.h"
#include "force.h"
#include "kspace.h"
#include "math_const.h"
#include "memory.h"
@ -32,13 +34,14 @@ using namespace MathConst;
------------------------------------------------------------------------- */
Slab2d::Slab2d(LAMMPS *lmp) : BoundaryCorrection(lmp){};
void Slab2d::compute_corr(double /*qsum*/, double /*slab_volfactor*/, int eflag_atom,
int eflag_global, double &energy, double *eatom)
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;
double const g_ewald = force->kspace->g_ewald;
bigint natoms = atom->natoms;
std::vector<double> z = std::vector<double>(nlocal);
@ -53,7 +56,9 @@ void Slab2d::compute_corr(double /*qsum*/, double /*slab_volfactor*/, int eflag_
&displs.front(), MPI_DOUBLE, world);
const double g_ewald_inv = 1.0 / g_ewald;
const double qscale = qqrd2e * scale;
double const scale = 1.0;
const double qscale = force->qqrd2e * scale;
double const area = domain->xprd * domain->yprd;
const double ffact = qscale * MY_2PI / area;
const double efact = qscale * MY_PIS / area;
double e_keq0 = 0;
@ -70,7 +75,7 @@ void Slab2d::compute_corr(double /*qsum*/, double /*slab_volfactor*/, int eflag_
}
// 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_atom) eatom[i] -= efact * q[i] * pot_ij;
if (eflag_global) e_keq0 -= q[i] * pot_ij;
}
if (eflag_global) {
@ -105,6 +110,8 @@ void Slab2d::vector_corr(double *vec, int sensor_grpbit, int source_grpbit, bool
&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 g_ewald = force->kspace->g_ewald;
double const area = domain->xprd * domain->yprd;
double const prefac = 2 * MY_PIS / area;
for (int i = 0; i < nlocal; i++) {
if (!(mask[i] & sensor_grpbit)) continue;
@ -148,8 +155,10 @@ void Slab2d::matrix_corr(bigint *imat, double **matrix)
MPI_Allgatherv(&nprd_local.front(), ngrouplocal, MPI_DOUBLE, &nprd_all.front(),
&recvcounts.front(), &displs.front(), MPI_DOUBLE, world);
double const g_ewald = force->kspace->g_ewald;
const double g_ewald_inv = 1.0 / g_ewald;
const double g_ewald_sq = g_ewald * g_ewald;
double const area = domain->xprd * domain->yprd;
const double prefac = 2.0 * MY_PIS / area;
std::vector<bigint> jmat = gather_jmat(imat);
for (int i = 0; i < nlocal; i++) {

View File

@ -27,7 +27,7 @@ class Slab2d : public BoundaryCorrection {
Slab2d(LAMMPS *);
void vector_corr(double *, int, int, bool) override;
void matrix_corr(bigint *, double **) override;
void compute_corr(double, double, int, int, double &, double *) override;
void compute_corr(double, int, int, double &, double *) override;
void setup(double);
};

View File

@ -20,6 +20,8 @@
#include "atom.h"
#include "comm.h"
#include "domain.h"
#include "force.h"
#include "kspace.h"
#include "math_const.h"
using namespace LAMMPS_NS;
@ -37,13 +39,14 @@ using namespace MathConst;
*/
SlabDipole::SlabDipole(LAMMPS *lmp) : BoundaryCorrection(lmp){};
void SlabDipole::compute_corr(double qsum, double slab_volfactor, int eflag_atom, int eflag_global,
double &energy, double *eatom)
void SlabDipole::compute_corr(double qsum, int eflag_atom, int eflag_global, double &energy,
double *eatom)
{
// compute local contribution to global dipole moment
double const volume = get_volume();
double *q = atom->q;
double **x = atom->x;
double zprd_slab = domain->zprd * slab_volfactor;
double zprd_slab = domain->zprd * force->kspace->slab_volfactor;
int nlocal = atom->nlocal;
double dipole = 0.0;
for (int i = 0; i < nlocal; i++) dipole += q[i] * x[i][2];
@ -67,7 +70,8 @@ void SlabDipole::compute_corr(double qsum, double slab_volfactor, int eflag_atom
double const e_slabcorr = MY_2PI *
(dipole_all * dipole_all - qsum * dipole_r2 - qsum * qsum * zprd_slab * zprd_slab / 12.0) /
volume;
double const qscale = qqrd2e * scale;
double const scale = 1.0;
double const qscale = force->qqrd2e * scale;
if (eflag_global) energy += qscale * e_slabcorr;
// per-atom energy
@ -87,6 +91,7 @@ void SlabDipole::compute_corr(double qsum, double slab_volfactor, int eflag_atom
void SlabDipole::vector_corr(double *vec, int sensor_grpbit, int source_grpbit, bool invert_source)
{
double const volume = get_volume();
int const nlocal = atom->nlocal;
double **x = atom->x;
double *q = atom->q;
@ -104,6 +109,7 @@ void SlabDipole::vector_corr(double *vec, int sensor_grpbit, int source_grpbit,
void SlabDipole::matrix_corr(bigint *imat, double **matrix)
{
double const volume = get_volume();
int nlocal = atom->nlocal;
double **x = atom->x;
@ -138,5 +144,4 @@ void SlabDipole::matrix_corr(bigint *imat, double **matrix)
if (imat[i] != jmat[j]) matrix[jmat[j]][imat[i]] += aij;
}
}
// TODO add ELC corrections, needs sum over all kpoints but not (0,0)
}

View File

@ -27,7 +27,7 @@ class SlabDipole : public BoundaryCorrection {
SlabDipole(LAMMPS *);
void vector_corr(double *, int, int, bool);
void matrix_corr(bigint *, double **);
void compute_corr(double, double, int, int, double &, double *);
void compute_corr(double, int, int, double &, double *);
void setup(double);
};

View File

@ -20,6 +20,7 @@
#include "atom.h"
#include "comm.h"
#include "domain.h"
#include "force.h"
#include "math_const.h"
using namespace LAMMPS_NS;
@ -34,9 +35,10 @@ using namespace MathConst;
*/
WireDipole::WireDipole(LAMMPS *lmp) : BoundaryCorrection(lmp){};
void WireDipole::compute_corr(double /*qsum*/, double /*slab_volfactor*/, int eflag_atom,
int eflag_global, double &energy, double *eatom)
void WireDipole::compute_corr(double /*qsum*/, int eflag_atom, int eflag_global, double &energy,
double *eatom)
{
double const volume = get_volume();
double *q = atom->q;
double **x = atom->x;
int nlocal = atom->nlocal;
@ -72,7 +74,8 @@ void WireDipole::compute_corr(double /*qsum*/, double /*slab_volfactor*/, int ef
// compute corrections
const double e_wirecorr =
MY_PI * (xdipole_all * xdipole_all + ydipole_all * ydipole_all) / volume;
const double qscale = qqrd2e * scale;
double const scale = 1.0;
const double qscale = force->qqrd2e * scale;
if (eflag_global) energy += qscale * e_wirecorr;
// per-atom energy
@ -94,6 +97,7 @@ void WireDipole::compute_corr(double /*qsum*/, double /*slab_volfactor*/, int ef
void WireDipole::vector_corr(double *vec, int sensor_grpbit, int source_grpbit, bool invert_source)
{
double const volume = get_volume();
int const nlocal = atom->nlocal;
double **x = atom->x;
double *q = atom->q;
@ -113,6 +117,7 @@ void WireDipole::vector_corr(double *vec, int sensor_grpbit, int source_grpbit,
void WireDipole::matrix_corr(bigint *imat, double **matrix)
{
double const volume = get_volume();
int nlocal = atom->nlocal;
double **x = atom->x;

View File

@ -27,7 +27,7 @@ class WireDipole : public BoundaryCorrection {
WireDipole(LAMMPS *);
void vector_corr(double *, int, int, bool);
void matrix_corr(bigint *, double **);
void compute_corr(double, double, int, int, double &, double *);
void compute_corr(double, int, int, double &, double *);
void setup(double);
};

View File

@ -23,8 +23,8 @@ namespace LAMMPS_NS {
class ElectrodeAccelIntel : public ElectrodeAccelInterface {
public:
ElectrodeAccelIntel(class LAMMPS *lmp);
void intel_find_fix();
void intel_pack_buffers();
void intel_find_fix() override;
void intel_pack_buffers() override;
private:
class FixIntel *fix;

View File

@ -36,8 +36,7 @@ class FixElectrodeConpIntel : public FixElectrodeConp {
FixElectrodeConpIntel(class LAMMPS *lmp, int narg, char **arg) : FixElectrodeConp(lmp, narg, arg)
{
intelflag = true;
delete accel_interface;
accel_interface = new ElectrodeAccelIntel(lmp);
accel_interface = std::unique_ptr<ElectrodeAccelInterface>(new ElectrodeAccelIntel(lmp));
}
};

View File

@ -36,8 +36,7 @@ class FixElectrodeConqIntel : public FixElectrodeConq {
FixElectrodeConqIntel(class LAMMPS *lmp, int narg, char **arg) : FixElectrodeConq(lmp, narg, arg)
{
intelflag = true;
delete accel_interface;
accel_interface = new ElectrodeAccelIntel(lmp);
accel_interface = std::unique_ptr<ElectrodeAccelInterface>(new ElectrodeAccelIntel(lmp));
}
};

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