peclet.voro 1.0.0
Device-native moving-particle Voronoi dynamics
Loading...
Searching...
No Matches
euler_pressure.hpp
Go to the documentation of this file.
1
19#ifndef PECLET_VORO_PHYSICS_EULER_PRESSURE_HPP
20#define PECLET_VORO_PHYSICS_EULER_PRESSURE_HPP
21
22#include <Kokkos_Core.hpp>
23
24#include "peclet/core/common/view.hpp"
26
27namespace peclet::voro {
28namespace physics {
29
39template <class Real>
41 const Kokkos::View<int*, peclet::core::MemSpace>& recip,
42 const Kokkos::View<int*, peclet::core::MemSpace>& cellOfFacet, Real pressEq,
43 Real volAvg, const Kokkos::View<Real*, peclet::core::MemSpace>& force) {
44 using Exec = peclet::core::ExecSpace;
45 const int N = view.numCells();
46 Kokkos::parallel_for(
47 "euler.pressure", Kokkos::RangePolicy<Exec>(0, N), KOKKOS_LAMBDA(const int i) {
48 const Real pressI = pressEq * volAvg / view.volume(i);
49 Real fx = 0, fy = 0, fz = 0;
50 for (int f = view.facetBegin(i); f < view.facetEnd(i); ++f) {
51 // self half-contribution (always present, including boundary facets)
52 fx -= pressI * view.connect(f, 0);
53 fy -= pressI * view.connect(f, 1);
54 fz -= pressI * view.connect(f, 2);
55 const int g = recip(f);
56 if (g < 0)
57 continue; // boundary / no reciprocal
58 const Real pressJ = pressEq * volAvg / view.volume(cellOfFacet(g));
59 fx += pressJ * view.connect(g, 0);
60 fy += pressJ * view.connect(g, 1);
61 fz += pressJ * view.connect(g, 2);
62 }
63 force(3 * i + 0) = fx;
64 force(3 * i + 1) = fy;
65 force(3 * i + 2) = fz;
66 });
67}
68
69} // namespace physics
70} // namespace peclet::voro
71
72#endif // PECLET_VORO_PHYSICS_EULER_PRESSURE_HPP
void 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)
Definition euler_pressure.hpp:40
Definition convex_cell.hpp:40
Definition tessellation_view.hpp:111
KOKKOS_INLINE_FUNCTION int facetEnd(int i) const
Definition tessellation_view.hpp:140
KOKKOS_INLINE_FUNCTION int facetBegin(int i) const
Definition tessellation_view.hpp:139
KOKKOS_INLINE_FUNCTION Real volume(int i) const
Definition tessellation_view.hpp:138
KOKKOS_INLINE_FUNCTION int numCells() const
Definition tessellation_view.hpp:131
KOKKOS_INLINE_FUNCTION Real connect(int f, int c) const
Definition tessellation_view.hpp:145
Published, read-only device data layer for the tessellation (migration §2.1, §3).