|
peclet-dem 1.1.0
Performance-portable XPBD Discrete Element Method (Kokkos + ArborX)
|
The per-manifold coarse-PGS body (e = 0, shared fine accumulator) lives in MlCoarseSweep so the per-colour launch loop and the fused whole-cycle kernel share it verbatim. More...
#include <solver_multilevel.hpp>
Classes | |
| struct | Row |
| One coarse row, evaluated up to its effective mass (the part solveOne shares with the oracle test's singleton check). More... | |
Public Member Functions | |
| bool | row (int idx, int off, Row &r) const |
| void | solveOne (int idx, int off) const |
| template<class VV > | |
| void | restrictAngular (int i, int off, int g, float m, const VV &velPred) const |
| L_g += mu_q (d_q x v_q) + J_q w_q (3 float atomics per member). | |
| void | normalizeAngular (int gi) const |
| Omega_g = invI_g L_g, snapshot Omega0_g. | |
| template<class VV , class VV0 > | |
| void | prolongRigid (int i, int off, int g, const VV &velPred, const VV0 &velG0) const |
| v_q += (V_g - V0_g) + (Omega_g - Omega0_g) x d_q; w_q += Omega_g - Omega0_g. | |
Public Attributes | |
| Kokkos::View< const ManifoldC *, CpMem > | manifolds |
| Kokkos::View< const int *, CpMem > | realIdx |
| Kokkos::View< const int *, CpMem > | grp |
| Kokkos::View< float *[3], CpMem > | velG |
| Kokkos::View< const float *, CpMem > | invMassG |
| Kokkos::View< float *, CpMem > | lambdaAcc |
| Kokkos::View< float, CpMem > | maxApproach |
| Kokkos::View< const float *, CpMem > | restRel |
| MlBodyViews | body |
| Kokkos::View< const float *[3], CpMem > | originG |
| Kokkos::View< const float *[3], CpMem > | comOffG |
| Kokkos::View< float *[3], CpMem > | angG |
| Kokkos::View< float *[3], CpMem > | angG0 |
| Kokkos::View< const float *[6], CpMem > | invIG |
The per-manifold coarse-PGS body (e = 0, shared fine accumulator) lives in MlCoarseSweep so the per-colour launch loop and the fused whole-cycle kernel share it verbatim.
grp aliases the composed body -> group map of the CURRENT level (written by the compose phase between sweeps); off is the level's group-pool offset. The coarse bodies are rigid 6-DOF aggregates (docs/contact_physics_followups.md §2.2-§2.4): (V_g, Omega_g), the M-orthogonal projection of the fine state onto rigid motions; a crossing row's angular arms are T_A = TauA + d_A x N, T_B = TauB - d_B x N (the fine manifold's own impulse, applied at its contact points: dL = 0 exactly), and the prolongation is the rigid motion dV + dOmega x d, dOmega. Translation-only is the limit invI_g -> 0.
Definition at line 659 of file solver_multilevel.hpp.
|
inline |
Definition at line 683 of file solver_multilevel.hpp.
References peclet::dem::add3(), angG, body, peclet::dem::ManifoldC::bodyA, peclet::dem::ManifoldC::bodyB, comOffG, peclet::dem::cross3v(), peclet::dem::dot3(), grp, invIG, invMassG, manifolds, peclet::dem::mldetail::memberOffset(), peclet::dem::ManifoldC::normal_sum, peclet::dem::ManifoldC::num_points, originG, peclet::dem::MlBodyViews::posPred, peclet::dem::ManifoldC::rA_sum, peclet::dem::ManifoldC::rB_sum, realIdx, restRel, peclet::dem::scale3(), peclet::dem::sub3(), peclet::dem::mldetail::symMul(), peclet::dem::ManifoldC::torque_armA_sum, peclet::dem::ManifoldC::torque_armB_sum, velG, peclet::dem::ManifoldC::wallVel_sum, peclet::dem::F4::x, peclet::dem::F4::y, and peclet::dem::F4::z.
Referenced by solveOne().
|
inline |
Definition at line 739 of file solver_multilevel.hpp.
References angG, peclet::dem::MlCoarseSweep::Row::gA, peclet::dem::MlCoarseSweep::Row::gB, invIG, peclet::dem::MlCoarseSweep::Row::invMA, peclet::dem::MlCoarseSweep::Row::invMB, lambdaAcc, peclet::dem::MlCoarseSweep::Row::lenN, maxApproach, peclet::dem::MlCoarseSweep::Row::Nsum, row(), peclet::dem::scale3(), peclet::dem::MlCoarseSweep::Row::sgn, peclet::dem::mldetail::symMul(), peclet::dem::MlCoarseSweep::Row::TA, peclet::dem::MlCoarseSweep::Row::TB, velG, peclet::dem::MlCoarseSweep::Row::vn, peclet::dem::MlCoarseSweep::Row::w, peclet::dem::F3::x, peclet::dem::F3::y, and peclet::dem::F3::z.
|
inline |
L_g += mu_q (d_q x v_q) + J_q w_q (3 float atomics per member).
Definition at line 782 of file solver_multilevel.hpp.
References peclet::dem::add3(), angG, peclet::dem::MlBodyViews::angVelPred, body, comOffG, peclet::dem::cross3v(), peclet::dem::MlBodyViews::invIc, peclet::dem::mldetail::memberOffset(), originG, peclet::dem::MlBodyViews::posPred, peclet::dem::MlBodyViews::quat, peclet::dem::scale3(), peclet::dem::mldetail::spinInertiaTimes(), peclet::dem::F3::x, peclet::dem::F3::y, and peclet::dem::F3::z.
|
inline |
Omega_g = invI_g L_g, snapshot Omega0_g.
Definition at line 794 of file solver_multilevel.hpp.
References angG, angG0, invIG, peclet::dem::mldetail::symMul(), peclet::dem::F3::x, peclet::dem::F3::y, and peclet::dem::F3::z.
|
inline |
v_q += (V_g - V0_g) + (Omega_g - Omega0_g) x d_q; w_q += Omega_g - Omega0_g.
Definition at line 803 of file solver_multilevel.hpp.
References angG, angG0, peclet::dem::MlBodyViews::angVelPred, body, comOffG, peclet::dem::cross3v(), peclet::dem::mldetail::memberOffset(), originG, peclet::dem::MlBodyViews::posPred, velG, peclet::dem::F3::x, peclet::dem::F3::y, and peclet::dem::F3::z.
Definition at line 660 of file solver_multilevel.hpp.
Referenced by row().
| Kokkos::View<const int*, CpMem> peclet::dem::MlCoarseSweep::realIdx |
Definition at line 661 of file solver_multilevel.hpp.
Referenced by row().
| Kokkos::View<const int*, CpMem> peclet::dem::MlCoarseSweep::grp |
Definition at line 662 of file solver_multilevel.hpp.
Referenced by row().
| Kokkos::View<float* [3], CpMem> peclet::dem::MlCoarseSweep::velG |
Definition at line 663 of file solver_multilevel.hpp.
Referenced by prolongRigid(), row(), and solveOne().
| Kokkos::View<const float*, CpMem> peclet::dem::MlCoarseSweep::invMassG |
Definition at line 664 of file solver_multilevel.hpp.
Referenced by row().
| Kokkos::View<float*, CpMem> peclet::dem::MlCoarseSweep::lambdaAcc |
Definition at line 665 of file solver_multilevel.hpp.
Referenced by solveOne().
| Kokkos::View<float, CpMem> peclet::dem::MlCoarseSweep::maxApproach |
Definition at line 666 of file solver_multilevel.hpp.
Referenced by solveOne().
| Kokkos::View<const float*, CpMem> peclet::dem::MlCoarseSweep::restRel |
Definition at line 667 of file solver_multilevel.hpp.
Referenced by row().
| MlBodyViews peclet::dem::MlCoarseSweep::body |
Definition at line 669 of file solver_multilevel.hpp.
Referenced by prolongRigid(), restrictAngular(), and row().
| Kokkos::View<const float* [3], CpMem> peclet::dem::MlCoarseSweep::originG |
Definition at line 670 of file solver_multilevel.hpp.
Referenced by prolongRigid(), restrictAngular(), and row().
| Kokkos::View<const float* [3], CpMem> peclet::dem::MlCoarseSweep::comOffG |
Definition at line 671 of file solver_multilevel.hpp.
Referenced by prolongRigid(), restrictAngular(), and row().
| Kokkos::View<float* [3], CpMem> peclet::dem::MlCoarseSweep::angG |
Definition at line 672 of file solver_multilevel.hpp.
Referenced by normalizeAngular(), prolongRigid(), restrictAngular(), row(), and solveOne().
| Kokkos::View<float* [3], CpMem> peclet::dem::MlCoarseSweep::angG0 |
Definition at line 673 of file solver_multilevel.hpp.
Referenced by normalizeAngular(), and prolongRigid().
| Kokkos::View<const float* [6], CpMem> peclet::dem::MlCoarseSweep::invIG |
Definition at line 674 of file solver_multilevel.hpp.
Referenced by normalizeAngular(), row(), and solveOne().