10#ifndef PECLET_FLOW_MAC_BC_HPP
11#define PECLET_FLOW_MAC_BC_HPP
13#include <Kokkos_Core.hpp>
17using BExec = Kokkos::DefaultExecutionSpace;
18using BMem = BExec::memory_space;
19using BField = Kokkos::View<double*, BMem>;
32 strides[2] =
static_cast<long>(ext.
x) * ext.
y;
44 const int b = (a + 1) % 3, c = (a + 2) % 3;
47 const int bf = (s == 0) ? g : (
na - g);
50 using MD = Kokkos::MDRangePolicy<BExec, Kokkos::Rank<2>>;
53 const long base =
static_cast<long>(p0) *
sb +
static_cast<long>(
p1) * sc;
55 auto at = [&](
int ia) ->
double& {
return f(base +
static_cast<long>(
ia) *
sa); };
59 for (
int ia = 0;
ia < g; ++
ia)
66 for (
int ia = 0;
ia < g; ++
ia)
73 for (
int ia = 0;
ia < g; ++
ia)
96 const int b = (a + 1) % 3, c = (a + 2) % 3;
100 using MD = Kokkos::MDRangePolicy<BExec, Kokkos::Rank<2>>;
101 Kokkos::parallel_for(
104 const long base =
static_cast<long>(p0) *
sb +
static_cast<long>(
p1) * sc;
106 auto at = [&](
int ia) ->
double& {
return f(base +
static_cast<long>(
ia) *
sa); };
108 for (
int ia = 0;
ia < g; ++
ia)
125 const int b = (a + 1) % 3, c = (a + 2) % 3;
128 const int bic = (s == 0) ? g : (
na - g - 1);
129 const int lo = (s == 0) ? 0 : (
na - g),
hi = (s == 0) ? (g - 1) : (
na - 1);
130 using MD = Kokkos::MDRangePolicy<BExec, Kokkos::Rank<2>>;
131 Kokkos::parallel_for(
132 "peclet::flow::bc_neumann_ghost",
MD(
space, {0, 0}, {
dims[b],
dims[c]}),
134 const long base =
static_cast<long>(p0) *
sb +
static_cast<long>(
p1) * sc;
135 const double pin = f(base +
static_cast<long>(
bic) *
sa);
137 f(base +
static_cast<long>(
ia) *
sa) = pin;
147 const int b = (a + 1) % 3, c = (a + 2) % 3;
150 using MD = Kokkos::MDRangePolicy<BExec, Kokkos::Rank<2>>;
151 Kokkos::parallel_for(
154 const long base =
static_cast<long>(p0) *
sb +
static_cast<long>(
p1) * sc;
155 auto at = [&](
int ia) ->
double& {
return f(base +
static_cast<long>(
ia) *
sa); };
157 const int src = (
comp == a) ? g + 1 : g;
158 const int last = (
comp == a) ? g : g - 1;
163 const int src =
na - g - 1;
178 const int b = (a + 1) % 3, c = (a + 2) % 3;
180 const int bic = (s == 0) ? g : (
dims[a] - g - 1);
181 using MD = Kokkos::MDRangePolicy<BExec, Kokkos::Rank<2>>;
182 Kokkos::parallel_for(
186 static_cast<long>(p0) *
sb +
static_cast<long>(
p1) * sc +
static_cast<long>(
bic) *
sa;
198 const int b = (a + 1) % 3, c = (a + 2) % 3;
201 const int lo = (s == 0) ? 0 : (
na - g),
hi = (s == 0) ? (g - 1) : (
na - 1);
202 using MD = Kokkos::MDRangePolicy<BExec, Kokkos::Rank<2>>;
203 Kokkos::parallel_for(
204 "peclet::flow::bc_zero_p_ghost",
MD(
space, {0, 0}, {
dims[b],
dims[c]}),
206 const long base = (
long)p0 *
sb + (
long)
p1 * sc;
208 phi(base + (
long)
ia *
sa) = 0.0;
220 const int b = (a + 1) % 3, c = (a + 2) % 3;
222 using MD = Kokkos::MDRangePolicy<BExec, Kokkos::Rank<2>>;
223 Kokkos::parallel_for(
224 "peclet::flow::bc_correct_outflow",
MD(
space, {0, 0}, {
dims[b],
dims[c]}),
239 const int b = (a + 1) % 3, c = (a + 2) % 3;
241 const int bf = (s == 0) ? g : (
dims[a] - g);
242 using MD = Kokkos::MDRangePolicy<BExec, Kokkos::Rank<2>>;
243 Kokkos::parallel_for(
246 oa(
static_cast<long>(p0) *
sb +
static_cast<long>(
p1) * sc +
static_cast<long>(
bf) *
sa) =
void axisDims(B3 ext, int(&dims)[3], long(&strides)[3])
void bcSetOpenness(BField oa, B3 ext, int g, int a, int s, double val)
void bcZeroPressureGhost(BField phi, B3 ext, int g, int a, int s)
void bcZeroOpenness(BField oa, B3 ext, int g, int a, int s)
void bcDiffusionFold(BField dcorr, BField brhs, B3 ext, int g, int a, int s, double dval, double bval)
void bcVelocityColocated(BField f, B3 ext, int g, int a, int s, double wall, int comp=0, BField prof=BField(), int prof_nc=0)
void bcCorrectOutflow(BField f, BField phi, B3 ext, int g, int a)
void bcVelocityComp(BField f, B3 ext, int g, int a, int s, int comp, double wall, int fold, BField prof=BField(), int prof_nc=0)
void ibmFillEntry(const OV &o, int list_idx, int c_idx, float sdf_c, const float sdf_n[6], int bc_type, const float *thEx)
Kokkos::View< double *, BMem > BField
void bcOutflowComp(BField f, B3 ext, int g, int a, int s, int comp, int fold)
Kokkos::DefaultExecutionSpace BExec
void bcNeumannGhost(BField f, B3 ext, int g, int a, int s)