make equation references explicit since .. math:: + 🏷️ does not work with latex

This commit is contained in:
Axel Kohlmeyer 2022-09-29 13:54:09 -04:00
parent c6eb6d858b
commit 09948f11be
No known key found for this signature in database
GPG Key ID: D9B44E93BF0C375A
1 changed files with 61 additions and 58 deletions

View File

@ -129,8 +129,9 @@ collectively on all points interacting with that point. Using the
notation of :ref:`(Silling 2007) <Silling2007_2>`, we write the notation of :ref:`(Silling 2007) <Silling2007_2>`, we write the
peridynamic equation of motion as peridynamic equation of motion as
.. _periNewtonII:
.. math:: .. math::
:label: periNewtonII
\rho(\mathbf{x}) \ddot{\mathbf{u}}(\mathbf{x},t) = \rho(\mathbf{x}) \ddot{\mathbf{u}}(\mathbf{x},t) =
\int_{\mathcal{H}_{\mathbf{x}}} \left\{ \int_{\mathcal{H}_{\mathbf{x}}} \left\{
@ -138,7 +139,7 @@ peridynamic equation of motion as
\right]\left<\mathbf{x}^{\prime}-\mathbf{x} \right> - \right]\left<\mathbf{x}^{\prime}-\mathbf{x} \right> -
\underline{\mathbf{T}}\left[\mathbf{x}^{\prime},t \underline{\mathbf{T}}\left[\mathbf{x}^{\prime},t
\right]\left<\mathbf{x}-\mathbf{x}^{\prime} \right> \right\} \right]\left<\mathbf{x}-\mathbf{x}^{\prime} \right> \right\}
{d}V_{\mathbf{x}^\prime} + \mathbf{b}(\mathbf{x},t), {d}V_{\mathbf{x}^\prime} + \mathbf{b}(\mathbf{x},t), \qquad\qquad\textrm{(1)}
where :math:`\rho` represents the mass density, where :math:`\rho` represents the mass density,
:math:`\underline{\mathbf{T}}` the force vector state, and :math:`\underline{\mathbf{T}}` the force vector state, and
@ -149,7 +150,7 @@ where :math:`\rho` represents the mass density,
radius :math:`\delta>0` centered at :math:`\mathbf{x}`. :math:`\delta` radius :math:`\delta>0` centered at :math:`\mathbf{x}`. :math:`\delta`
is called the *horizon*, and is analogous to the cutoff radius used in is called the *horizon*, and is analogous to the cutoff radius used in
molecular dynamics. Conditions on :math:`\underline{\mathbf{T}}` for molecular dynamics. Conditions on :math:`\underline{\mathbf{T}}` for
which :math:numref:`periNewtonII` satisfies the balance of linear and angular which :ref:`(1) <periNewtonII>` satisfies the balance of linear and angular
momentum are given in :ref:`(Silling 2007) <Silling2007_2>`. momentum are given in :ref:`(Silling 2007) <Silling2007_2>`.
We consider only force vector states that can be written as We consider only force vector states that can be written as
@ -163,7 +164,6 @@ with :math:`\underline{t}` a *scalar force state* and
state*, defined by state*, defined by
.. math:: .. math::
:label: periM
\underline{\mathbf{M}}\left< \boldsymbol{\xi} \right> = \underline{\mathbf{M}}\left< \boldsymbol{\xi} \right> =
\left\{ \begin{array}{cl} \left\{ \begin{array}{cl}
@ -172,7 +172,7 @@ state*, defined by
} & \left\Vert \boldsymbol{\xi} + \boldsymbol{\eta} \right\Vert \neq 0 \\ } & \left\Vert \boldsymbol{\xi} + \boldsymbol{\eta} \right\Vert \neq 0 \\
\boldsymbol{0} & \textrm{otherwise} \boldsymbol{0} & \textrm{otherwise}
\end{array} \end{array}
\right. . \right. . \qquad\qquad\textrm{(2)}
Such force states correspond to so-called *ordinary* materials Such force states correspond to so-called *ordinary* materials
:ref:`(Silling 2007) <Silling2007_2>`. These are the materials for which :ref:`(Silling 2007) <Silling2007_2>`. These are the materials for which
@ -195,10 +195,9 @@ along with the horizon :math:`\delta`.
The LPS model has a force scalar state The LPS model has a force scalar state
.. math:: .. math::
:label: periLPSState
\underline{t} = \frac{3K\theta}{m}\underline{\omega}\,\underline{x} + \underline{t} = \frac{3K\theta}{m}\underline{\omega}\,\underline{x} +
\alpha \underline{\omega}\,\underline{e}^{\rm d}, \alpha \underline{\omega}\,\underline{e}^{\rm d}, \qquad\qquad\textrm{(3)}
with :math:`K` the bulk modulus and :math:`\alpha` related to the shear with :math:`K` the bulk modulus and :math:`\alpha` related to the shear
modulus :math:`G` as modulus :math:`G` as
@ -214,12 +213,11 @@ the reference position scalar state :math:`\underline{x}` so that
defined as defined as
.. math:: .. math::
:label: periWeightedVolume
m\left[ \mathbf{x} \right] = \int_{\mathcal{H}_\mathbf{x}} m\left[ \mathbf{x} \right] = \int_{\mathcal{H}_\mathbf{x}}
\underline{\omega} \left<\boldsymbol{\xi}\right> \underline{\omega} \left<\boldsymbol{\xi}\right>
\underline{x}\left<\boldsymbol{\xi} \right> \underline{x}\left<\boldsymbol{\xi} \right>
\underline{x}\left<\boldsymbol{\xi} \right>{d}V_{\boldsymbol{\xi} }. \underline{x}\left<\boldsymbol{\xi} \right>{d}V_{\boldsymbol{\xi} }. \qquad\qquad\textrm{(4)}
Let Let
@ -295,10 +293,11 @@ and the horizon :math:`\delta`.
The PMB model is expressed using the scalar force state field The PMB model is expressed using the scalar force state field
.. math:: .. _periPMBState:
:label: periPMBState
\underline{t}\left[ \mathbf{x},t \right]\left< \boldsymbol{\xi} \right> = \frac{1}{2} f\left( \boldsymbol{\eta} ,\boldsymbol{\xi} \right), .. math::
\underline{t}\left[ \mathbf{x},t \right]\left< \boldsymbol{\xi} \right> = \frac{1}{2} f\left( \boldsymbol{\eta} ,\boldsymbol{\xi} \right), \qquad\qquad\textrm{(5)}
with :math:`f` a scalar-valued function. We assume that :math:`f` takes with :math:`f` a scalar-valued function. We assume that :math:`f` takes
the form the form
@ -309,16 +308,16 @@ the form
where where
.. math:: .. _peric:
:label: peric
c = \frac{18K}{\pi \delta^4}, .. math::
c = \frac{18K}{\pi \delta^4}, \qquad\qquad\textrm{(6)}
with :math:`K` the bulk modulus and :math:`\delta` the horizon, and with :math:`K` the bulk modulus and :math:`\delta` the horizon, and
:math:`s` the bond stretch, defined as :math:`s` the bond stretch, defined as
.. math:: .. math::
:label: peristretch
s(t,\mathbf{\eta},\mathbf{\xi}) = \frac{ \left\Vert {\mathbf{\eta}+\mathbf{\xi}} \right\Vert - \left\Vert {\mathbf{\xi}} \right\Vert }{\left\Vert {\mathbf{\xi}} \right\Vert}. s(t,\mathbf{\eta},\mathbf{\xi}) = \frac{ \left\Vert {\mathbf{\eta}+\mathbf{\xi}} \right\Vert - \left\Vert {\mathbf{\xi}} \right\Vert }{\left\Vert {\mathbf{\xi}} \right\Vert}.
@ -330,12 +329,11 @@ appropriate for 3D models only. For more on the origins of the constant
:math:`c`, see :ref:`(Silling 2005) <Silling2005>`. For the derivation :math:`c`, see :ref:`(Silling 2005) <Silling2005>`. For the derivation
of :math:`c` for 1D and 2D models, see :ref:`(Emmrich) <Emmrich2007>`. of :math:`c` for 1D and 2D models, see :ref:`(Emmrich) <Emmrich2007>`.
Given :math:numref:`periPMBState`, :math:numref:`periNewtonII` reduces to Given :ref:`(5) <periPMBState>`, :ref:`(1) <periNewtonII>` reduces to
.. math:: .. math::
:label: periPMBEOM
\rho(\mathbf{x}) \ddot{\mathbf{u}}(\mathbf{x},t) = \int_{\mathcal{H}_\mathbf{x}} \mathbf{f} \left( \boldsymbol{\eta},\boldsymbol{\xi} \right){d}V_{\boldsymbol{\xi}} + \mathbf{b}(\mathbf{x},t), \rho(\mathbf{x}) \ddot{\mathbf{u}}(\mathbf{x},t) = \int_{\mathcal{H}_\mathbf{x}} \mathbf{f} \left( \boldsymbol{\eta},\boldsymbol{\xi} \right){d}V_{\boldsymbol{\xi}} + \mathbf{b}(\mathbf{x},t), \qquad\qquad\textrm{(7)}
with with
@ -362,14 +360,15 @@ the *critical stretch* criterion.
Define :math:`\mu` to be the history-dependent scalar Define :math:`\mu` to be the history-dependent scalar
boolean function boolean function
.. _perimu:
.. math:: .. math::
:label: perimu
\mu(t,\mathbf{\eta},\mathbf{\xi}) = \left\{ \mu(t,\mathbf{\eta},\mathbf{\xi}) = \left\{
\begin{array}{cl} \begin{array}{cl}
1 & \mbox{if $s(t^\prime,\mathbf{\eta},\mathbf{\xi})< \min \left(s_0(t^\prime,\mathbf{\eta},\mathbf{\xi}) , s_0(t^\prime,\mathbf{\eta}^\prime,\mathbf{\xi}^\prime) \right)$ for all $0 \leq t^\prime \leq t$} \\ 1 & \mbox{if $s(t^\prime,\mathbf{\eta},\mathbf{\xi})< \min \left(s_0(t^\prime,\mathbf{\eta},\mathbf{\xi}) , s_0(t^\prime,\mathbf{\eta}^\prime,\mathbf{\xi}^\prime) \right)$ for all $0 \leq t^\prime \leq t$} \\
0 & \mbox{otherwise} 0 & \mbox{otherwise}
\end{array}\right\}. \end{array}\right\}. \qquad\qquad\textrm{(8)}
where :math:`\mathbf{\eta}^\prime = \textbf{u}(\textbf{x}^{\prime where :math:`\mathbf{\eta}^\prime = \textbf{u}(\textbf{x}^{\prime
\prime},t) - \textbf{u}(\textbf{x}^\prime,t)` and \prime},t) - \textbf{u}(\textbf{x}^\prime,t)` and
@ -377,10 +376,11 @@ where :math:`\mathbf{\eta}^\prime = \textbf{u}(\textbf{x}^{\prime
\textbf{x}^\prime`. Here, :math:`s_0(t,\mathbf{\eta},\mathbf{\xi})` is a \textbf{x}^\prime`. Here, :math:`s_0(t,\mathbf{\eta},\mathbf{\xi})` is a
critical stretch defined as critical stretch defined as
.. math:: .. _peris0:
:label: peris0
s_0(t,\mathbf{\eta},\mathbf{\xi}) = s_{00} - \alpha s_{\min}(t,\mathbf{\eta},\mathbf{\xi}), \qquad s_{\min}(t) = \min_{\mathbf{\xi}} s(t,\mathbf{\eta},\mathbf{\xi}), .. math::
s_0(t,\mathbf{\eta},\mathbf{\xi}) = s_{00} - \alpha s_{\min}(t,\mathbf{\eta},\mathbf{\xi}), \qquad s_{\min}(t) = \min_{\mathbf{\xi}} s(t,\mathbf{\eta},\mathbf{\xi}), \qquad\qquad\textrm{(9)}
where :math:`s_{00}` and :math:`\alpha` are material-dependent where :math:`s_{00}` and :math:`\alpha` are material-dependent
constants. The history function :math:`\mu` breaks bonds when the constants. The history function :math:`\mu` breaks bonds when the
@ -400,16 +400,17 @@ should be broken.
Following :ref:`(Silling) <Silling2005>`, we can define the damage at a Following :ref:`(Silling) <Silling2005>`, we can define the damage at a
point :math:`\textbf{x}` as point :math:`\textbf{x}` as
.. _peridamageeq:
.. math:: .. math::
:label: peridamage
\varphi(\textbf{x}, t) = 1 - \frac{\int_{\mathcal{H}_{\textbf{x}}} \mu(t,\mathbf{\eta},\mathbf{\xi}) dV_{\textbf{x}^\prime} \varphi(\textbf{x}, t) = 1 - \frac{\int_{\mathcal{H}_{\textbf{x}}} \mu(t,\mathbf{\eta},\mathbf{\xi}) dV_{\textbf{x}^\prime}
}{ \int_{\mathcal{H}_{\textbf{x}}} dV_{\textbf{x}^\prime} }. }{ \int_{\mathcal{H}_{\textbf{x}}} dV_{\textbf{x}^\prime} }. \qquad\qquad\textrm{(10)}
Discrete Peridynamic Model and LAMMPS Implementation Discrete Peridynamic Model and LAMMPS Implementation
"""""""""""""""""""""""""""""""""""""""""""""""""""" """"""""""""""""""""""""""""""""""""""""""""""""""""
In LAMMPS, instead of :math:numref:`periNewtonII`, we model this equation of In LAMMPS, instead of :ref:`(1) <periNewtonII>`, we model this equation of
motion: motion:
.. math:: .. math::
@ -423,7 +424,7 @@ where we explicitly track and store at each timestep the positions and
not the displacements of the particles. We observe that not the displacements of the particles. We observe that
:math:`\ddot{\textbf{y}}(\textbf{x}, t) = \ddot{\textbf{x}} + :math:`\ddot{\textbf{y}}(\textbf{x}, t) = \ddot{\textbf{x}} +
\ddot{\textbf{u}}(\textbf{x}, t) = \ddot{\textbf{u}}(\textbf{x}, t)`, so \ddot{\textbf{u}}(\textbf{x}, t) = \ddot{\textbf{u}}(\textbf{x}, t)`, so
that this is equivalent to :math:numref:`periNewtonII`. that this is equivalent to :ref:`(1) <periNewtonII>`.
Spatial Discretization Spatial Discretization
^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^
@ -435,21 +436,23 @@ where each particle :math:`i` is associated with some volume fraction
denote the family of particles for which particle :math:`i` shares a denote the family of particles for which particle :math:`i` shares a
bond in the reference configuration. That is, bond in the reference configuration. That is,
.. math:: .. _periBondFamily:
:label: periBondFamily
.. math::
\mathcal{F}_i = \{ p ~ | ~ \left\Vert {\textbf{x}_p - \textbf{x}_i} \right\Vert \leq \delta \}.
\mathcal{F}_i = \{ p ~ | ~ \left\Vert {\textbf{x}_p - \textbf{x}_i} \right\Vert \leq \delta \}. \qquad\qquad\textrm{(11)}
The discretized equation of motion replaces :math:numref:`periNewtonII` with
The discretized equation of motion replaces :ref:`(1) <periNewtonII>` with
.. _peridiscreteNewtonII:
.. math:: .. math::
:label: peridiscreteNewtonII
\rho \ddot{\textbf{y}}_i^n = \rho \ddot{\textbf{y}}_i^n =
\sum_{p \in \mathcal{F}_i} \sum_{p \in \mathcal{F}_i}
\left\{ \underline{\mathbf{T}}\left[ \textbf{x}_i,t \right]\left<\textbf{x}_p^{\prime}-\textbf{x}_i \right> \left\{ \underline{\mathbf{T}}\left[ \textbf{x}_i,t \right]\left<\textbf{x}_p^{\prime}-\textbf{x}_i \right>
- \underline{\mathbf{T}}\left[\textbf{x}_p,t \right]\left<\textbf{x}_i-\textbf{x}_p \right> \right\} - \underline{\mathbf{T}}\left[\textbf{x}_p,t \right]\left<\textbf{x}_i-\textbf{x}_p \right> \right\}
V_{p} + \textbf{b}_i^n, V_{p} + \textbf{b}_i^n, \qquad\qquad\textrm{(12)}
where :math:`n` is the timestep number and subscripts denote the particle number. where :math:`n` is the timestep number and subscripts denote the particle number.
@ -460,31 +463,30 @@ In the model discussed so far, particles interact only through their
bond forces. A particle with no bonds becomes a free non-interacting bond forces. A particle with no bonds becomes a free non-interacting
particle. To account for contact forces, short-range forces are particle. To account for contact forces, short-range forces are
introduced :ref:`(Silling 2007) <Silling2007_2>`. We add to the force in introduced :ref:`(Silling 2007) <Silling2007_2>`. We add to the force in
:math:numref:`peridiscreteNewtonII` the following force :ref:`(12) <peridiscreteNewtonII>` the following force
.. math:: .. math::
:label: perifS
\textbf{f}_S(\textbf{y}_p,\textbf{y}_i) = \min \left\{ 0, \frac{c_S}{\delta}(\left\Vert {\textbf{y}_p-\textbf{y}_i} \right\Vert - d_{pi}) \right\} \textbf{f}_S(\textbf{y}_p,\textbf{y}_i) = \min \left\{ 0, \frac{c_S}{\delta}(\left\Vert {\textbf{y}_p-\textbf{y}_i} \right\Vert - d_{pi}) \right\}
\frac{\textbf{y}_p-\textbf{y}_i}{\left\Vert {\textbf{y}_p-\textbf{y}_i} \right\Vert}, \frac{\textbf{y}_p-\textbf{y}_i}{\left\Vert {\textbf{y}_p-\textbf{y}_i} \right\Vert}, \qquad\qquad\textrm{(13)}
where :math:`d_{pi}` is the short-range interaction distance between where :math:`d_{pi}` is the short-range interaction distance between
particles :math:`p` and :math:`i`, and :math:`c_S` is a multiple of the particles :math:`p` and :math:`i`, and :math:`c_S` is a multiple of the
constant :math:`c` from :math:numref:`peric`. Note that the short-range force constant :math:`c` from :ref:`(6) <peric>`. Note that the short-range force
is always repulsive, never attractive. In practice, we choose is always repulsive, never attractive. In practice, we choose
.. math:: .. _pericS:
:label: pericS
c_S = 15 \frac{18K}{\pi \delta^4}. .. math::
c_S = 15 \frac{18K}{\pi \delta^4}. \qquad\qquad\textrm{(14)}
For the short-range interaction distance, we choose :ref:`(Silling 2007) For the short-range interaction distance, we choose :ref:`(Silling 2007)
<Silling2007_2>` <Silling2007_2>`
.. math:: .. math::
:label: perid
d_{pi} = \min \left\{ 0.9 \left\Vert {\textbf{x}_p - \textbf{x}_i} \right\Vert, 1.35 (r_p + r_i) \right\}, d_{pi} = \min \left\{ 0.9 \left\Vert {\textbf{x}_p - \textbf{x}_i} \right\Vert, 1.35 (r_p + r_i) \right\}, \qquad\qquad\textrm{(15)}
where :math:`r_i` is called the *node radius* of particle where :math:`r_i` is called the *node radius* of particle
:math:`i`. Given a discrete lattice, we choose :math:`r_i` to be half :math:`i`. Given a discrete lattice, we choose :math:`r_i` to be half
@ -508,16 +510,16 @@ short-range family of particles
Modification to the Particle Volume Modification to the Particle Volume
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
The right-hand side of :math:numref:`peridiscreteNewtonII` may be thought of as The right-hand side of :ref:`(12) <peridiscreteNewtonII>` may be thought of as
a midpoint quadrature of :math:numref:`periNewtonII`. To slightly improve the a midpoint quadrature of :ref:`(1) <periNewtonII>`. To slightly improve the
accuracy of this quadrature, we discuss a modification to the particle accuracy of this quadrature, we discuss a modification to the particle
volume used in :math:numref:`peridiscreteNewtonII`. In a situation where two volume used in :ref:`(12) <peridiscreteNewtonII>`. In a situation where two
particles share a bond with :math:`\left\Vert { \textbf{x}_p - particles share a bond with :math:`\left\Vert { \textbf{x}_p -
\textbf{x}_i }\right\Vert = \delta`, for example, we suppose that only \textbf{x}_i }\right\Vert = \delta`, for example, we suppose that only
approximately half the volume of each particle is "seen" by the other approximately half the volume of each particle is "seen" by the other
:ref:`(Silling 2007) <Silling2007>`. When computing the force of each :ref:`(Silling 2007) <Silling2007>`. When computing the force of each
particle on the other we use :math:`V_p / 2` rather than :math:`V_p` in particle on the other we use :math:`V_p / 2` rather than :math:`V_p` in
:math:numref:`peridiscreteNewtonII`. As such, we introduce a nodal volume :ref:`(12) <peridiscreteNewtonII>`. As such, we introduce a nodal volume
scaling function for all bonded particles where :math:`\delta - r_i \leq scaling function for all bonded particles where :math:`\delta - r_i \leq
\left\Vert { \textbf{x}_p - \textbf{x}_i } \right\Vert \leq \delta` (see \left\Vert { \textbf{x}_p - \textbf{x}_i } \right\Vert \leq \delta` (see
the Figure below). the Figure below).
@ -575,12 +577,12 @@ Breaking Bonds
During the course of simulation, it may be necessary to break bonds, as During the course of simulation, it may be necessary to break bonds, as
described in the :ref:`Damage section <peridamage>`. Bonds are recorded described in the :ref:`Damage section <peridamage>`. Bonds are recorded
as broken in a simulation by removing them from the bond family as broken in a simulation by removing them from the bond family
:math:`\mathcal{F}_i` (see :math:numref:`periBondFamily`). :math:`\mathcal{F}_i` (see :ref:`(11) <periBondFamily>`).
A naive implementation would have us first loop over all bonds and A naive implementation would have us first loop over all bonds and
compute :math:`s_{min}` in :math:numref:`peris0`, then loop over all bonds compute :math:`s_{min}` in :ref:`(9) <peris0>`, then loop over all bonds
again and break bonds with a stretch :math:`s > s0` as in again and break bonds with a stretch :math:`s > s0` as in
:math:numref:`perimu`, and finally loop over all particles and compute forces :ref:`(8) <perimu>`, and finally loop over all particles and compute forces
for the next step of :ref:`Algorithm 1 <algvelverlet>`. For reasons of for the next step of :ref:`Algorithm 1 <algvelverlet>`. For reasons of
computational efficiency, we will utilize the values of :math:`s_0` from computational efficiency, we will utilize the values of :math:`s_0` from
the *previous* timestep when deciding to break a bond. the *previous* timestep when deciding to break a bond.
@ -622,7 +624,7 @@ routines in :ref:`Algorithm 3 <algperilpsm>` and :ref:`Algorithm 4
| **for all** particles :math:`j \in \mathcal{F}^S_i` (the short-range family of nodes for particle :math:`i`) **do** | **for all** particles :math:`j \in \mathcal{F}^S_i` (the short-range family of nodes for particle :math:`i`) **do**
| :math:`r = \left\Vert {\textbf{y}_j - \textbf{y}_i} \right\Vert` | :math:`r = \left\Vert {\textbf{y}_j - \textbf{y}_i} \right\Vert`
| :math:`dr = \min \{ 0, r - d \}` {*Short-range forces are only repulsive, never attractive*} | :math:`dr = \min \{ 0, r - d \}` {*Short-range forces are only repulsive, never attractive*}
| :math:`k = \frac{c_S}{\delta} V_k dr` {:math:`c_S` *defined in :math:numref:`pericS`*} | :math:`k = \frac{c_S}{\delta} V_k dr` {:math:`c_S` *defined in :ref:`(14) <pericS>`*}
| :math:`\textbf{f} = \textbf{f} + k \frac{\textbf{y}_j-\textbf{y}_i}{\left\Vert {\textbf{y}_j-\textbf{y}_i} \right\Vert}` | :math:`\textbf{f} = \textbf{f} + k \frac{\textbf{y}_j-\textbf{y}_i}{\left\Vert {\textbf{y}_j-\textbf{y}_i} \right\Vert}`
| **end for** | **end for**
| **end for** | **end for**
@ -695,7 +697,7 @@ A sketch of the PMB model implementation in the PERI package appears in
| **for all** particles :math:`j \in \mathcal{F}^S_i` (the short-range family of nodes for particle :math:`i`) **do** | **for all** particles :math:`j \in \mathcal{F}^S_i` (the short-range family of nodes for particle :math:`i`) **do**
| :math:`r = \left\Vert {\textbf{y}_j - \textbf{y}_i} \right\Vert` | :math:`r = \left\Vert {\textbf{y}_j - \textbf{y}_i} \right\Vert`
| :math:`dr = \min \{ 0, r - d \}` {*Short-range forces are only repulsive, never attractive*} | :math:`dr = \min \{ 0, r - d \}` {*Short-range forces are only repulsive, never attractive*}
| :math:`k = \frac{c_S}{\delta} V_k dr` {:math:`c_S` *defined in :math:numref:`pericS`*} | :math:`k = \frac{c_S}{\delta} V_k dr` {:math:`c_S` *defined in :ref:`(14) <pericS>`*}
| :math:`\textbf{f} = \textbf{f} + k \frac{\textbf{y}_j-\textbf{y}_i}{\left\Vert {\textbf{y}_j-\textbf{y}_i} \right\Vert}` | :math:`\textbf{f} = \textbf{f} + k \frac{\textbf{y}_j-\textbf{y}_i}{\left\Vert {\textbf{y}_j-\textbf{y}_i} \right\Vert}`
| **end for** | **end for**
| **end for** | **end for**
@ -704,7 +706,7 @@ A sketch of the PMB model implementation in the PERI package appears in
| **for all** particles :math:`j` sharing an unbroken bond with particle :math:`i` **do** | **for all** particles :math:`j` sharing an unbroken bond with particle :math:`i` **do**
| :math:`r = \left\Vert {\textbf{y}_j - \textbf{y}_i} \right\Vert` | :math:`r = \left\Vert {\textbf{y}_j - \textbf{y}_i} \right\Vert`
| :math:`dr = r - \left\Vert {\textbf{x}_j - \textbf{x}_i} \right\Vert` | :math:`dr = r - \left\Vert {\textbf{x}_j - \textbf{x}_i} \right\Vert`
| :math:`k = \frac{c}{\left\Vert {\textbf{x}_i - \textbf{x}_j} \right\Vert} \nu(\textbf{x}_i - \textbf{x}_j) V_j dr` {:math:`c` *defined in :math:numref:`peric`*} | :math:`k = \frac{c}{\left\Vert {\textbf{x}_i - \textbf{x}_j} \right\Vert} \nu(\textbf{x}_i - \textbf{x}_j) V_j dr` {:math:`c` *defined in :ref:`(6) <peric>`*}
| :math:`\textbf{f} = \textbf{f} + k \frac{\textbf{y}_j-\textbf{y}_i}{\left\Vert {\textbf{y}_j-\textbf{y}_i} \right\Vert}` | :math:`\textbf{f} = \textbf{f} + k \frac{\textbf{y}_j-\textbf{y}_i}{\left\Vert {\textbf{y}_j-\textbf{y}_i} \right\Vert}`
| **if** :math:`(dr / \left\Vert {\textbf{x}_j - \textbf{x}_i} \right\Vert) > \min(s_0(i), s_0(j))` **then** | **if** :math:`(dr / \left\Vert {\textbf{x}_j - \textbf{x}_i} \right\Vert) > \min(s_0(i), s_0(j))` **then**
| Break :math:`i`'s bond with :math:`j` {:math:`j`\ *'s bond with* :math:`i` *will be broken when this loop iterates on* :math:`j`} | Break :math:`i`'s bond with :math:`j` {:math:`j`\ *'s bond with* :math:`i` *will be broken when this loop iterates on* :math:`j`}
@ -719,7 +721,7 @@ A sketch of the PMB model implementation in the PERI package appears in
Damage Damage
^^^^^^ ^^^^^^
The damage associated with every particle (see :math:numref:`peridamage`) can The damage associated with every particle (see :ref:`(10) <peridamageeq>`) can
optionally be computed and output with a LAMMPS data dump. To do this, optionally be computed and output with a LAMMPS data dump. To do this,
your input script must contain the command :doc:`compute damage/atom your input script must contain the command :doc:`compute damage/atom
<compute_damage_atom>` This enables a LAMMPS per-atom compute to <compute_damage_atom>` This enables a LAMMPS per-atom compute to
@ -900,9 +902,10 @@ three times the lattice constant.) The target is a cylinder of diameter
lattice contains 103,110 particles. Each particle :math:`i` has volume lattice contains 103,110 particles. Each particle :math:`i` has volume
fraction :math:`V_i = 1.25 \times 10^{-10} \textrm{m}^3`. fraction :math:`V_i = 1.25 \times 10^{-10} \textrm{m}^3`.
The spring constant in the PMB material model is (see :math:numref:`peric`) The spring constant in the PMB material model is (see :ref:`(6) <peric>`)
.. math:: .. math::
c = \frac{18k}{\pi \delta^4} = \frac{18 (14.9 \times 10^9)}{ \pi (1.5 \times 10^{-3})^4} \approx 1.6863 \times 10^{22}. c = \frac{18k}{\pi \delta^4} = \frac{18 (14.9 \times 10^9)}{ \pi (1.5 \times 10^{-3})^4} \approx 1.6863 \times 10^{22}.
The CFL analysis from :ref:`(Silling2005) <Silling2005>` shows that a The CFL analysis from :ref:`(Silling2005) <Silling2005>` shows that a
@ -947,7 +950,7 @@ the distance from the atom to the center of the indenter, and :math:`R`
is the radius of the projectile. The force is repulsive and :math:`F(r) = is the radius of the projectile. The force is repulsive and :math:`F(r) =
0` for :math:`r > R`. For our problem, the projectile radius :math:`R = 0` for :math:`r > R`. For our problem, the projectile radius :math:`R =
0.05` m, and we have chosen :math:`k_s = 1.0 \times 10^{17}` (compare 0.05` m, and we have chosen :math:`k_s = 1.0 \times 10^{17}` (compare
with :math:numref:`peric` above). with :ref:`(6) <peric>` above).
Writing the LAMMPS Input File Writing the LAMMPS Input File
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^