|
flow
Kokkos cut-cell IBM incompressible Navier-Stokes solver + pnm pore extraction
|
Functions | |
| _grid (N) | |
| _mm (d, N) | |
| sdf_zh (N, phi=0.216) | |
| sdf_random (N, n=8, r_frac=0.18, jit=0.06, seed=12345) | |
| run (case, N, solver="staggered", re=0.0, mu=0.1, F=1e-3, dt=60.0, max_steps=500, tol=1e-6) | |
Variables | |
| list | ZH_PHI = [0.000125,0.001,0.008,0.027,0.064,0.125,0.216,0.343,0.45,0.5236] |
| list | ZH_K = [1.096,1.212,1.525,2.008,2.810,4.292,7.442,15.4,28.1,42.1] |
| float | zh_ref = lambda phi(np.interp(phi, ZH_PHI, ZH_K)) |
| list | cases = [("zh",[16,24,32,48]), ("random",[24,32,48])] |
| flush | |
| float | ref = "zh" else None |
| r = run(case,N,solver,re=0.0); gc.collect() | |
| str | err = f"{100*(r['val']-ref)/ref:+.2f}%" if ref else "" |
sdflow side of the three-solver study: staggered vs collocated, Z&H SC sphere + random packing,
Re=0 (Stokes) and Re=100 (advection on). Prints K (Z&H) / k* (random), cells, pressure iters, wall.
Geometry + metrics identical to tests/regression/sdflow_regression.py so AMR can be compared directly.
Pair with transport-core/python/amr_drag_study.py for the AMR (graded cut-cell) side.
Findings (2026-06-25):
* Z&H phi=0.216 (ref K=7.442), Re=0: staggered converges 2nd-order from below
(N=16 -1.78% -> N=48 -0.07%); collocated carries the intrinsic +~1% gap (N=32 +1.16%).
* random pack k*: staggered -> ~0.00622 from above, collocated -> ~0.00618 from below (same k_inf).
* Re~100 (F=2.6e-3, N=32): staggered K=8.90 (Re=101.6), collocated K=9.05 (Re=99.9), ~+20% over
Stokes; both converge cleanly (div~1e-12). Same F at N=48 gives Re~300 (R scales with N) -- only
N=32 is a true Re=100 comparison.
* Staggered is the accuracy default for permeability/drag; collocated trades ~1%/grid for
cell-centered storage. (Kokkos/OpenMP: ~1-30 s per case.)
|
protected |
Definition at line 25 of file three_solver_study.py.
Referenced by sdf_random(), and sdf_zh().
|
protected |
Definition at line 27 of file three_solver_study.py.
Referenced by sdf_random().
| three_solver_study.sdf_zh | ( | N, | |
phi = 0.216 |
|||
| ) |
| three_solver_study.sdf_random | ( | N, | |
n = 8, |
|||
r_frac = 0.18, |
|||
jit = 0.06, |
|||
seed = 12345 |
|||
| ) |
Definition at line 33 of file three_solver_study.py.
References _grid(), and _mm().
Referenced by run().
| three_solver_study.run | ( | case, | |
| N, | |||
solver = "staggered", |
|||
re = 0.0, |
|||
mu = 0.1, |
|||
F = 1e-3, |
|||
dt = 60.0, |
|||
max_steps = 500, |
|||
tol = 1e-6 |
|||
| ) |
Definition at line 42 of file three_solver_study.py.
References sdf_random(), and sdf_zh().
| list three_solver_study.ZH_PHI = [0.000125,0.001,0.008,0.027,0.064,0.125,0.216,0.343,0.45,0.5236] |
Definition at line 21 of file three_solver_study.py.
| list three_solver_study.ZH_K = [1.096,1.212,1.525,2.008,2.810,4.292,7.442,15.4,28.1,42.1] |
Definition at line 22 of file three_solver_study.py.
Definition at line 23 of file three_solver_study.py.
| list three_solver_study.cases = [("zh",[16,24,32,48]), ("random",[24,32,48])] |
Definition at line 72 of file three_solver_study.py.
| three_solver_study.flush |
Definition at line 73 of file three_solver_study.py.
| float three_solver_study.ref = "zh" else None |
Definition at line 75 of file three_solver_study.py.
Definition at line 79 of file three_solver_study.py.
Definition at line 80 of file three_solver_study.py.