Files
lammps/doc/html/Classes.html
2025-01-13 14:55:48 +00:00

251 lines
19 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>4.13. C++ base classes &mdash; 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/Classes.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="4.13.1. LAMMPS Class" href="Classes_lammps.html" />
<link rel="prev" title="4.12. Adding tests for unit testing" href="Developer_unittest.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"><a class="reference internal" href="Modify.html">3. Modifying &amp; extending LAMMPS</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="Developer.html">4. Information for Developers</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="Developer_org.html">4.1. Source files</a></li>
<li class="toctree-l2"><a class="reference internal" href="Developer_org.html#class-topology">4.2. Class topology</a></li>
<li class="toctree-l2"><a class="reference internal" href="Developer_code_design.html">4.3. Code design</a></li>
<li class="toctree-l2"><a class="reference internal" href="Developer_parallel.html">4.4. Parallel algorithms</a></li>
<li class="toctree-l2"><a class="reference internal" href="Developer_atom.html">4.5. Accessing per-atom data</a></li>
<li class="toctree-l2"><a class="reference internal" href="Developer_comm_ops.html">4.6. Communication patterns</a></li>
<li class="toctree-l2"><a class="reference internal" href="Developer_flow.html">4.7. How a timestep works</a></li>
<li class="toctree-l2"><a class="reference internal" href="Developer_write.html">4.8. Writing new styles</a></li>
<li class="toctree-l2"><a class="reference internal" href="Developer_notes.html">4.9. Notes for developers and code maintainers</a></li>
<li class="toctree-l2"><a class="reference internal" href="Developer_updating.html">4.10. Notes for updating code written for older LAMMPS versions</a></li>
<li class="toctree-l2"><a class="reference internal" href="Developer_plugins.html">4.11. Writing plugins</a></li>
<li class="toctree-l2"><a class="reference internal" href="Developer_unittest.html">4.12. Adding tests for unit testing</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">4.13. C++ base classes</a><ul>
<li class="toctree-l3"><a class="reference internal" href="Classes_lammps.html">4.13.1. LAMMPS Class</a></li>
<li class="toctree-l3"><a class="reference internal" href="Classes_atom.html">4.13.2. LAMMPS Atom and AtomVec Base Classes</a></li>
<li class="toctree-l3"><a class="reference internal" href="Classes_input.html">4.13.3. LAMMPS Input Base Class</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="Developer_platform.html">4.14. Platform abstraction functions</a></li>
<li class="toctree-l2"><a class="reference internal" href="Developer_utils.html">4.15. Utility functions</a></li>
<li class="toctree-l2"><a class="reference internal" href="Developer_utils.html#special-math-functions">4.16. Special Math functions</a></li>
<li class="toctree-l2"><a class="reference internal" href="Developer_utils.html#tokenizer-classes">4.17. Tokenizer classes</a></li>
<li class="toctree-l2"><a class="reference internal" href="Developer_utils.html#argument-parsing-classes">4.18. Argument parsing classes</a></li>
<li class="toctree-l2"><a class="reference internal" href="Developer_utils.html#file-reader-classes">4.19. File reader classes</a></li>
<li class="toctree-l2"><a class="reference internal" href="Developer_utils.html#memory-pool-classes">4.20. Memory pool classes</a></li>
<li class="toctree-l2"><a class="reference internal" href="Developer_utils.html#eigensolver-functions">4.21. Eigensolver functions</a></li>
<li class="toctree-l2"><a class="reference internal" href="Developer_utils.html#communication-buffer-coding-with-ubuf">4.22. Communication buffer coding with <em>ubuf</em></a></li>
<li class="toctree-l2"><a class="reference internal" href="Developer_grid.html">4.23. Use of distributed grids within style classes</a></li>
</ul>
</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="Developer.html"><span class="section-number">4. </span>Information for Developers</a></li>
<li class="breadcrumb-item active"><span class="section-number">4.13. </span>C++ base classes</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="Developer_unittest.html" class="btn btn-neutral float-left" title="4.12. Adding tests for unit testing" accesskey="p"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
<a href="Classes_lammps.html" class="btn btn-neutral float-right" title="4.13.1. LAMMPS Class" 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="c-base-classes">
<h1><span class="section-number">4.13. </span>C++ base classes<a class="headerlink" href="#c-base-classes" title="Link to this heading"></a></h1>
<p>LAMMPS is designed to be used as a C++ class library where one can set
up and drive a simulation through creating a class instance and then
calling some abstract operations or commands on that class or its member
class instances. These are interfaced to the <a class="reference internal" href="Library.html"><span class="doc">C library API</span></a>, which providing an additional level of abstraction
simplification for common operations. The C API is also the basis for
calling LAMMPS from Python or Fortran.</p>
<p>When used from a C++ program, most of the symbols and functions in
LAMMPS are wrapped into the <code class="docutils literal notranslate"><span class="pre">LAMMPS_NS</span></code> namespace so they will not
collide with your own classes or other libraries. This, however, does
not extend to the additional libraries bundled with LAMMPS in the lib
folder and some of the low-level code of some packages.</p>
<p>Behind the scenes this is implemented through inheritance and
polymorphism where base classes define the abstract interface and
derived classes provide the specialized implementation for specific
models or optimizations or ports to accelerator platforms. This
document will provide an outline of the fundamental class hierarchy and
some selected examples for derived classes of specific models.</p>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>Please see the <a class="reference internal" href="Library.html#thread-safety"><span class="std std-ref">note about thread-safety</span></a>
in the library Howto doc page.</p>
</div>
<hr class="docutils" />
<div class="toctree-wrapper compound" id="lammpsbase">
<p class="caption" role="heading"><span class="caption-text">Individual Base Classes</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="Classes_lammps.html">4.13.1. LAMMPS Class</a><ul>
<li class="toctree-l2"><a class="reference internal" href="Classes_lammps.html#_CPPv4N9LAMMPS_NS6LAMMPSE"><code class="docutils literal notranslate"><span class="pre">LAMMPS</span></code></a><ul>
<li class="toctree-l3"><a class="reference internal" href="Classes_lammps.html#_CPPv4NK9LAMMPS_NS6LAMMPS15non_pair_suffixEv"><code class="docutils literal notranslate"><span class="pre">LAMMPS::non_pair_suffix()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="Classes_lammps.html#_CPPv4N9LAMMPS_NS6LAMMPS11match_styleEPKcPKc"><code class="docutils literal notranslate"><span class="pre">LAMMPS::match_style()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="Classes_lammps.html#_CPPv4N9LAMMPS_NS6LAMMPS6LAMMPSER4argv8MPI_Comm"><code class="docutils literal notranslate"><span class="pre">LAMMPS::LAMMPS()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="Classes_lammps.html#_CPPv4N9LAMMPS_NS6LAMMPS6LAMMPSEiPPc8MPI_Comm"><code class="docutils literal notranslate"><span class="pre">LAMMPS::LAMMPS()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="Classes_lammps.html#_CPPv4N9LAMMPS_NS6LAMMPSD0Ev"><code class="docutils literal notranslate"><span class="pre">LAMMPS::~LAMMPS()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="Classes_lammps.html#_CPPv4N9LAMMPS_NS6LAMMPS16is_installed_pkgEPKc"><code class="docutils literal notranslate"><span class="pre">LAMMPS::is_installed_pkg()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="Classes_lammps.html#_CPPv4N9LAMMPS_NS6LAMMPS13argv_pointersER4argv"><code class="docutils literal notranslate"><span class="pre">LAMMPS::argv_pointers()</span></code></a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="Classes_lammps.html#_CPPv4N9LAMMPS_NS8PointersE"><code class="docutils literal notranslate"><span class="pre">Pointers</span></code></a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="Classes_atom.html">4.13.2. LAMMPS Atom and AtomVec Base Classes</a><ul>
<li class="toctree-l2"><a class="reference internal" href="Classes_atom.html#_CPPv4N9LAMMPS_NS4AtomE"><code class="docutils literal notranslate"><span class="pre">Atom</span></code></a><ul>
<li class="toctree-l3"><a class="reference internal" href="Classes_atom.html#_CPPv4N9LAMMPS_NS4Atom4AtomEP6LAMMPS"><code class="docutils literal notranslate"><span class="pre">Atom::Atom()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="Classes_atom.html#_CPPv4N9LAMMPS_NS4Atom11find_customEPKcRiRi"><code class="docutils literal notranslate"><span class="pre">Atom::find_custom()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="Classes_atom.html#_CPPv4N9LAMMPS_NS4Atom17find_custom_ghostEPKcRiRiRi"><code class="docutils literal notranslate"><span class="pre">Atom::find_custom_ghost()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="Classes_atom.html#_CPPv4N9LAMMPS_NS4Atom10add_customEPKciii"><code class="docutils literal notranslate"><span class="pre">Atom::add_custom()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="Classes_atom.html#_CPPv4N9LAMMPS_NS4Atom13remove_customEiii"><code class="docutils literal notranslate"><span class="pre">Atom::remove_custom()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="Classes_atom.html#_CPPv4N9LAMMPS_NS4Atom7extractEPKc"><code class="docutils literal notranslate"><span class="pre">Atom::extract()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="Classes_atom.html#_CPPv4N9LAMMPS_NS4Atom16extract_datatypeEPKc"><code class="docutils literal notranslate"><span class="pre">Atom::extract_datatype()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="Classes_atom.html#_CPPv4N9LAMMPS_NS4Atom12extract_sizeEPKci"><code class="docutils literal notranslate"><span class="pre">Atom::extract_size()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="Classes_atom.html#_CPPv4N9LAMMPS_NS4Atom7PerAtomE"><code class="docutils literal notranslate"><span class="pre">Atom::PerAtom</span></code></a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="Classes_input.html">4.13.3. LAMMPS Input Base Class</a><ul>
<li class="toctree-l2"><a class="reference internal" href="Classes_input.html#_CPPv4N9LAMMPS_NS5InputE"><code class="docutils literal notranslate"><span class="pre">Input</span></code></a><ul>
<li class="toctree-l3"><a class="reference internal" href="Classes_input.html#_CPPv4N9LAMMPS_NS5Input5InputEP6LAMMPSiPPc"><code class="docutils literal notranslate"><span class="pre">Input::Input()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="Classes_input.html#_CPPv4N9LAMMPS_NS5Input4fileEv"><code class="docutils literal notranslate"><span class="pre">Input::file()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="Classes_input.html#_CPPv4N9LAMMPS_NS5Input4fileEPKc"><code class="docutils literal notranslate"><span class="pre">Input::file()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="Classes_input.html#_CPPv4N9LAMMPS_NS5Input3oneERKNSt6stringE"><code class="docutils literal notranslate"><span class="pre">Input::one()</span></code></a></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</section>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
<a href="Developer_unittest.html" class="btn btn-neutral float-left" title="4.12. Adding tests for unit testing" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
<a href="Classes_lammps.html" class="btn btn-neutral float-right" title="4.13.1. LAMMPS Class" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
<div role="contentinfo">
<p>&#169; 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>