22#ifndef PECLET_CORE_DOMAIN_HPP
23#define PECLET_CORE_DOMAIN_HPP
39 static constexpr int dim() {
return Dim; }
44 for (
int a = 0; a <
Dim; ++a)
51 for (
int a = 0; a <
Dim; ++a)
58 for (
int a = 0; a <
Dim; ++a)
65 for (
int a = 0; a <
Dim; ++a) {
75 for (
int a = 0; a <
Dim; ++a) {
91 for (
int a = 0; a <
Dim; ++a) {
106template <
int Dim = 3>
117 for (
int a = 0; a <
Dim; ++a) {
119 b.length[a] =
static_cast<Real>(c[a]);
126 static constexpr int dim() {
return Dim; }
136 for (
int a = 0; a <
Dim; ++a)
145 for (
int a = 1; a <
Dim; ++a)
146 m = (h[a] <
m) ? h[a] :
m;
153 for (
int a = 1; a <
Dim; ++a) {
154 const Real d = std::fabs(h[a] - h[0]);
155 const Real s = std::fabs(h[0]) > 0.0 ? std::fabs(h[0]) : 1.0;
164 for (
int a = 0; a <
Dim; ++a)
172 for (
int a = 0; a <
Dim; ++a)
181 for (
int a = 0; a <
Dim; ++a)
182 p[a] =
box.origin[a] + (
static_cast<Real>(idx[a]) + 0.5) * h[a];
191 for (
int a = 0; a <
Dim; ++a) {
192 const Real off = (a == axis) ? 0.0 : 0.5;
193 p[a] =
box.origin[a] + (
static_cast<Real>(idx[a]) + off) * h[a];
202 for (
int a = 0; a <
Dim; ++a)
203 p[a] =
box.origin[a] +
static_cast<Real>(idx[a]) * h[a];
212 for (
int a = 0; a <
Dim; ++a)
213 xi[a] = (h[a] > 0.0) ? (p[a] -
box.origin[a]) / h[a] : 0.0;
221 for (
int a = 0; a <
Dim; ++a)
222 p[a] =
box.origin[a] +
xi[a] * h[a];
230 for (
int a = 0; a <
Dim; ++a)
231 idx[a] =
static_cast<Index>(std::floor(
xi[a]));
Kokkos::View< T *, MemSpace > View
1D device array.
double Real
Default host floating type. Device kernels may use float; conversions happen at the boundary.
std::int64_t Index
Signed index type for grids and particles (supersedes block_decomposer's long int IndxT).
A physical, axis-aligned box with per-axis periodicity. Continuous — no cells.
Vec< Dim > minImage(const Vec< Dim > &a_, const Vec< Dim > &b) const
Minimum-image separation b - a, shortened across the periodic axes.
Vec< Dim > upper() const
Upper corner: origin + length.
Vec< Dim > wrap(const Vec< Dim > &p) const
Fold a point into the box along the periodic axes; non-periodic axes are left untouched.
static constexpr int dim()
Vec< Dim > origin
lower corner
std::array< bool, Dim > periodic
per-axis periodicity
Vec< Dim > centre() const
bool contains(const Vec< Dim > &p) const
Is the point inside [origin, origin+length) on every axis?
Vec< Dim > length
extent per axis (> 0)