#include <plane_policy.hpp>
|
| template<class Real > |
| static KOKKOS_INLINE_FUNCTION Real | offsetFromRel (const Real r[3], Real wSelf, Real wNbr) |
| |
| template<class Real > |
| static KOKKOS_INLINE_FUNCTION Real | blockReachSq (Real rSqMax, Real wSelf, Real wMaxAll) |
| |
| template<class Real > |
| static KOKKOS_INLINE_FUNCTION void | planeFromNeighbour (const Real pSelf[3], const Real pNbr[3], Real wSelf, Real wNbr, Real L, Real pdir[3], Real &off) |
| |
| template<class Real > |
| static KOKKOS_INLINE_FUNCTION void | buildNormal (const Real pSelf[3], const Real pNbr[3], Real wSelf, Real wNbr, Real L, Real nOut[3]) |
| | Foot-point normal n = (off/|pdir|²) pdir = α r.
|
| |
| template<class Real > |
| static KOKKOS_INLINE_FUNCTION void | chain (const Real g[3], const Real r[3], Real rho, Real c, Real fSelf[3], Real fNbr[3], Real &fwSelf, Real &fwNbr) |
| |
Power / Laguerre plane policy: the radical plane between weighted seeds. With r = p_j − p_i, ρ = |r|², c = w_i − w_j, α = (ρ+c)/(2ρ), the foot-point normal is n = α r and the half-space offset is d = ½(ρ+c). Unlike the bisector, d can be negative (the seed can lie OUTSIDE its own cell) — the generic ConvexCell::clip already tolerates that. Both positions and weights are DOFs.
◆ blockReachSq()
template<class Real >
| static KOKKOS_INLINE_FUNCTION Real peclet::voro::Power::blockReachSq |
( |
Real |
rSqMax, |
|
|
Real |
wSelf, |
|
|
Real |
wMaxAll |
|
) |
| |
|
inlinestatic |
Squared reachability radius for the sorted-worklist early-out (weight-aware). A radical plane to a neighbour with weight w_nbr ≤ W_max cuts iff some vertex v has r·v > d = ½(|r|²+w_self− w_nbr) ≥ ½(|r|²+w_self−W_max). With |r|·√rSqMax ≥ r·v the worst (heaviest) neighbour can cut only while |r| < √rSqMax + √(rSqMax + max(0, W_max−w_self)); beyond that block, break. Reduces to 4·rSqMax when weights are equal (W_max = w_self), matching the Voronoi bound.
◆ buildNormal()
template<class Real >
| static KOKKOS_INLINE_FUNCTION void peclet::voro::Power::buildNormal |
( |
const Real |
pSelf[3], |
|
|
const Real |
pNbr[3], |
|
|
Real |
wSelf, |
|
|
Real |
wNbr, |
|
|
Real |
L, |
|
|
Real |
nOut[3] |
|
) |
| |
|
inlinestatic |
Foot-point normal n = (off/|pdir|²) pdir = α r.
◆ chain()
template<class Real >
| static KOKKOS_INLINE_FUNCTION void peclet::voro::Power::chain |
( |
const Real |
g[3], |
|
|
const Real |
r[3], |
|
|
Real |
rho, |
|
|
Real |
c, |
|
|
Real |
fSelf[3], |
|
|
Real |
fNbr[3], |
|
|
Real & |
fwSelf, |
|
|
Real & |
fwNbr |
|
) |
| |
|
inlinestatic |
Chain g = dGeom/dn_k to the seed DOFs. n = α r, α = ½ + c/(2ρ), c = w_self − w_nbr. Position: J = ∂n/∂r = α I − (c/ρ²) r rᵀ, ∂r/∂p_nbr = +I ⇒ dGeom/dp_nbr = α g − (c/ρ²)(r·g) r , dGeom/dp_self = −(that). Weight: ∂n/∂w_self = r/(2ρ), ∂n/∂w_nbr = −r/(2ρ) ⇒ dGeom/dw_self = (g·r)/(2ρ) , dGeom/dw_nbr = −(that). c = 0 recovers the Voronoi split (∓½ g, zero weight force).
◆ offsetFromRel()
template<class Real >
| static KOKKOS_INLINE_FUNCTION Real peclet::voro::Power::offsetFromRel |
( |
const Real |
r[3], |
|
|
Real |
wSelf, |
|
|
Real |
wNbr |
|
) |
| |
|
inlinestatic |
Half-space offset for the forward clip {x : r·x ≤ off} given the min-image relative vector r = p_j − p_i (pdir == r). Power: off = d = ½(|r|² + w_self − w_nbr), which can be negative.
◆ planeFromNeighbour()
template<class Real >
| static KOKKOS_INLINE_FUNCTION void peclet::voro::Power::planeFromNeighbour |
( |
const Real |
pSelf[3], |
|
|
const Real |
pNbr[3], |
|
|
Real |
wSelf, |
|
|
Real |
wNbr, |
|
|
Real |
L, |
|
|
Real |
pdir[3], |
|
|
Real & |
off |
|
) |
| |
|
inlinestatic |
FORWARD clip: pdir = r (min-image), off = d = ½(|r|² + w_self − w_nbr). ConvexCell::clip then stores n = (off/|pdir|²) pdir = α r.
◆ kHasWeightDof
| constexpr bool peclet::voro::Power::kHasWeightDof = true |
|
staticconstexpr |
The documentation for this struct was generated from the following file: