|
flow 1.3.0
Kokkos cut-cell IBM incompressible Navier-Stokes solver + pnm pore extraction
|
ctest bottom_direct: the device pressure bottom's block-tridiagonal direct preconditioner (doc/vof_step_performance_design.md §13, gate A, U1-U7).
More...
#include <cmath>#include <cstdio>#include <cstring>#include <Kokkos_Core.hpp>#include <random>#include <type_traits>#include <vector>#include "mac_cutcell_mg.hpp"Go to the source code of this file.
Functions | |
| int | main (int argc, char **argv) |
ctest bottom_direct: the device pressure bottom's block-tridiagonal direct preconditioner (doc/vof_step_performance_design.md §13, gate A, U1-U7).
Problems (§13.8 A), every one at a face-coefficient ratio of 50 on a single-rank two-level hierarchy whose agglomerated bottom is the level under test: periodic 16x12x8 all periodic: slow axis x, P = 16, b = 96, with the border; periodic-P2 2x2x2 all periodic: slow axis z (the tie rule), P = 2 (treated non-periodic), every in-plane axis of length 2 (the doubled faces); walls-y 16x12x8, walls on y: slow axis y, P = 12, b = 128, no border; solids the B1b solid sheet (three fluid components), periodic; solids-walls-y the same with walls on y; pocket periodic, plus a closed two-cell pocket along the slow axis whose last plane holds ONE cell (m_c = 1: the augmentation is a single diagonal entry). (The bottom operator cannot hold a one-cell component: a cell all of whose faces are closed has AC = 0 and is solid.) Checks: U1 the FP64 instantiation: one M on a compatible r gives ||A x - r||inf / ||r||inf <= 1e-12 with A the operator M factors (the stored face form with its diagonal re-summed in FP64, §13.4.1), and per-component means of x <= 1e-15 max|x|; U2 the FP32 (production) instantiation: the same residual <= 1e-3; U3 the factor storage (Q, Y, e, s) and M(r) before the FCG's mean removal (a team reduction on a device, §13.2: "the FCG's dots stay team reductions") are BITWISE identical over the team sizes {32, 64, 128, 256, T_max} (device) or {1, 2, 4, 8} (OpenMP); on OpenMP also the WHOLE production FCG solve (§14 H-1: the host FCG's reductions are single-lane, so its bits are independent of T); U4 the production FCG reaches tau in <= 3 iterations, raises no flag, its true residual (stored operator) is <= 10 tau r0, x = 0 exactly on solids, per-component means of x <= 4e-16 max|x|; U5 a first-attempt pivot floor of 1e30 (test hook): restarts = 1, the FCG reaches tau, no flag; U6 a NaN face coefficient: the flag is raised (lastSolveFailed) and x = 0; U7 float M against a host FP64 dense Cholesky solve of A' (the augmented matrix), on the 16x12x8 problems: max |z - x_ref| / max |x_ref| <= 1e-3; U8 (OpenMP) the host schedule of the factor (§14 H-1, A(b)) against the team algorithm, its oracle, at team sizes {1, 2, 4}: the factor storage (Q, Y, e, s, stat) BITWISE identical, FP32 and FP64, with the production pivot floor and with a first-attempt floor of 1e30 (every pivot fails: the restart path). Host sums use long double so the checks measure the device result, not the host's rounding.
Definition in file test_bottom_direct.cpp.
| int main | ( | int | argc, |
| char ** | argv | ||
| ) |
Definition at line 630 of file test_bottom_direct.cpp.
References runCase().