|
peclet.voro 1.0.0
Device-native moving-particle Voronoi dynamics
|
Reference physics consumer: compressible-Euler pressure force (Phase 4). More...
#include <Kokkos_Core.hpp>#include "peclet/core/common/view.hpp"#include "peclet/voro/tessellation_view.hpp"

Go to the source code of this file.
Namespaces | |
| namespace | peclet |
| namespace | peclet::voro |
| namespace | peclet::voro::physics |
Functions | |
| template<class Real > | |
| void | peclet::voro::physics::eulerPressureForce (const TessellationView< Real > &view, const Kokkos::View< int *, peclet::core::MemSpace > &recip, const Kokkos::View< int *, peclet::core::MemSpace > &cellOfFacet, Real pressEq, Real volAvg, const Kokkos::View< Real *, peclet::core::MemSpace > &force) |
Reference physics consumer: compressible-Euler pressure force (Phase 4).
The first physics module written against the published TessellationView ONLY — it never touches the half-edge internals (it includes tessellation_view.hpp, not the tessellator internals), which is what proves the engine/physics decoupling (plan §1, §4).
Isothermal EOS: press_i = pressEq · volAvg / vol_i. The legacy force scatters F[nbr] += press_i · dV_i[f]; F[self] -= press_i · dV_i[f] with atomics. The atomic-free GATHER form computed here (plan §2.5) makes each cell assemble its OWN force from its facets and the reciprocal-facet transpose, so every work item writes only F_i — zero atomics: F_i = Σ_{f in i, f->j} [ press_j · dV[recip(f)] − press_i · dV[f] ]. This is algebraically identical to the legacy scatter (each shared facet's two half-contributions are gathered by the two cells independently).