peclet-dem
Performance-portable XPBD Discrete Element Method (Kokkos + ArborX)
Loading...
Searching...
No Matches
solver_position.hpp File Reference

dem — portable (Kokkos) XPBD position solve (pure overlap removal). More...

#include <Kokkos_Core.hpp>
#include "contact_preprocessing.hpp"
#include "dem_portable.hpp"

Go to the source code of this file.

Namespaces

namespace  peclet
 
namespace  peclet::dem
 
namespace  peclet::dem::detail
 

Functions

float peclet::dem::detail::computeW (F3 r, F3 dir, float invM, F3 invI)
 
F4 peclet::dem::detail::deltaQuat (F3 dTheta, F4 q)
 
void peclet::dem::solvePositionKokkos (Kokkos::View< const ContactC *, CpMem > contacts, int numContacts, Kokkos::View< const float *, CpMem > invMass, Kokkos::View< const float *[3], CpMem > posPred, Kokkos::View< const float *[4], CpMem > quatPred, Kokkos::View< const float *[4], CpMem > quatStatic, Kokkos::View< const float *[3], CpMem > invInertia, Kokkos::View< float *[3], CpMem > deltaPos, Kokkos::View< float *[4], CpMem > deltaQuat, Kokkos::View< int *, CpMem > constraintCounts, Kokkos::View< float, CpMem > maxOverlap)
 Accumulate XPBD position corrections for numContacts contacts.
 

Detailed Description

dem — portable (Kokkos) XPBD position solve (pure overlap removal).

Kokkos port of solve_position_jacobi_kernel (solver_position.cu): one thread per contact evaluates the linearized non-penetration constraint C(x) (using the delta-rotated lever arms / normal), computes the XPBD position correction, and atomically scatters delta_pos / delta_quat and bumps the per-body constraint count (the caller averages by it). Faithful copy of the CUDA math over the SoA Views. Friction is a separate cluster (ported separately); the position solve does overlap only.

Definition in file solver_position.hpp.