flow
Kokkos cut-cell IBM incompressible Navier-Stokes solver + pnm pore extraction
Loading...
Searching...
No Matches
three_solver_study Namespace Reference

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 ""
 

Detailed Description

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.)

Function Documentation

◆ _grid()

three_solver_study._grid (   N)
protected

Definition at line 25 of file three_solver_study.py.

Referenced by sdf_random(), and sdf_zh().

◆ _mm()

three_solver_study._mm (   d,
  N 
)
protected

Definition at line 27 of file three_solver_study.py.

Referenced by sdf_random().

◆ sdf_zh()

three_solver_study.sdf_zh (   N,
  phi = 0.216 
)

Definition at line 29 of file three_solver_study.py.

References _grid().

Referenced by run().

◆ sdf_random()

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().

◆ 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().

Variable Documentation

◆ ZH_PHI

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.

◆ ZH_K

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.

◆ zh_ref

float three_solver_study.zh_ref = lambda phi(np.interp(phi, ZH_PHI, ZH_K))

Definition at line 23 of file three_solver_study.py.

◆ cases

list three_solver_study.cases = [("zh",[16,24,32,48]), ("random",[24,32,48])]

Definition at line 72 of file three_solver_study.py.

◆ flush

three_solver_study.flush

Definition at line 73 of file three_solver_study.py.

◆ ref

float three_solver_study.ref = "zh" else None

Definition at line 75 of file three_solver_study.py.

◆ r

three_solver_study.r = run(case,N,solver,re=0.0); gc.collect()

Definition at line 79 of file three_solver_study.py.

◆ err

str three_solver_study.err = f"{100*(r['val']-ref)/ref:+.2f}%" if ref else ""

Definition at line 80 of file three_solver_study.py.