356 lines
27 KiB
HTML
356 lines
27 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.16. Granular Sub-Model 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_gran_sub_mod.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.17. Thermodynamic output options" href="Modify_thermo.html" />
|
|
<link rel="prev" title="3.15. Body styles" href="Modify_body.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"><a class="reference internal" href="Modify_atom.html">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 current"><a class="current reference internal" href="#">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.16. </span>Granular Sub-Model 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_body.html" class="btn btn-neutral float-left" title="3.15. Body styles" accesskey="p"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
|
|
<a href="Modify_thermo.html" class="btn btn-neutral float-right" title="3.17. Thermodynamic output options" 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="granular-sub-model-styles">
|
|
<h1><span class="section-number">3.16. </span>Granular Sub-Model styles<a class="headerlink" href="#granular-sub-model-styles" title="Link to this heading"></a></h1>
|
|
<p>In granular models, particles are spheres with a finite radius and rotational
|
|
degrees of freedom as further described in the
|
|
<a class="reference internal" href="Howto_granular.html"><span class="doc">Howto granular page</span></a>. Interactions between pair of
|
|
particles or particles and walls may therefore depend on many different modes
|
|
of motion as described in <a class="reference internal" href="pair_granular.html"><span class="doc">pair granular</span></a> and
|
|
<a class="reference internal" href="fix_wall_gran.html"><span class="doc">fix wall/gran</span></a>. In both cases, the exchange of forces,
|
|
torques, and heat flow between two types of bodies is defined using a
|
|
GranularModel class. The GranularModel class organizes the details of an
|
|
interaction using a series of granular sub-models each of which describe a
|
|
particular interaction mode (e.g. normal forces or rolling friction). From a
|
|
parent GranSubMod class, several types of sub-model classes are derived:</p>
|
|
<ul class="simple">
|
|
<li><p>GranSubModNormal: normal force sub-model</p></li>
|
|
<li><p>GranSubModDamping: normal damping sub-model</p></li>
|
|
<li><p>GranSubModTangential: tangential forces and sliding friction sub-model</p></li>
|
|
<li><p>GranSubModRolling: rolling friction sub-model</p></li>
|
|
<li><p>GranSubModTwisting: twisting friction sub-model</p></li>
|
|
<li><p>GranSubModHeat: heat conduction sub-model</p></li>
|
|
</ul>
|
|
<p>For each type of sub-model, more classes are further derived, each describing a
|
|
specific implementation. For instance, from the GranSubModNormal class the
|
|
GranSubModNormalHooke, GranSubModNormalHertz, and GranSubModNormalJKR classes
|
|
are derived which calculate Hookean, Hertzian, or JKR normal forces,
|
|
respectively. This modular structure simplifies the addition of new granular
|
|
contact models as one only needs to create a new GranSubMod class without
|
|
having to modify the more complex PairGranular, FixGranWall, and GranularModel
|
|
classes. Most GranSubMod methods are also already defined by the parent classes
|
|
so new contact models typically only require edits to a few relevant methods
|
|
(e.g. methods that define coefficients and calculate forces).</p>
|
|
<p>Each GranSubMod class has a pointer to both the LAMMPS class and the GranularModel
|
|
class which owns it, <code class="docutils literal notranslate"><span class="pre">lmp</span></code> and <code class="docutils literal notranslate"><span class="pre">gm</span></code>, respectively. The GranularModel class
|
|
includes several public variables that describe the geometry/dynamics of the
|
|
contact such as</p>
|
|
<table class="docutils align-default">
|
|
<colgroup>
|
|
<col style="width: 25.0%" />
|
|
<col style="width: 75.0%" />
|
|
</colgroup>
|
|
<tbody>
|
|
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">xi</span></code> and <code class="docutils literal notranslate"><span class="pre">xj</span></code></p></td>
|
|
<td><p>Positions of the two contacting bodies</p></td>
|
|
</tr>
|
|
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">vi</span></code> and <code class="docutils literal notranslate"><span class="pre">vj</span></code></p></td>
|
|
<td><p>Velocities of the two contacting bodies</p></td>
|
|
</tr>
|
|
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">omegai</span></code> and <code class="docutils literal notranslate"><span class="pre">omegaj</span></code></p></td>
|
|
<td><p>Angular velocities of the two contacting bodies</p></td>
|
|
</tr>
|
|
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">dx</span></code> and <code class="docutils literal notranslate"><span class="pre">nx</span></code></p></td>
|
|
<td><p>The displacement and normalized displacement vectors</p></td>
|
|
</tr>
|
|
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">r</span></code>, <code class="docutils literal notranslate"><span class="pre">rsq</span></code>, and <code class="docutils literal notranslate"><span class="pre">rinv</span></code></p></td>
|
|
<td><p>The distance, distance squared, and inverse distance</p></td>
|
|
</tr>
|
|
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">radsum</span></code></p></td>
|
|
<td><p>The sum of particle radii</p></td>
|
|
</tr>
|
|
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">vr</span></code>, <code class="docutils literal notranslate"><span class="pre">vn</span></code>, and <code class="docutils literal notranslate"><span class="pre">vt</span></code></p></td>
|
|
<td><p>The relative velocity vector and its normal and tangential components</p></td>
|
|
</tr>
|
|
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">wr</span></code></p></td>
|
|
<td><p>The relative rotational velocity</p></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p>These quantities, among others, are calculated in the <code class="docutils literal notranslate"><span class="pre">GranularModel->check_contact()</span></code>
|
|
and <code class="docutils literal notranslate"><span class="pre">GranularModel->calculate_forces()</span></code> methods which can be referred to for more
|
|
details.</p>
|
|
<p>To create a new GranSubMod class, it is recommended that one first looks at similar
|
|
GranSubMod classes. All GranSubMod classes share several general methods which may
|
|
need to be defined</p>
|
|
<table class="docutils align-default">
|
|
<colgroup>
|
|
<col style="width: 25.0%" />
|
|
<col style="width: 75.0%" />
|
|
</colgroup>
|
|
<tbody>
|
|
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">mix_coeff()</span></code></p></td>
|
|
<td><p>Optional method to define how coefficients are mixed for different atom types. By default, coefficients are mixed using a geometric mean.</p></td>
|
|
</tr>
|
|
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">coeffs_to_local()</span></code></p></td>
|
|
<td><p>Parses coefficients to define local variables. Run once at model construction.</p></td>
|
|
</tr>
|
|
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">init()</span></code></p></td>
|
|
<td><p>Optional method to define local variables after other GranSubMod types were created. For instance, this method may be used by a tangential model that derives parameters from the normal model.</p></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p>The Normal, Damping, Tangential, Twisting, and Rolling sub-models also have a
|
|
<code class="docutils literal notranslate"><span class="pre">calculate_forces()</span></code> method which calculate the respective forces/torques.
|
|
Correspondingly, the Heat sub-model has a <code class="docutils literal notranslate"><span class="pre">calculate_heat()</span></code> method. Lastly,
|
|
the Normal sub-model has a few extra optional methods:</p>
|
|
<table class="docutils align-default">
|
|
<colgroup>
|
|
<col style="width: 25.0%" />
|
|
<col style="width: 75.0%" />
|
|
</colgroup>
|
|
<tbody>
|
|
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">touch()</span></code></p></td>
|
|
<td><p>Tests whether particles are in contact. By default, when particles overlap.</p></td>
|
|
</tr>
|
|
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">pulloff_distance()</span></code></p></td>
|
|
<td><p>Returns the distance at which particles stop interacting. By default, when particles no longer overlap.</p></td>
|
|
</tr>
|
|
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">calculate_radius()</span></code></p></td>
|
|
<td><p>Returns the radius of the contact. By default, the radius of the geometric cross section.</p></td>
|
|
</tr>
|
|
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">set_fncrit()</span></code></p></td>
|
|
<td><p>Defines the critical force to break the contact used by some tangential, rolling, and twisting sub-models. By default, the current total normal force including damping.</p></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p>As an example, say one wanted to create a new normal force option that consisted
|
|
of a Hookean force with a piecewise stiffness. This could be done by adding a new
|
|
set of files <code class="docutils literal notranslate"><span class="pre">gran_sub_mod_custom.h</span></code>:</p>
|
|
<div class="highlight-c++ notranslate"><div class="highlight"><pre><span></span><span class="cp">#ifdef GranSubMod_CLASS</span>
|
|
<span class="c1">// clang-format off</span>
|
|
<span class="n">GranSubModStyle</span><span class="p">(</span><span class="n">hooke</span><span class="o">/</span><span class="n">piecewise</span><span class="p">,</span><span class="n">GranSubModNormalHookePiecewise</span><span class="p">,</span><span class="n">NORMAL</span><span class="p">);</span>
|
|
<span class="c1">// clang-format on</span>
|
|
<span class="cp">#else</span>
|
|
|
|
<span class="cp">#ifndef GRAN_SUB_MOD_CUSTOM_H_</span>
|
|
<span class="cp">#define GRAN_SUB_MOD_CUSTOM_H_</span>
|
|
|
|
<span class="cp">#include</span><span class="w"> </span><span class="cpf">"gran_sub_mod.h"</span>
|
|
<span class="cp">#include</span><span class="w"> </span><span class="cpf">"gran_sub_mod_normal.h"</span>
|
|
|
|
<span class="k">namespace</span><span class="w"> </span><span class="nn">LAMMPS_NS</span><span class="w"> </span><span class="p">{</span>
|
|
<span class="k">namespace</span><span class="w"> </span><span class="nn">Granular_NS</span><span class="w"> </span><span class="p">{</span>
|
|
<span class="w"> </span><span class="k">class</span><span class="w"> </span><span class="nc">GranSubModNormalHookePiecewise</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="k">public</span><span class="w"> </span><span class="n">GranSubModNormal</span><span class="w"> </span><span class="p">{</span>
|
|
<span class="w"> </span><span class="k">public</span><span class="o">:</span>
|
|
<span class="w"> </span><span class="n">GranSubModNormalHookePiecewise</span><span class="p">(</span><span class="k">class</span><span class="w"> </span><span class="nc">GranularModel</span><span class="w"> </span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="k">class</span><span class="w"> </span><span class="nc">LAMMPS</span><span class="w"> </span><span class="o">*</span><span class="p">);</span>
|
|
<span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">coeffs_to_local</span><span class="p">()</span><span class="w"> </span><span class="k">override</span><span class="p">;</span>
|
|
<span class="w"> </span><span class="kt">double</span><span class="w"> </span><span class="nf">calculate_forces</span><span class="p">()</span><span class="w"> </span><span class="k">override</span><span class="p">;</span>
|
|
<span class="w"> </span><span class="k">protected</span><span class="o">:</span>
|
|
<span class="w"> </span><span class="kt">double</span><span class="w"> </span><span class="n">k1</span><span class="p">,</span><span class="w"> </span><span class="n">k2</span><span class="p">,</span><span class="w"> </span><span class="n">delta_switch</span><span class="p">;</span>
|
|
<span class="w"> </span><span class="p">};</span>
|
|
<span class="p">}</span><span class="w"> </span><span class="c1">// namespace Granular_NS</span>
|
|
<span class="p">}</span><span class="w"> </span><span class="c1">// namespace LAMMPS_NS</span>
|
|
|
|
<span class="cp">#endif </span><span class="cm">/*GRAN_SUB_MOD_CUSTOM_H_ */</span>
|
|
<span class="cp">#endif </span><span class="cm">/*GRAN_SUB_MOD_CLASS_H_ */</span>
|
|
</pre></div>
|
|
</div>
|
|
<p>and <code class="docutils literal notranslate"><span class="pre">gran_sub_mod_custom.cpp</span></code></p>
|
|
<div class="highlight-c++ notranslate"><div class="highlight"><pre><span></span><span class="cp">#include</span><span class="w"> </span><span class="cpf">"gran_sub_mod_custom.h"</span>
|
|
<span class="cp">#include</span><span class="w"> </span><span class="cpf">"gran_sub_mod_normal.h"</span>
|
|
<span class="cp">#include</span><span class="w"> </span><span class="cpf">"granular_model.h"</span>
|
|
|
|
<span class="k">using</span><span class="w"> </span><span class="k">namespace</span><span class="w"> </span><span class="nn">LAMMPS_NS</span><span class="p">;</span>
|
|
<span class="k">using</span><span class="w"> </span><span class="k">namespace</span><span class="w"> </span><span class="nn">Granular_NS</span><span class="p">;</span>
|
|
|
|
<span class="n">GranSubModNormalHookePiecewise</span><span class="o">::</span><span class="n">GranSubModNormalHookePiecewise</span><span class="p">(</span><span class="n">GranularModel</span><span class="w"> </span><span class="o">*</span><span class="n">gm</span><span class="p">,</span><span class="w"> </span><span class="n">LAMMPS</span><span class="w"> </span><span class="o">*</span><span class="n">lmp</span><span class="p">)</span><span class="w"> </span><span class="o">:</span>
|
|
<span class="w"> </span><span class="n">GranSubModNormal</span><span class="p">(</span><span class="n">gm</span><span class="p">,</span><span class="w"> </span><span class="n">lmp</span><span class="p">)</span>
|
|
<span class="p">{</span>
|
|
<span class="w"> </span><span class="n">num_coeffs</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">4</span><span class="p">;</span>
|
|
<span class="p">}</span>
|
|
|
|
<span class="cm">/* ---------------------------------------------------------------------- */</span>
|
|
|
|
<span class="kt">void</span><span class="w"> </span><span class="n">GranSubModNormalHookePiecewise</span><span class="o">::</span><span class="n">coeffs_to_local</span><span class="p">()</span>
|
|
<span class="p">{</span>
|
|
<span class="w"> </span><span class="n">k1</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">coeffs</span><span class="p">[</span><span class="mi">0</span><span class="p">];</span>
|
|
<span class="w"> </span><span class="n">k2</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">coeffs</span><span class="p">[</span><span class="mi">1</span><span class="p">];</span>
|
|
<span class="w"> </span><span class="n">damp</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">coeffs</span><span class="p">[</span><span class="mi">2</span><span class="p">];</span>
|
|
<span class="w"> </span><span class="n">delta_switch</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">coeffs</span><span class="p">[</span><span class="mi">3</span><span class="p">];</span>
|
|
<span class="p">}</span>
|
|
|
|
<span class="cm">/* ---------------------------------------------------------------------- */</span>
|
|
|
|
<span class="kt">double</span><span class="w"> </span><span class="n">GranSubModNormalHookePiecewise</span><span class="o">::</span><span class="n">calculate_forces</span><span class="p">()</span>
|
|
<span class="p">{</span>
|
|
<span class="w"> </span><span class="kt">double</span><span class="w"> </span><span class="n">Fne</span><span class="p">;</span>
|
|
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">gm</span><span class="o">-></span><span class="n">delta</span><span class="w"> </span><span class="o">>=</span><span class="w"> </span><span class="n">delta_switch</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
|
|
<span class="w"> </span><span class="n">Fne</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">k1</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">delta_switch</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">k2</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="p">(</span><span class="n">gm</span><span class="o">-></span><span class="n">delta</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="n">delta_switch</span><span class="p">);</span>
|
|
<span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">{</span>
|
|
<span class="w"> </span><span class="n">Fne</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">k1</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">gm</span><span class="o">-></span><span class="n">delta</span><span class="p">;</span>
|
|
<span class="w"> </span><span class="p">}</span>
|
|
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">Fne</span><span class="p">;</span>
|
|
<span class="p">}</span>
|
|
</pre></div>
|
|
</div>
|
|
</section>
|
|
|
|
|
|
</div>
|
|
</div>
|
|
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
|
|
<a href="Modify_body.html" class="btn btn-neutral float-left" title="3.15. Body styles" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
|
|
<a href="Modify_thermo.html" class="btn btn-neutral float-right" title="3.17. Thermodynamic output options" 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> |