337 lines
20 KiB
HTML
337 lines
20 KiB
HTML
<!DOCTYPE html>
|
|
<html class="writer-html5" lang="en" >
|
|
<head>
|
|
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
<title>3.5. Atom styles — LAMMPS documentation</title>
|
|
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
|
|
<link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
|
|
<link rel="stylesheet" href="_static/sphinx-design.min.css" type="text/css" />
|
|
<link rel="stylesheet" href="_static/css/lammps.css" type="text/css" />
|
|
<link rel="shortcut icon" href="_static/lammps.ico"/>
|
|
<link rel="canonical" href="https://docs.lammps.org/Modify_atom.html" />
|
|
<!--[if lt IE 9]>
|
|
<script src="_static/js/html5shiv.min.js"></script>
|
|
<![endif]-->
|
|
|
|
<script src="_static/jquery.js?v=5d32c60e"></script>
|
|
<script src="_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
|
|
<script src="_static/documentation_options.js?v=5929fcd5"></script>
|
|
<script src="_static/doctools.js?v=9bcbadda"></script>
|
|
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
|
|
<script src="_static/design-tabs.js?v=f930bc37"></script>
|
|
<script async="async" src="_static/mathjax/es5/tex-mml-chtml.js?v=cadf963e"></script>
|
|
<script src="_static/js/theme.js"></script>
|
|
<link rel="index" title="Index" href="genindex.html" />
|
|
<link rel="search" title="Search" href="search.html" />
|
|
<link rel="next" title="3.6. Pair styles" href="Modify_pair.html" />
|
|
<link rel="prev" title="3.4. LAMMPS programming style" href="Modify_style.html" />
|
|
</head>
|
|
|
|
<body class="wy-body-for-nav">
|
|
<div class="wy-grid-for-nav">
|
|
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
|
<div class="wy-side-scroll">
|
|
<div class="wy-side-nav-search" >
|
|
|
|
|
|
|
|
<a href="Manual.html">
|
|
|
|
<img src="_static/lammps-logo.png" class="logo" alt="Logo"/>
|
|
</a>
|
|
<div class="lammps_version">Version: <b>19 Nov 2024</b></div>
|
|
<div class="lammps_release">git info: </div>
|
|
<div role="search">
|
|
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
|
|
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
|
|
<input type="hidden" name="check_keywords" value="yes" />
|
|
<input type="hidden" name="area" value="default" />
|
|
</form>
|
|
</div>
|
|
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
|
|
<p class="caption" role="heading"><span class="caption-text">User Guide</span></p>
|
|
<ul>
|
|
<li class="toctree-l1"><a class="reference internal" href="Intro.html">1. Introduction</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="Install.html">2. Install LAMMPS</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="Build.html">3. Build LAMMPS</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="Run_head.html">4. Run LAMMPS</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="Commands.html">5. Commands</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="Packages.html">6. Optional packages</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="Speed.html">7. Accelerate performance</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="Howto.html">8. Howto discussions</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="Examples.html">9. Example scripts</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="Tools.html">10. Auxiliary tools</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="Errors.html">11. Errors</a></li>
|
|
</ul>
|
|
<p class="caption" role="heading"><span class="caption-text">Programmer Guide</span></p>
|
|
<ul class="current">
|
|
<li class="toctree-l1"><a class="reference internal" href="Library.html">1. LAMMPS Library Interfaces</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="Python_head.html">2. Use Python with LAMMPS</a></li>
|
|
<li class="toctree-l1 current"><a class="reference internal" href="Modify.html">3. Modifying & extending LAMMPS</a><ul class="current">
|
|
<li class="toctree-l2"><a class="reference internal" href="Modify_overview.html">3.1. Overview</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="Modify_contribute.html">3.2. Submitting new features for inclusion in LAMMPS</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="Modify_requirements.html">3.3. Requirements for contributions to LAMMPS</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="Modify_style.html">3.4. LAMMPS programming style</a></li>
|
|
<li class="toctree-l2 current"><a class="current reference internal" href="#">3.5. Atom styles</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="Modify_pair.html">3.6. Pair styles</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="Modify_bond.html">3.7. Bond, angle, dihedral, improper styles</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="Modify_compute.html">3.8. Compute styles</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="Modify_fix.html">3.9. Fix styles</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="Modify_command.html">3.10. Input script command style</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="Modify_dump.html">3.11. Dump styles</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="Modify_kspace.html">3.12. Kspace styles</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="Modify_min.html">3.13. Minimization styles</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="Modify_region.html">3.14. Region styles</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="Modify_body.html">3.15. Body styles</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="Modify_gran_sub_mod.html">3.16. Granular Sub-Model styles</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="Modify_thermo.html">3.17. Thermodynamic output options</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="Modify_variable.html">3.18. Variable options</a></li>
|
|
</ul>
|
|
</li>
|
|
<li class="toctree-l1"><a class="reference internal" href="Developer.html">4. Information for Developers</a></li>
|
|
</ul>
|
|
<p class="caption" role="heading"><span class="caption-text">Command Reference</span></p>
|
|
<ul>
|
|
<li class="toctree-l1"><a class="reference internal" href="commands_list.html">Commands</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="fixes.html">Fix Styles</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="computes.html">Compute Styles</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="pairs.html">Pair Styles</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="bonds.html">Bond Styles</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="angles.html">Angle Styles</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="dihedrals.html">Dihedral Styles</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="impropers.html">Improper Styles</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="dumps.html">Dump Styles</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="fix_modify_atc_commands.html">fix_modify AtC commands</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="Bibliography.html">Bibliography</a></li>
|
|
</ul>
|
|
|
|
</div>
|
|
</div>
|
|
</nav>
|
|
|
|
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
|
|
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
|
<a href="Manual.html">LAMMPS</a>
|
|
</nav>
|
|
|
|
<div class="wy-nav-content">
|
|
<div class="rst-content style-external-links">
|
|
<div role="navigation" aria-label="Page navigation">
|
|
<ul class="wy-breadcrumbs">
|
|
<li><a href="Manual.html" class="icon icon-home" aria-label="Home"></a></li>
|
|
<li class="breadcrumb-item"><a href="Modify.html"><span class="section-number">3. </span>Modifying & extending LAMMPS</a></li>
|
|
<li class="breadcrumb-item active"><span class="section-number">3.5. </span>Atom styles</li>
|
|
<li class="wy-breadcrumbs-aside">
|
|
<a href="https://www.lammps.org"><img src="_static/lammps-logo.png" width="64" height="16" alt="LAMMPS Homepage"></a> | <a href="Commands_all.html">Commands</a>
|
|
</li>
|
|
</ul><div class="rst-breadcrumbs-buttons" role="navigation" aria-label="Sequential page navigation">
|
|
<a href="Modify_style.html" class="btn btn-neutral float-left" title="3.4. LAMMPS programming style" accesskey="p"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
|
|
<a href="Modify_pair.html" class="btn btn-neutral float-right" title="3.6. Pair styles" accesskey="n">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
|
|
</div>
|
|
<hr/>
|
|
</div>
|
|
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
|
<div itemprop="articleBody">
|
|
|
|
<p><span class="math notranslate nohighlight">\(\renewcommand{\AA}{\text{Å}}\)</span></p>
|
|
<section id="atom-styles">
|
|
<h1><span class="section-number">3.5. </span>Atom styles<a class="headerlink" href="#atom-styles" title="Link to this heading"></a></h1>
|
|
<p>Classes that define an <a class="reference internal" href="atom_style.html"><span class="doc">atom style</span></a> are derived from
|
|
the AtomVec class and managed by the Atom class. The atom style
|
|
determines what attributes are associated with an atom and
|
|
communicated when it is a ghost atom or migrates to a new processor.
|
|
A new atom style can be created if one of the existing atom styles
|
|
does not define all the attributes you need to store and communicate
|
|
with atoms.</p>
|
|
<p>The file <code class="docutils literal notranslate"><span class="pre">atom_vec_atomic.cpp</span></code> is the simplest example of an atom style.
|
|
Examining the code for others will make these instructions more clear.</p>
|
|
<p>Note that the <a class="reference internal" href="atom_style.html"><span class="doc">atom style hybrid</span></a> command can be used
|
|
to define atoms or particles which have the union of properties of
|
|
individual styles. Also the <a class="reference internal" href="fix_property_atom.html"><span class="doc">fix property/atom</span></a> command can be used to add a single property
|
|
(e.g. charge or a molecule ID) to a style that does not have it. It can
|
|
also be used to add custom properties to an atom, with options to
|
|
communicate them with ghost atoms or read them from a data file. Other
|
|
LAMMPS commands can access these custom properties, as can new pair,
|
|
fix, compute styles that are written to work with these properties. For
|
|
example, the <a class="reference internal" href="set.html"><span class="doc">set</span></a> command can be used to set the values of
|
|
custom per-atom properties from an input script. All of these methods
|
|
are less work than writing and testing(!) code for a new atom style.</p>
|
|
<p>If you follow these directions your new style will automatically work
|
|
in tandem with others via the <a class="reference internal" href="atom_style.html"><span class="doc">atom_style hybrid</span></a>
|
|
command.</p>
|
|
<p>The first step is to define a set of string lists in the constructor of
|
|
the new derived class. Each list will have zero or more comma-separated
|
|
strings that correspond to the variable names used in the <code class="docutils literal notranslate"><span class="pre">atom.h</span></code>
|
|
header file for per-atom properties. Note that some represent per-atom
|
|
vectors (q, molecule) while other are per-atom arrays (x,v). For all
|
|
but the last two lists you do not need to specify any of
|
|
(id,type,x,v,f). Those are included automatically as needed in the
|
|
other lists.</p>
|
|
<table class="docutils align-default">
|
|
<tbody>
|
|
<tr class="row-odd"><td><p>fields_grow</p></td>
|
|
<td><p>full list of properties which is allocated and stored</p></td>
|
|
</tr>
|
|
<tr class="row-even"><td><p>fields_copy</p></td>
|
|
<td><p>list of properties to copy atoms are rearranged on-processor</p></td>
|
|
</tr>
|
|
<tr class="row-odd"><td><p>fields_comm</p></td>
|
|
<td><p>list of properties communicated to ghost atoms every step</p></td>
|
|
</tr>
|
|
<tr class="row-even"><td><p>fields_comm_vel</p></td>
|
|
<td><p>additional properties communicated if <a class="reference internal" href="comm_modify.html"><span class="doc">comm_modify vel</span></a> is used</p></td>
|
|
</tr>
|
|
<tr class="row-odd"><td><p>fields_reverse</p></td>
|
|
<td><p>list of properties summed from ghost atoms every step</p></td>
|
|
</tr>
|
|
<tr class="row-even"><td><p>fields_border</p></td>
|
|
<td><p>list of properties communicated with ghost atoms every reneighboring step</p></td>
|
|
</tr>
|
|
<tr class="row-odd"><td><p>fields_border_vel</p></td>
|
|
<td><p>additional properties communicated if <a class="reference internal" href="comm_modify.html"><span class="doc">comm_modify vel</span></a> is used</p></td>
|
|
</tr>
|
|
<tr class="row-even"><td><p>fields_exchange</p></td>
|
|
<td><p>list of properties communicated when an atom migrates to another processor</p></td>
|
|
</tr>
|
|
<tr class="row-odd"><td><p>fields_restart</p></td>
|
|
<td><p>list of properties written/read to/from a restart file</p></td>
|
|
</tr>
|
|
<tr class="row-even"><td><p>fields_create</p></td>
|
|
<td><p>list of properties defined when an atom is created by <a class="reference internal" href="create_atoms.html"><span class="doc">create_atoms</span></a></p></td>
|
|
</tr>
|
|
<tr class="row-odd"><td><p>fields_data_atom</p></td>
|
|
<td><p>list of properties (in order) in the Atoms section of a data file, as read by <a class="reference internal" href="read_data.html"><span class="doc">read_data</span></a></p></td>
|
|
</tr>
|
|
<tr class="row-even"><td><p>fields_data_vel</p></td>
|
|
<td><p>list of properties (in order) in the Velocities section of a data file, as read by <a class="reference internal" href="read_data.html"><span class="doc">read_data</span></a></p></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p>In these lists you can list variable names which LAMMPS already defines
|
|
(in some other atom style), or you can create new variable names. You
|
|
should not re-use a LAMMPS variable in your atom style that is used for
|
|
something with a different meaning in another atom style. If the
|
|
meaning is related, but interpreted differently by your atom style, then
|
|
using the same variable name means a user must not use your style and
|
|
the other style together in a <a class="reference internal" href="atom_style.html"><span class="doc">atom_style hybrid</span></a>
|
|
command. Because there will only be one value of the variable and
|
|
different parts of LAMMPS will then likely use it differently. LAMMPS
|
|
has no way of checking for this.</p>
|
|
<p>If you are defining new variable names then make them descriptive and
|
|
unique to your new atom style. For example choosing “e” for energy is
|
|
a bad choice; it is too generic. A better choice would be “e_foo”,
|
|
where “foo” is specific to your style.</p>
|
|
<p>If any of the variable names in your new atom style do not exist in
|
|
LAMMPS, you need to add them to the src/atom.h and atom.cpp files.</p>
|
|
<p>Search for the word “customize” or “customization” in these 2 files to
|
|
see where to add your variable. Adding a flag to the 2nd customization
|
|
section in <code class="docutils literal notranslate"><span class="pre">atom.h</span></code> is only necessary if your code (e.g. a pair style)
|
|
needs to check that a per-atom property is defined. These flags should
|
|
also be set in the constructor of the atom style child class.</p>
|
|
<p>In <code class="docutils literal notranslate"><span class="pre">atom.cpp</span></code>, aside from the constructor and destructor, there are 3
|
|
methods that a new variable name or flag needs to be added to.</p>
|
|
<p>In <code class="docutils literal notranslate"><span class="pre">Atom::peratom_create()</span></code> when using the <code class="docutils literal notranslate"><span class="pre">Atom::add_peratom()</span></code>
|
|
method, a cols argument of 0 is for per-atom vectors, a length >
|
|
1 is for per-atom arrays. Note the use of the extra per-thread flag and
|
|
the add_peratom_vary() method when the last dimension of the array is
|
|
variable-length.</p>
|
|
<p>Adding the variable name to Atom::extract() enables the per-atom data
|
|
to be accessed through the <a class="reference internal" href="Howto_library.html"><span class="doc">LAMMPS library interface</span></a> by a calling code, including from <a class="reference internal" href="Python_head.html"><span class="doc">Python</span></a>.</p>
|
|
<p>The constructor of the new atom style will also typically set a few
|
|
flags which are defined at the top of <code class="docutils literal notranslate"><span class="pre">atom_vec.h</span></code>. If these are
|
|
unclear, see how other atom styles use them.</p>
|
|
<p>The grow_pointers() method is also required to make a copy of peratom
|
|
data pointers, as explained in the code.</p>
|
|
<p>There are a number of other optional methods which your atom style can
|
|
implement. These are only needed if you need to do something
|
|
out-of-the-ordinary which the default operation of the AtomVec parent
|
|
class does not take care of. The best way to figure out why they are
|
|
sometimes useful is to look at how other atom styles use them.</p>
|
|
<ul class="simple">
|
|
<li><p>process_args = use if the atom style has arguments</p></li>
|
|
<li><p>init = called before each run</p></li>
|
|
<li><p>force_clear = called before force computations each timestep</p></li>
|
|
</ul>
|
|
<p>A few atom styles define “bonus” data associated with some or all of
|
|
their particles, such as <a class="reference internal" href="atom_style.html"><span class="doc">atom_style ellipsoid or tri</span></a>. These methods work with that data:</p>
|
|
<ul class="simple">
|
|
<li><p>copy_bonus</p></li>
|
|
<li><p>clear_bonus</p></li>
|
|
<li><p>pack_comm_bonus</p></li>
|
|
<li><p>unpack_comm_bonus</p></li>
|
|
<li><p>pack_border_bonus</p></li>
|
|
<li><p>unpack_border_bonus</p></li>
|
|
<li><p>pack_exchange_bonus</p></li>
|
|
<li><p>unpack_exchange_bonus</p></li>
|
|
<li><p>size_restart_bonus</p></li>
|
|
<li><p>pack_restart_bonus</p></li>
|
|
<li><p>unpack_restart_bonus</p></li>
|
|
<li><p>data_atom_bonus</p></li>
|
|
<li><p>memory_usage_bonus</p></li>
|
|
</ul>
|
|
<p>The <a class="reference internal" href="atom_style.html"><span class="doc">atom_style body</span></a> command can define a particle
|
|
geometry with an arbitrary number of values. This method reads it
|
|
from a data file:</p>
|
|
<ul class="simple">
|
|
<li><p>data_body</p></li>
|
|
</ul>
|
|
<p>These methods are called before or after operations handled by the
|
|
parent AtomVec class. They allow an atom style to do customized
|
|
operations on the per-atom values. For example <a class="reference internal" href="atom_style.html"><span class="doc">atom_style
|
|
sphere</span></a> reads a diameter and density of each particle
|
|
from a data file. But these need to be converted internally to a
|
|
radius and mass. That operation is done in the data_atom_post()
|
|
method.</p>
|
|
<ul class="simple">
|
|
<li><p>pack_restart_pre</p></li>
|
|
<li><p>pack_restart_post</p></li>
|
|
<li><p>unpack_restart_init</p></li>
|
|
<li><p>create_atom_post</p></li>
|
|
<li><p>data_atom_post</p></li>
|
|
<li><p>pack_data_pre</p></li>
|
|
<li><p>pack_data_post</p></li>
|
|
</ul>
|
|
<p>These methods enable the <a class="reference internal" href="compute_property_atom.html"><span class="doc">compute property/atom</span></a>
|
|
command to access per-atom variables it does not
|
|
already define as arguments, so that they can be written to a dump
|
|
file or used by other LAMMPS commands.</p>
|
|
<ul class="simple">
|
|
<li><p>property_atom</p></li>
|
|
<li><p>pack_property_atom</p></li>
|
|
</ul>
|
|
</section>
|
|
|
|
|
|
</div>
|
|
</div>
|
|
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
|
|
<a href="Modify_style.html" class="btn btn-neutral float-left" title="3.4. LAMMPS programming style" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
|
|
<a href="Modify_pair.html" class="btn btn-neutral float-right" title="3.6. Pair styles" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
|
|
</div>
|
|
|
|
<hr/>
|
|
|
|
<div role="contentinfo">
|
|
<p>© Copyright 2003-2025 Sandia Corporation.</p>
|
|
</div>
|
|
|
|
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
|
|
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
|
|
provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
|
|
|
|
|
</footer>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
</div>
|
|
<script>
|
|
jQuery(function () {
|
|
SphinxRtdTheme.Navigation.enable(false);
|
|
});
|
|
</script>
|
|
|
|
</body>
|
|
</html> |