25 Expert parameters
GPU accumulation, linear algebra, adaptive CFL, and turbulence preconditioners
Use defaults for ordinary cases first. Adjust this block only for performance tuning, algorithm comparisons, or diagnostics.
{
"expert_parameters": {
"gpu_edge_accum": "atomic",
"spectral_radius_factor": 0.25,
"partitioner": { "type": "auto", "imbalance": 0.03 },
"krylov": { "orthogonalization": "cgs2" },
"vtu_encoding": "binary",
"vtkhdf_compression": 1
}
}
25.1 GPU edge accumulation
gpu_edge_accum |
Meaning |
|---|---|
atomic (default) |
Atomic accumulation path |
coloring |
Coloring-based race-free accumulation |
25.2 Linear algebra
The choice of linear-algebra library belongs to numerical_method.linear_solver; only the Krylov knobs sit in expert_parameters. Omit both to keep the defaults.
{
"numerical_method": {
"linear_solver": {
"backend": "cw_linalg",
"row_scaling": false
}
},
"expert_parameters": {
"krylov": { "orthogonalization": "cgs2" }
}
}
| Key | Default | Meaning |
|---|---|---|
linear_solver.backend |
cw_linalg |
cw_linalg (all builds) or amgx (NVIDIA AMGX; Linux CUDA builds with WAKE_WITH_AMGX). amgx covers the DBNS flow system on a single rank with euler_implicit, linear_solver.type: "fgmres", and a dilu, jacobi, or amg flow preconditioner; anything else is a validation error. |
linear_solver.amgx.config / .config_file |
"" |
An AMGX configuration string, or a file path relative to the deck. Give at most one; either one replaces the automatic translation. Only read with backend: "amgx". |
linear_solver.row_scaling |
false |
Experimental row equilibration (1/max‖A_ij‖) before the solve. Cannot be combined with linelet or backend: "amgx". |
expert_parameters.krylov.orthogonalization |
cgs2 |
cgs2 is Classical Gram-Schmidt with reorthogonalization; mgs is Modified Gram-Schmidt. |
25.3 Viscous spectral-radius factor
This is the viscous pseudo-time stability factor for models.type=navier_stokes. Its default is 0.25, and it is not used for Euler cases.
{ "expert_parameters": { "spectral_radius_factor": 0.25 } }
Fine-tuning the run_control.cfl.type=adaptive (HANIM/ANK) workflow lives at numerical_method.dbns.nonlinear_control, not here — there’s no expert_parameters knob for it.
25.4 Turbulence preconditioner
Configure numerical_method.linear_solver.preconditioner.turb; the older expert_parameters.turb_preconditioner key has been removed. See Shared linear solver for system-specific defaults and stationary sweep counts.
25.5 MPI partitioner
partitioner is an object, not a bare string.
{
"expert_parameters": {
"partitioner": {
"type": "auto",
"imbalance": 0.03,
"kahip": { "quality": "eco" }
}
}
}
| Key | Meaning |
|---|---|
type |
auto (default), metis, kahip, linear, parhip, or parmetis (simple linear partitioning, for diagnosis and reproduction) |
imbalance |
Maximum partition imbalance fraction (0.03 = 3%); the concept is backend-neutral (KaHIP’s imbalance and METIS’s ufactor mean the same thing here) |
kahip.quality |
fast, eco, or strong — KaHIP-specific, only meaningful with type: "kahip" |
auto falls back through metis → kahip → linear in that order, depending on which partitioner libraries the build was linked against.
State-extrema diagnostics (conserved-variable min/max + location, useful for locating a divergence) moved out of expert_parameters on 2026-08-27 — it’s outputs.diagnostics.state_extrema now.
25.6 Other settings
vtu_encoding:asciiorbinary, defaultbinary— applies toformat: "vtu"output only (vtkhdfis always binary).vtkhdf_compression: compression level forformat: "vtkhdf"output.jacobian_typeandjacobian_fix_factorno longer belong inexpert_parameters. Configure them in each scheme’sconvectivesubblock.
25.7 Precision and Krylov storage
Precision is selected by the executable: wake_<2|3>d_fp64, wake_<2|3>d_mixed, or wake_<2|3>d_fp32. The former krylov.precision input has been removed. FP64 uses double-precision Krylov arithmetic; MIXED and FP32 use fp32.
{
"expert_parameters": {
"krylov": {
"orthogonalization": "cgs2",
"restart": 0,
"offdiag_fp16": false
}
}
}restart: 0 (or a value at least linear_solver.max_iter) disables FGMRES restart. A smaller value reduces basis memory but may slow convergence; the total iteration cap remains max_iter. offdiag_fp16 stores off-diagonal Jacobian blocks in fp16 with a per-row power-of-two scale, retaining fp32 diagonals and arithmetic. It is available only in MIXED/FP32 builds, is ignored with a warning in FP64 builds, and is ignored for linelet. It is independent of linalg.row_scaling.
25.8 Mesh and material diagnostics
mesh_check: "warn" | "fatal": warn (default) or stop on mesh metric violations.eos_table.disable: true: use the analytic Peng–Robinson path for CPU verification; unsupported in GPU builds.mean_flow_viscous_scheme: "avg_grad_corrected" | "avg_grad": corrected face gradients (default) or simple averaging for mean-flow viscous fluxes.wall_velocity_law: "auto" | "spalding" | "sa" | "sst": keepautofor supported wall treatment; explicit alternatives are experimental.fr_vtu_high_order: true: high-order VTK Lagrange cells for FR hex/quad output; usefalsefor viewers requiring linear subcells.
25.8.1 Parallel mesh reading
partitioner.type: "auto" uses serial reading and METIS, falling back to KaHIP and then linear partitioning when unavailable. Explicit parhip or parmetis selects parallel reading and requires compatible HDF5 CGNS meshes and build support; unsupported combinations fail instead of falling back. ParMETIS is restricted to internal evaluation builds, not distributed binaries. metis.method accepts auto, recursive, or kway; parhip.quality accepts ultrafast, fast (default), or eco. If imbalance is omitted, METIS recursive uses 0.001 and kway uses 0.03; KaHIP/ParHIP/ParMETIS use 0.03.