25  Expert parameters

GPU accumulation, linear algebra, adaptive CFL, and turbulence preconditioners

Warning

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 } }
Note

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.

Note

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: ascii or binary, default binary — applies to format: "vtu" output only (vtkhdf is always binary).
  • vtkhdf_compression: compression level for format: "vtkhdf" output.
  • jacobian_type and jacobian_fix_factor no longer belong in expert_parameters. Configure them in each scheme’s convective subblock.

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": keep auto for supported wall treatment; explicit alternatives are experimental.
  • fr_vtu_high_order: true: high-order VTK Lagrange cells for FR hex/quad output; use false for 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.