19#ifndef PECLET_VORO_PHYSICS_EULER_PRESSURE_HPP
20#define PECLET_VORO_PHYSICS_EULER_PRESSURE_HPP
22#include <Kokkos_Core.hpp>
24#include "peclet/core/common/view.hpp"
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;
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;
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);
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);
63 force(3 * i + 0) = fx;
64 force(3 * i + 1) = fy;
65 force(3 * i + 2) = fz;
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).