peclet-dem 1.1.0
Performance-portable XPBD Discrete Element Method (Kokkos + ArborX)
Loading...
Searching...
No Matches
peclet::dem::MlCoarseSweep Struct Reference

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
 

Detailed Description

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.

Member Function Documentation

◆ row()

◆ solveOne()

◆ restrictAngular()

template<class VV >
void peclet::dem::MlCoarseSweep::restrictAngular ( int  i,
int  off,
int  g,
float  m,
const VV &  velPred 
) const
inline

◆ normalizeAngular()

void peclet::dem::MlCoarseSweep::normalizeAngular ( int  gi) const
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.

◆ prolongRigid()

template<class VV , class VV0 >
void peclet::dem::MlCoarseSweep::prolongRigid ( int  i,
int  off,
int  g,
const VV &  velPred,
const VV0 &  velG0 
) const
inline

Member Data Documentation

◆ manifolds

Kokkos::View<const ManifoldC*, CpMem> peclet::dem::MlCoarseSweep::manifolds

Definition at line 660 of file solver_multilevel.hpp.

Referenced by row().

◆ realIdx

Kokkos::View<const int*, CpMem> peclet::dem::MlCoarseSweep::realIdx

Definition at line 661 of file solver_multilevel.hpp.

Referenced by row().

◆ grp

Kokkos::View<const int*, CpMem> peclet::dem::MlCoarseSweep::grp

Definition at line 662 of file solver_multilevel.hpp.

Referenced by row().

◆ velG

Kokkos::View<float* [3], CpMem> peclet::dem::MlCoarseSweep::velG

Definition at line 663 of file solver_multilevel.hpp.

Referenced by prolongRigid(), row(), and solveOne().

◆ invMassG

Kokkos::View<const float*, CpMem> peclet::dem::MlCoarseSweep::invMassG

Definition at line 664 of file solver_multilevel.hpp.

Referenced by row().

◆ lambdaAcc

Kokkos::View<float*, CpMem> peclet::dem::MlCoarseSweep::lambdaAcc

Definition at line 665 of file solver_multilevel.hpp.

Referenced by solveOne().

◆ maxApproach

Kokkos::View<float, CpMem> peclet::dem::MlCoarseSweep::maxApproach

Definition at line 666 of file solver_multilevel.hpp.

Referenced by solveOne().

◆ restRel

Kokkos::View<const float*, CpMem> peclet::dem::MlCoarseSweep::restRel

Definition at line 667 of file solver_multilevel.hpp.

Referenced by row().

◆ body

MlBodyViews peclet::dem::MlCoarseSweep::body

Definition at line 669 of file solver_multilevel.hpp.

Referenced by prolongRigid(), restrictAngular(), and row().

◆ originG

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().

◆ comOffG

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().

◆ angG

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().

◆ angG0

Kokkos::View<float* [3], CpMem> peclet::dem::MlCoarseSweep::angG0

Definition at line 673 of file solver_multilevel.hpp.

Referenced by normalizeAngular(), and prolongRigid().

◆ invIG

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().


The documentation for this struct was generated from the following file: