Merge branch 'lammps:develop' into fortran2_updates
This commit is contained in:
@ -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>`
|
||||
|
||||
@ -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>`
|
||||
|
||||
----------
|
||||
|
||||
|
||||
@ -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>`
|
||||
|
||||
@ -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
421
doc/src/fix_electrode.rst
Normal 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).
|
||||
@ -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).
|
||||
|
||||
@ -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.
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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
|
||||
@ -1 +1,2 @@
|
||||
log.lammps*
|
||||
in.temp
|
||||
|
||||
28
examples/PACKAGES/electrode/graph-il/algo_test.sh
Executable file
28
examples/PACKAGES/electrode/graph-il/algo_test.sh
Executable 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
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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
|
||||
|
||||
2
examples/PACKAGES/electrode/madelung/.gitignore
vendored
Normal file
2
examples/PACKAGES/electrode/madelung/.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
*.csv
|
||||
*.txt
|
||||
27
examples/PACKAGES/electrode/madelung/data.au-elyt
Normal file
27
examples/PACKAGES/electrode/madelung/data.au-elyt
Normal 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
|
||||
53
examples/PACKAGES/electrode/madelung/eval.py
Normal file
53
examples/PACKAGES/electrode/madelung/eval.py
Normal 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)
|
||||
11
examples/PACKAGES/electrode/madelung/in.cg
Normal file
11
examples/PACKAGES/electrode/madelung/in.cg
Normal 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
|
||||
|
||||
11
examples/PACKAGES/electrode/madelung/in.ewald-ew2d
Normal file
11
examples/PACKAGES/electrode/madelung/in.ewald-ew2d
Normal 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
|
||||
|
||||
11
examples/PACKAGES/electrode/madelung/in.ewald-ew3dc
Normal file
11
examples/PACKAGES/electrode/madelung/in.ewald-ew3dc
Normal 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
|
||||
|
||||
10
examples/PACKAGES/electrode/madelung/in.ewald-ffield
Normal file
10
examples/PACKAGES/electrode/madelung/in.ewald-ffield
Normal 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
|
||||
|
||||
11
examples/PACKAGES/electrode/madelung/in.pppm-ew3dc
Normal file
11
examples/PACKAGES/electrode/madelung/in.pppm-ew3dc
Normal 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
|
||||
|
||||
10
examples/PACKAGES/electrode/madelung/in.pppm-ffield
Normal file
10
examples/PACKAGES/electrode/madelung/in.pppm-ffield
Normal 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
|
||||
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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
|
||||
94
examples/PACKAGES/electrode/madelung/plate_cap.py
Executable file
94
examples/PACKAGES/electrode/madelung/plate_cap.py
Executable 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}",
|
||||
]
|
||||
)
|
||||
)
|
||||
22
examples/PACKAGES/electrode/madelung/settings.mod
Normal file
22
examples/PACKAGES/electrode/madelung/settings.mod
Normal 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"
|
||||
23
examples/PACKAGES/electrode/madelung/test.sh
Normal file
23
examples/PACKAGES/electrode/madelung/test.sh
Normal 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
|
||||
2
examples/PACKAGES/electrode/piston/.gitignore
vendored
Normal file
2
examples/PACKAGES/electrode/piston/.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
top_wall.csv
|
||||
data.pistoned
|
||||
2128
examples/PACKAGES/electrode/piston/data.piston
Normal file
2128
examples/PACKAGES/electrode/piston/data.piston
Normal file
File diff suppressed because it is too large
Load Diff
2128
examples/PACKAGES/electrode/piston/data.piston.final
Normal file
2128
examples/PACKAGES/electrode/piston/data.piston.final
Normal file
File diff suppressed because it is too large
Load Diff
65
examples/PACKAGES/electrode/piston/in.piston
Normal file
65
examples/PACKAGES/electrode/piston/in.piston
Normal 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"
|
||||
|
||||
223
examples/PACKAGES/electrode/piston/log.1Dec2022.piston.g++.1
Normal file
223
examples/PACKAGES/electrode/piston/log.1Dec2022.piston.g++.1
Normal 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
|
||||
224
examples/PACKAGES/electrode/piston/log.1Dec2022.piston.g++.4
Normal file
224
examples/PACKAGES/electrode/piston/log.1Dec2022.piston.g++.4
Normal 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
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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)
|
||||
|
||||
@ -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> &);
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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];
|
||||
}
|
||||
}
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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
@ -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
|
||||
|
||||
@ -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]);
|
||||
}
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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];
|
||||
}
|
||||
|
||||
@ -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);
|
||||
|
||||
|
||||
@ -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;
|
||||
};
|
||||
|
||||
|
||||
@ -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++) {
|
||||
|
||||
@ -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);
|
||||
};
|
||||
|
||||
|
||||
@ -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)
|
||||
}
|
||||
|
||||
@ -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);
|
||||
};
|
||||
|
||||
|
||||
@ -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;
|
||||
|
||||
|
||||
@ -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);
|
||||
};
|
||||
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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));
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@ -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
Reference in New Issue
Block a user