19 const double Rji = yji.
length();
20 if (!(Rji > 0.) || !(natural_R > 0.))
23 double gap = Rji - natural_R;
29 const double gap_cap = -0.25 * natural_R;
34 const double scalar_f = Kn * volj * gap / Rji;
35 return scalar_f * yji;
45 return cappedRepulsive(yji, volj, Kn, Rc);
55 const double Rji = yji.
length();
56 if (!(Rji > 0.) || !(Rc > 0.) || !(Rji < Rc))
58 const double natural = (r0 > 0.) ? r0 : Rc;
59 return cappedRepulsive(yji, volj, Kn, natural);
69 if (name ==
"broken_bond_kn")
70 return std::make_unique<BrokenBondKnSelfContact>();
71 if (name ==
"reference_gap")
72 return std::make_unique<ReferenceGapSelfContact>();
74 return std::make_unique<NoneSelfContact>();
76 throw std::runtime_error(
77 "Unknown Model.Self_Contact '" + name +
78 "'. Supported: broken_bond_kn, reference_gap, none.");
std::unique_ptr< SelfContact > makeSelfContact(const std::string &name)
Build self-contact law named by Model.Self_Contact.
A structure to represent 3d vectors.
double length() const
Computes the Euclidean length of the vector.