|
flow 1.3.0
Kokkos cut-cell IBM incompressible Navier-Stokes solver + pnm pore extraction
|
flow — the device pressure bottom's direct preconditioner (doc/vof_step_performance_ design.md §13): a block-tridiagonal factorization of the agglomerated bottom operator, planes along one axis, each plane's Schur complement inverted explicitly (block Thomas), in FacReal arithmetic (float in production), applied as M inside the bottom's FP64 flexible CG.
More...
Go to the source code of this file.
Classes | |
| struct | peclet::flow::BottomPlanes |
| struct | peclet::flow::BottomDirect< FacReal > |
| struct | peclet::flow::BottomFactorKernel< FacReal, OpV > |
Namespaces | |
| namespace | peclet |
| namespace | peclet::flow |
Macros | |
| #define | PECLET_BOTTOM_UNROLL |
| #define | PECLET_BOTTOM_HOST_SIMD PECLET_FLOW_OMP_SIMD |
Functions | |
| double | peclet::flow::bottomShift (int attempt) |
| BottomPlanes | peclet::flow::bottomChoosePlanes (C3 inner, const int bc[6]) |
Variables | |
| constexpr int | peclet::flow::kBottomMaxPlane = 192 |
| constexpr int | peclet::flow::kBottomTile = 16 |
| constexpr double | peclet::flow::kBottomPivotTol = 1e-6 |
| constexpr int | peclet::flow::kBottomAttempts = 3 |
flow — the device pressure bottom's direct preconditioner (doc/vof_step_performance_ design.md §13): a block-tridiagonal factorization of the agglomerated bottom operator, planes along one axis, each plane's Schur complement inverted explicitly (block Thomas), in FacReal arithmetic (float in production), applied as M inside the bottom's FP64 flexible CG.
Container-free (Views and PODs only), so it can move to core::solver later (§13.9 Q-D8).
The scheme (§13.4, normative):
Reproducibility (§13.2): every stored or output scalar is computed by ONE thread in an order fixed by the algorithm and kBottomTile, never by the team size – no team reductions here – so the factor and M(r) are bitwise independent of T.
On a HOST backend the factor runs a second schedule of the same arithmetic (§14 H-1, A(b); BottomFactorKernel::hostAssemble / hostInvert / hostBorder): every stored scalar is the team algorithm's expression with its operands in the same order, but the work is cut into a few barrier-free phases per tile (the team version publishes every column of every diagonal tile with a barrier: ~170 per plane) and each phase computes many independent outputs in a vectorizable lane loop instead of one serial dot product per thread. Its factor storage (Q, Y, e, s, stat) is bitwise identical to the team algorithm's on the same backend (ctest bottom_direct U8); only the scratch layouts of Sg, L and W differ.
Definition in file mg_bottom_direct.hpp.
| #define PECLET_BOTTOM_UNROLL |
Definition at line 53 of file mg_bottom_direct.hpp.
| #define PECLET_BOTTOM_HOST_SIMD PECLET_FLOW_OMP_SIMD |
Definition at line 60 of file mg_bottom_direct.hpp.