21 if (!(volj > 0.) || !(Rc > 0.) || !(h > 0.) || !(Rji > 0.))
24 const double check_up = Rc + 0.5 * h;
25 const double check_low = Rc - 0.5 * h;
27 volj *= (check_up - Rji) / h;
35 const auto yji = p.
yj - p.
yi;
36 const auto Rji = yji.
length();
40 const auto vji = p.
vj - p.
vi;
42 auto vn_mag = vji * en;
43 auto et = vji - vn_mag * en;
60 const auto yji = p.
yj - p.
yi;
61 const auto Rji = yji.
length();
69 const auto vji = p.
vj - p.
vi;
71 auto vn_mag = vji * en;
79 return (beta_n * vn_mag / p.
voli) * en;
83 return springForce(p) + nodeDampingForce(p);
89 std::lock_guard<std::mutex> lock(d_mutex);
90 for (
auto it = d_hist.begin(); it != d_hist.end();) {
91 if (it->second.stamp != d_stamp)
92 it = d_hist.erase(it);
99 const auto yji = p.
yj - p.
yi;
100 const auto Rji = yji.
length();
113 const double fn_mag = -scalar_f;
114 if (!(fn_mag > 0.) || !(p.
dt > 0.))
117 const auto vji = p.
vj - p.
vi;
118 auto vt = vji - (vji * en) * en;
122 std::lock_guard<std::mutex> lock(d_mutex);
123 auto &hist = d_hist[key(p.
i, p.
j)];
124 hist.stamp = d_stamp;
125 hist.delta_t += vt * p.
dt;
127 hist.delta_t -= (hist.delta_t * en) * en;
131 const double kt_vol = Kt * p.
volj;
132 ft_trial = hist.delta_t * (-kt_vol);
133 const double ft_mag = ft_trial.length();
134 const double ft_max = p.
deck.
d_mu * fn_mag;
137 ft_trial *= (ft_max / ft_mag);
139 hist.delta_t = ft_trial * (-1.0 / kt_vol);
bool isGreater(const double &a, const double &b)
Returns true if a > b.
double equivalentMass(const double &m1, const double &m2)
Compute harmonic mean of m1 and m2.
bool isLess(const double &a, const double &b)
Returns true if a < b.
A structure to represent 3d vectors.
double length() const
Computes the Euclidean length of the vector.