PeriDEM 0.3.0
PeriDEM -- Peridynamics-based high-fidelity model for granular media
Loading...
Searching...
No Matches
contact::PairForce Class Reference

#include <pairForce.h>

Inheritance diagram for contact::PairForce:
Collaboration diagram for contact::PairForce:

Public Member Functions

virtual ~PairForce ()=default
 
virtual void beginStep ()
 
virtual void endStep ()
 
virtual util::Point springForce (const Pair &p)
 
virtual util::Point nodeDampingForce (const Pair &p)
 
virtual util::Point force (const Pair &p)
 

Detailed Description

Node-node contact law (same role as material::Material for PD bonds).

Spring force density uses neighbor volume Vj (optionally partial-volume corrected by assembly). Default friction is coulomb_simple (mu * |Fn| along tangential velocity).

Definition at line 57 of file pairForce.h.

Constructor & Destructor Documentation

◆ ~PairForce()

virtual contact::PairForce::~PairForce ( )
virtualdefault

Member Function Documentation

◆ beginStep()

virtual void contact::PairForce::beginStep ( )
inlinevirtual

Reimplemented in contact::StickSlipPairForce.

Definition at line 61 of file pairForce.h.

61{}

◆ endStep()

virtual void contact::PairForce::endStep ( )
inlinevirtual

Reimplemented in contact::StickSlipPairForce.

Definition at line 62 of file pairForce.h.

62{}

◆ force()

util::Point contact::PairForce::force ( const Pair p)
virtual

Default: spring + node damping (used by tests / simple callers).

Definition at line 82 of file pairForce.cpp.

82 {
83 return springForce(p) + nodeDampingForce(p);
84}
virtual util::Point springForce(const Pair &p)
Definition pairForce.cpp:34
virtual util::Point nodeDampingForce(const Pair &p)
Definition pairForce.cpp:59

◆ nodeDampingForce()

util::Point contact::PairForce::nodeDampingForce ( const Pair p)
virtual

Node-level normal damping (density form).

Definition at line 59 of file pairForce.cpp.

59 {
60 const auto yji = p.yj - p.yi;
61 const auto Rji = yji.length();
62 if (!(Rji > 0.) || !util::isLess(Rji, p.deck.d_contactR))
63 return {};
64
65 if (!p.deck.d_dampingOn || !(p.voli > 0.) || !(p.deck.d_K > 0.) ||
66 !(p.deck.d_contactR > 0.))
67 return {};
68
69 const auto vji = p.vj - p.vi;
70 auto en = yji / Rji;
71 auto vn_mag = vji * en;
72 if (!util::isLess(vn_mag, 0.))
73 return {};
74
75 const double meq =
76 util::equivalentMass(p.rhoi * p.voli, p.rhoj * p.volj);
77 const double beta_n =
78 p.deck.d_betan * std::sqrt(p.deck.d_K * p.deck.d_contactR * meq);
79 return (beta_n * vn_mag / p.voli) * en;
80}
double equivalentMass(const double &m1, const double &m2)
Compute harmonic mean of m1 and m2.
Definition function.cpp:127
bool isLess(const double &a, const double &b)
Returns true if a < b.
Definition function.cpp:20

References inp::ContactPairDeck::d_betan, inp::ContactPairDeck::d_contactR, inp::ContactPairDeck::d_dampingOn, inp::ContactPairDeck::d_K, contact::Pair::deck, util::equivalentMass(), util::isLess(), util::Point::length(), contact::Pair::rhoi, contact::Pair::rhoj, contact::Pair::vi, contact::Pair::vj, contact::Pair::voli, contact::Pair::volj, contact::Pair::yi, and contact::Pair::yj.

Here is the call graph for this function:

◆ springForce()

util::Point contact::PairForce::springForce ( const Pair p)
virtual

Spring + friction contribution (force density ∝ volj).

Reimplemented in contact::StickSlipPairForce.

Definition at line 34 of file pairForce.cpp.

34 {
35 const auto yji = p.yj - p.yi;
36 const auto Rji = yji.length();
37 if (!(Rji > 0.) || !util::isLess(Rji, p.deck.d_contactR))
38 return {};
39
40 const auto vji = p.vj - p.vi;
41 auto en = yji / Rji;
42 auto vn_mag = vji * en;
43 auto et = vji - vn_mag * en;
44 if (util::isGreater(et.length(), 0.))
45 et = et / et.length();
46 else
47 et = util::Point();
48
49 auto scalar_f = p.deck.d_Kn * (Rji - p.deck.d_contactR) * p.volj;
50 if (scalar_f > 0.)
51 scalar_f = 0.;
52
53 util::Point f = scalar_f * en;
54 if (p.deck.d_frictionOn)
55 f += p.deck.d_mu * scalar_f * et;
56 return f;
57}
bool isGreater(const double &a, const double &b)
Returns true if a > b.
Definition function.cpp:15
A structure to represent 3d vectors.
Definition point.h:30

References inp::ContactPairDeck::d_contactR, inp::ContactPairDeck::d_frictionOn, inp::ContactPairDeck::d_Kn, inp::ContactPairDeck::d_mu, contact::Pair::deck, util::isGreater(), util::isLess(), util::Point::length(), contact::Pair::vi, contact::Pair::vj, contact::Pair::volj, contact::Pair::yi, and contact::Pair::yj.

Here is the call graph for this function:

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