Compare commits
3
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
78c0f1811b | ||
|
|
43e226c59a | ||
|
|
b47af12c9d |
No files matched your search
@@ -167,7 +167,7 @@ extern "C" __global__ void BlockStep(const fpxx* in, fpxx* out, unsigned int hal
|
|||||||
const unsigned char cell_kind = kind != nullptr ? kind[cell] : KIND_ACTIVE;
|
const unsigned char cell_kind = kind != nullptr ? kind[cell] : KIND_ACTIVE;
|
||||||
float f[NQ];
|
float f[NQ];
|
||||||
if (cell_kind == KIND_OUTER || (flags != nullptr && is_solid(flags[cell]))) {
|
if (cell_kind == KIND_OUTER || (flags != nullptr && is_solid(flags[cell]))) {
|
||||||
for (int q = 0; q < NQ; ++q) f[q] = NAN;
|
fill_invalid(f);
|
||||||
} else {
|
} else {
|
||||||
unsigned long j[NQ];
|
unsigned long j[NQ];
|
||||||
compute_neighbors(x, y, j); // Core neighbors stay inside the window: no wrap.
|
compute_neighbors(x, y, j); // Core neighbors stay inside the window: no wrap.
|
||||||
|
|||||||
@@ -7,4 +7,10 @@
|
|||||||
|
|
||||||
constexpr unsigned char KIND_ACTIVE = 0u, KIND_INNER = 1u, KIND_OUTER = 2u;
|
constexpr unsigned char KIND_ACTIVE = 0u, KIND_INNER = 1u, KIND_OUTER = 2u;
|
||||||
|
|
||||||
|
// NaN populations mark a cell without valid state (OUTER ghost or solid core).
|
||||||
|
__device__ __forceinline__ void fill_invalid(float* f)
|
||||||
|
{
|
||||||
|
for (int q = 0; q < NQ; ++q) f[q] = NAN;
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -9,6 +9,7 @@
|
|||||||
#include "core/params.cuh"
|
#include "core/params.cuh"
|
||||||
#include "core/flags.cuh"
|
#include "core/flags.cuh"
|
||||||
#include "core/obs.cuh"
|
#include "core/obs.cuh"
|
||||||
|
#include "core/cell_kind.cuh"
|
||||||
#include "operators/macro.cuh"
|
#include "operators/macro.cuh"
|
||||||
#include "operators/collision_srt.cuh"
|
#include "operators/collision_srt.cuh"
|
||||||
#if COLLISION_MODEL == 2
|
#if COLLISION_MODEL == 2
|
||||||
@@ -71,7 +72,7 @@ extern "C" __global__ void PatchFineStep(const float* in, float* out, const uint
|
|||||||
// that held explosion data. Inner halo only streams; it never collides.
|
// that held explosion data. Inner halo only streams; it never collides.
|
||||||
if (x < 2 || y < 2 || x >= NX - 2 || y >= NY - 2
|
if (x < 2 || y < 2 || x >= NX - 2 || y >= NY - 2
|
||||||
|| (flags != nullptr && is_solid(flags[k]))) {
|
|| (flags != nullptr && is_solid(flags[k]))) {
|
||||||
for (int q = 0; q < NQ; ++q) f[q] = NAN;
|
fill_invalid(f);
|
||||||
} else {
|
} else {
|
||||||
unsigned long j[NQ];
|
unsigned long j[NQ];
|
||||||
compute_neighbors(x, y, j); // These interior targets never wrap.
|
compute_neighbors(x, y, j); // These interior targets never wrap.
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ extern "C" __global__ void BlockChannelStep(
|
|||||||
const unsigned long cell = (unsigned long)blockIdx.z * TOTAL_CELLS + k;
|
const unsigned long cell = (unsigned long)blockIdx.z * TOTAL_CELLS + k;
|
||||||
float f[NQ];
|
float f[NQ];
|
||||||
if (kind != nullptr && kind[cell] == KIND_OUTER) {
|
if (kind != nullptr && kind[cell] == KIND_OUTER) {
|
||||||
for (int q = 0; q < NQ; ++q) f[q] = NAN;
|
fill_invalid(f);
|
||||||
} else {
|
} else {
|
||||||
unsigned long j[NQ];
|
unsigned long j[NQ];
|
||||||
compute_neighbors(x, y, j);
|
compute_neighbors(x, y, j);
|
||||||
|
|||||||
Reference in new issue
Block a user