NLMech  0.1.0
material::pd::RNPBond Class Reference

A Class implementing regularized nonlinear peridynamic model. More...

#include <rnpBond.h>

Inheritance diagram for material::pd::RNPBond:
Inheritance graph
Collaboration diagram for material::pd::RNPBond:
Collaboration graph

Public Member Functions

std::pair< util::Point3, double > getBondEF (size_t i, size_t j)
 Returns energy and force state between node i and node j. More...
 
util::Point3 getBondForceDirection (const util::Point3 &dx, const util::Point3 &du) const
 Get direction of bond force. More...
 
double getInfFn (const double &r) const
 Returns the value of influence function. More...
 
double getS (const util::Point3 &dx, const util::Point3 &du)
 Returns the bond strain. More...
 
double getS (size_t i, size_t j)
 Returns the bond strain. More...
 
double getSc (const double &r)
 Returns critical bond strain. More...
 
double getSc (size_t i, size_t j)
 Returns critical bond strain. More...
 
 RNPBond (inp::MaterialDeck *deck, data::DataManager *dataManager)
 Constructor. More...
 
- Public Member Functions inherited from material::pd::BaseMaterial
 BaseMaterial (const size_t &dim, const double &horizon)
 Constructor. More...
 
double getDensity () const
 Returns the density of the material. More...
 
double getHorizon () const
 Returns horizon. More...
 
virtual util::Matrix33 getStrain (size_t i)
 Returns strain tensor. More...
 
virtual util::Matrix33 getStress (size_t i)
 Returns stress tensor. More...
 
bool isStateActive () const
 Returns true if state-based potential is active. More...
 
std::string name () const
 Returns name of the material. More...
 
virtual void print (int nt=0, int lvl=0) const
 Prints the information about the instance of the object. More...
 
virtual std::string printStr (int nt=0, int lvl=0) const
 Returns the string containing information about the instance of the object. More...
 
virtual void update ()
 Let the material class in the quasi-static case know that there is a new loading step.
 

Private Member Functions

void computeMaterialProperties (inp::MaterialDeck *deck, const double &M)
 Computes elastic and fracture properties from the rnp material parameters. More...
 
void computeParameters (inp::MaterialDeck *deck, const double &M)
 Computes rnp material parameters from elastic constants. More...
 

Private Attributes

material::pd::BaseInfluenceFnd_baseInfluenceFn_p
 Base object for influence function.
 
double d_contact_Kn = 0.
 Kn coefficient for normal contact force between broken bonds.
 
double d_contact_Rc = 0.
 Contact radius for normal contact force between broken bonds.
 
data::DataManagerd_dataManager_p
 Store pointer to datamanager.
 
const inp::MaterialDeckd_deck
 Pointer to the material deck.
 
double d_factorSc
 Factor to multiply to critical strain to check if bond is fractured. More...
 
double d_invFactor
 Inverse of factor = $ \epsilon |B_\epsilon(0)|$.
 
bool d_irrevBondBreak
 Flag which indicates if the breaking of bond is irreversible.
 
double d_rbar
 Inflection point of nonlinear function = $ 1/\sqrt{2\beta}$.
 
Material parameters
double d_C
 Parameter C.
 
double d_beta
 Parameter $ \beta $.
 

Detailed Description

A Class implementing regularized nonlinear peridynamic model.

Provides method to compute energy and force using nonlinear bond-based model introduced and studied in Lipton 2016, Jha and Lipton 2018, and Lipton and Jha 2019.

  1. The pairwise energy is

    \[ E_{bond} = \int_D \frac{1}{|B_\epsilon(x)|} \int_{B_\epsilon(x)} |y-x| W_{bond}(S(y,x; u)) dy dx \]

    where $ B_\epsilon(x) $ is a ball (circle in 2-d) centered at $ x$ of radius $ \epsilon$, $ |B_\epsilon(x)| $ is the volume (area in 2-d) of ball, $ S(y,x;u) = \frac{u(y) - u(x)}{|y-x|} \cdot \frac{y-x}{|y-x|} $ is the linearized bond strain (assuming small deformation).
  2. Bond energy density $ W_{bond} $ is given by

    \[ W_{bond} (S(y,x;u)) = J^\epsilon(|y-x|) \frac{1}{\epsilon |y-x|} \psi (|y-x| S(y,x;u)^2) \]

    where $ \psi(r) : \textsf{R}^+ \to \textsf{R} $ is positive, smooth, concave function with following properties

    \[ \lim_{r\to 0^+} \frac{\psi(r)}{r} = \psi'(0), \quad \lim_{r\to \infty} \psi(r) = \psi_\infty < \infty. \]

    $ J^\epsilon(|y-x|)$ is the influence function.
  3. Force at material point $ x $ is given by

    \[ f_{bond}(x) = \frac{4}{|B_\epsilon(x)|} \int_{B_\epsilon(x)} \frac{J^\epsilon(|y-x|)}{\epsilon} \psi'(|y-x| S(y,x;u)^2) S(y,x;u) \frac{y-x}{|y-x|} dy.\]

  4. In this class, we will assume

    \[ \psi(r) = C ( 1-\exp[-\beta r] \]

    where $ C, \beta $ are the peridynamic material parameter determined from the elastic and fracture properties of the material.

Constructor & Destructor Documentation

◆ RNPBond()

material::pd::RNPBond::RNPBond ( inp::MaterialDeck deck,
data::DataManager dataManager 
)

Constructor.

Parameters
deckPointer to the input deck
DataManagerPointer to the data manager object
Here is the call graph for this function:

Member Function Documentation

◆ computeMaterialProperties()

void material::pd::RNPBond::computeMaterialProperties ( inp::MaterialDeck deck,
const double &  M 
)
private

Computes elastic and fracture properties from the rnp material parameters.

This function does opposite of pd::Material::RNPBond::computeParameters. From peridynamic material properties, it uses the relation between lame parameters and peridynamic parameters to compute the lame parameters, and from lame parameters it computes the elastic constants.

Parameters
deckInput material deck
MMoment of influence function

Referenced by RNPBond().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ computeParameters()

void material::pd::RNPBond::computeParameters ( inp::MaterialDeck deck,
const double &  M 
)
private

Computes rnp material parameters from elastic constants.

Either Young's modulus E or bulk modulus K, and either critical energy release rate Gc or critical stress intensity factor KIc are needed. Assuming Poisson's ratio $ \nu = \frac{1}{4} $ we compute lame parameters $ \lambda, \mu $ where $ \mu = \lambda $ for bond-based.

With lame parameters, we use following formula, see Equation (5.7) & (5 .8) of Lipton 2016

  • if $ d=2 $

    \[ \lambda = \mu = \frac{\psi'(0)}{4} M_2, \qquad Gc = \frac{4 \psi_{\infty}}{\pi} M_2. \]

  • if $ d=3$

    \[ \lambda = \mu = \frac{\psi'(0)}{5} M_3, \qquad Gc = \frac{3 \psi_{\infty}}{2} M_3. \]

Where $M_2, M_3$ are defined by

\[ M_2 =\int_0^1 r^2 J(r) dr, \qquad M_3 = \int_0^1 r^3 J(r) dr. \]

For potential function $ \psi(r) = c ( 1-\exp[-\beta r])$, we have $ \psi'(0) = c\beta, \psi_{\infty} = c $. Thus, the values of $ c, \beta $ are given by

  • if $ d=2 $

    \[ c = \frac{\pi G_c}{4} \frac{1}{M_2}, \qquad \beta = \frac{4 \lambda}{c} \frac{1}{M_2} .\]

  • if $ d=3 $

    \[ c = \frac{2 G_c}{3} \frac{1}{M_3}, \qquad \beta = \frac{5 \lambda}{c} \frac{1}{M_3} .\]

    Parameters
    deckInput material deck
    MMoment of influence function

Referenced by RNPBond().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ getBondEF()

std::pair< util::Point3, double > material::pd::RNPBond::getBondEF ( size_t  i,
size_t  j 
)
virtual

Returns energy and force state between node i and node j.

Parameters
iId of node i
jnode of j
Returns
Value Pair of energy and force

Reimplemented from material::pd::BaseMaterial.

Here is the call graph for this function:

◆ getBondForceDirection()

util::Point3 material::pd::RNPBond::getBondForceDirection ( const util::Point3 dx,
const util::Point3 du 
) const
virtual

Get direction of bond force.

Parameters
dxRelative bond vector (reference configuration)
duRelative bond displacement vector
Returns
vector Unit vector along the bond force

Reimplemented from material::pd::BaseMaterial.

Here is the call graph for this function:

◆ getInfFn()

double material::pd::RNPBond::getInfFn ( const double &  r) const
virtual

Returns the value of influence function.

Parameters
rReference (initial) bond length
Returns
value Influence function at r

Reimplemented from material::pd::BaseMaterial.

◆ getS() [1/2]

double material::pd::RNPBond::getS ( const util::Point3 dx,
const util::Point3 du 
)
virtual

Returns the bond strain.

Parameters
dxReference bond vector
duDifference of displacement
Returns
strain Bond strain

Reimplemented from material::pd::BaseMaterial.

Here is the call graph for this function:

◆ getS() [2/2]

double material::pd::RNPBond::getS ( size_t  i,
size_t  j 
)
virtual

Returns the bond strain.

Parameters
iId of node 1
jId of node 2
Returns
strain Bond strain

Reimplemented from material::pd::BaseMaterial.

◆ getSc() [1/2]

double material::pd::RNPBond::getSc ( const double &  r)
virtual

Returns critical bond strain.

Parameters
rReference length of bond
Returns
strain Critical strain

Reimplemented from material::pd::BaseMaterial.

◆ getSc() [2/2]

double material::pd::RNPBond::getSc ( size_t  i,
size_t  j 
)
virtual

Returns critical bond strain.

Parameters
iId of node 1
jId of node 2
Returns
strain Critical strain

Reimplemented from material::pd::BaseMaterial.

Field Documentation

◆ d_factorSc

double material::pd::RNPBond::d_factorSc
private

Factor to multiply to critical strain to check if bond is fractured.

For nonlinear model, we consider bond is broken when it exceeds 10 times of critical strain. Typical value of factor is 10.

Referenced by RNPBond().


The documentation for this class was generated from the following files: