use super::options_core::{Arity, Registry, Spec, ValueKind};
pub static SPECS: &[Spec] = &[
Spec {
flag: "-options_file",
key: "options_file",
arity: Arity::One,
kind: ValueKind::Str,
doc: "Read more options from file",
},
Spec {
flag: "-ksp_type",
key: "ksp_type",
arity: Arity::One,
kind: ValueKind::Str,
doc: "cg, gmres, minres, lsqr, lsmr, bicgstab, ...",
},
Spec {
flag: "-ksp_rtol",
key: "ksp_rtol",
arity: Arity::One,
kind: ValueKind::Float,
doc: "relative tol",
},
Spec {
flag: "-ksp_atol",
key: "ksp_atol",
arity: Arity::One,
kind: ValueKind::Float,
doc: "absolute tol",
},
Spec {
flag: "-ksp_dtol",
key: "ksp_dtol",
arity: Arity::One,
kind: ValueKind::Float,
doc: "divergence tol",
},
Spec {
flag: "-ksp_max_it",
key: "ksp_max_it",
arity: Arity::One,
kind: ValueKind::UInt,
doc: "max iterations",
},
Spec {
flag: "-ksp_restart",
key: "ksp_restart",
arity: Arity::One,
kind: ValueKind::UInt,
doc: "Generic restart for restarted KSPs",
},
Spec {
flag: "-ksp_gmres_restart",
key: "ksp_gmres_restart",
arity: Arity::One,
kind: ValueKind::UInt,
doc: "GMRES-specific restart (overrides -ksp_restart)",
},
Spec {
flag: "-ksp_gcr_restart",
key: "ksp_gcr_restart",
arity: Arity::One,
kind: ValueKind::UInt,
doc: "GCR restart length (overrides -ksp_restart for gcr)",
},
Spec {
flag: "-ksp_bicgstab_variant",
key: "ksp_bicgstab_variant",
arity: Arity::One,
kind: ValueKind::Str,
doc: "BiCGStab variant: classic|fewerchecks|reliable",
},
Spec {
flag: "-ksp_bicgstab_replace_every",
key: "ksp_bicgstab_replace_every",
arity: Arity::One,
kind: ValueKind::UInt,
doc: "BiCGStab reliable residual replacement interval",
},
Spec {
flag: "-ksp_richardson_omega",
key: "ksp_richardson_omega",
arity: Arity::One,
kind: ValueKind::Float,
doc: "Richardson damping parameter",
},
Spec {
flag: "-ksp_chebyshev_omega",
key: "ksp_chebyshev_omega",
arity: Arity::One,
kind: ValueKind::Float,
doc: "Chebyshev(KSP) damping parameter",
},
Spec {
flag: "-ksp_gmres_orthog",
key: "ksp_gmres_orthog",
arity: Arity::One,
kind: ValueKind::Str,
doc: "GMRES orthog: mgs|cgs",
},
Spec {
flag: "-ksp_gmres_reorth",
key: "ksp_gmres_reorth",
arity: Arity::One,
kind: ValueKind::Str,
doc: "GMRES reorth: never|ifneeded|always",
},
Spec {
flag: "-ksp_gmres_cgs_refinement_type",
key: "ksp_gmres_cgs_refinement_type",
arity: Arity::One,
kind: ValueKind::Str,
doc: "GMRES CGS refinement alias: never|ifneeded|always",
},
Spec {
flag: "-ksp_gmres_reorth_tol",
key: "ksp_gmres_reorth_tol",
arity: Arity::One,
kind: ValueKind::Float,
doc: "GMRES reorth tolerance",
},
Spec {
flag: "-ksp_gmres_variant",
key: "ksp_gmres_variant",
arity: Arity::One,
kind: ValueKind::Str,
doc: "GMRES variant: classical|pipelined|sstep[:s]",
},
Spec {
flag: "-ksp_gmres_reorthog",
key: "ksp_gmres_reorthog",
arity: Arity::Zero,
kind: ValueKind::Bool,
doc: "GMRES second orthog pass",
},
Spec {
flag: "-ksp_gmres_happy_breakdown",
key: "ksp_gmres_happy_breakdown",
arity: Arity::Zero,
kind: ValueKind::Bool,
doc: "GMRES happy breakdown",
},
Spec {
flag: "-ksp_fgmres_restart",
key: "ksp_fgmres_restart",
arity: Arity::One,
kind: ValueKind::UInt,
doc: "FGMRES-specific restart (overrides -ksp_restart)",
},
Spec {
flag: "-ksp_fgmres_orthog",
key: "ksp_fgmres_orthog",
arity: Arity::One,
kind: ValueKind::Str,
doc: "FGMRES orthog: cgs|classical|cgs_refined",
},
Spec {
flag: "-ksp_fgmres_reorth",
key: "ksp_fgmres_reorth",
arity: Arity::One,
kind: ValueKind::Str,
doc: "FGMRES reorth: never|ifneeded|always",
},
Spec {
flag: "-ksp_fgmres_reorth_tol",
key: "ksp_fgmres_reorth_tol",
arity: Arity::One,
kind: ValueKind::Float,
doc: "FGMRES reorth tolerance",
},
Spec {
flag: "-ksp_fgmres_reorthog",
key: "ksp_fgmres_reorthog",
arity: Arity::Zero,
kind: ValueKind::Bool,
doc: "FGMRES second orthog pass",
},
Spec {
flag: "-ksp_fgmres_happy_breakdown",
key: "ksp_fgmres_happy_breakdown",
arity: Arity::Zero,
kind: ValueKind::Bool,
doc: "FGMRES happy breakdown",
},
Spec {
flag: "-ksp_fgmres_variant",
key: "ksp_fgmres_variant",
arity: Arity::One,
kind: ValueKind::Str,
doc: "FGMRES variant: classical|pipelined",
},
Spec {
flag: "-ksp_reduction",
key: "ksp_reduction",
arity: Arity::One,
kind: ValueKind::Str,
doc: "Reduction mode: fast|deterministic",
},
Spec {
flag: "-ksp_monitor_rank0",
key: "ksp_monitor_rank0",
arity: Arity::Zero,
kind: ValueKind::Bool,
doc: "invoke monitors only on rank 0",
},
Spec {
flag: "-ksp_view",
key: "ksp_view",
arity: Arity::Zero,
kind: ValueKind::Bool,
doc: "emit structured KSP diagnostics",
},
Spec {
flag: "-ksp_pc_side",
key: "ksp_pc_side",
arity: Arity::One,
kind: ValueKind::Str,
doc: "left|right|symmetric",
},
Spec {
flag: "-matrix",
key: "matrix",
arity: Arity::One,
kind: ValueKind::Str,
doc: "matrix file",
},
Spec {
flag: "-rhs",
key: "rhs",
arity: Arity::One,
kind: ValueKind::Str,
doc: "rhs file",
},
Spec {
flag: "-ksp_min_iter",
key: "ksp_min_iter",
arity: Arity::One,
kind: ValueKind::UInt,
doc: "min iter before check",
},
Spec {
flag: "-ksp_cf_tol",
key: "ksp_cf_tol",
arity: Arity::One,
kind: ValueKind::Float,
doc: "stagnation CF tol",
},
Spec {
flag: "-ksp_skip_real_r_check",
key: "ksp_skip_real_r_check",
arity: Arity::Zero,
kind: ValueKind::Bool,
doc: "toggle real-residual check",
},
Spec {
flag: "-ksp_epsmac",
key: "ksp_epsmac",
arity: Arity::One,
kind: ValueKind::Float,
doc: "IEEE epsilon",
},
Spec {
flag: "-ksp_guard_zero_residual",
key: "ksp_guard_zero_residual",
arity: Arity::One,
kind: ValueKind::Float,
doc: "guard for zero residual",
},
Spec {
flag: "-ksp_cg_norm",
key: "ksp_cg_norm",
arity: Arity::One,
kind: ValueKind::Str,
doc: "precond|unprecond|natural|none",
},
Spec {
flag: "-ksp_cg_pipelined",
key: "ksp_cg_pipelined",
arity: Arity::Zero,
kind: ValueKind::Bool,
doc: "toggle pipelined PCG",
},
Spec {
flag: "-ksp_cg_use_async",
key: "ksp_cg_use_async",
arity: Arity::Zero,
kind: ValueKind::Bool,
doc: "toggle asynchronous CG reductions",
},
Spec {
flag: "-ksp_cg_async_min_n",
key: "ksp_cg_async_min_n",
arity: Arity::One,
kind: ValueKind::UInt,
doc: "minimum vector length for async CG",
},
Spec {
flag: "-ksp_cg_replace_every",
key: "ksp_cg_replace_every",
arity: Arity::One,
kind: ValueKind::UInt,
doc: "residual replacement/recompute interval for pipelined PCG/CG",
},
Spec {
flag: "-ksp_cg_single_reduction",
key: "ksp_cg_single_reduction",
arity: Arity::Zero,
kind: ValueKind::Bool,
doc: "single reduction",
},
Spec {
flag: "-ksp_reproducible",
key: "ksp_reproducible",
arity: Arity::Zero,
kind: ValueKind::Bool,
doc: "enable deterministic global reductions",
},
Spec {
flag: "-ksp_trust_region",
key: "ksp_trust_region",
arity: Arity::One,
kind: ValueKind::Float,
doc: "trust region radius",
},
Spec {
flag: "-ksp_threads",
key: "ksp_threads",
arity: Arity::One,
kind: ValueKind::UInt,
doc: "set Rayon threads",
},
Spec {
flag: "-ksp_threads_mode",
key: "ksp_threads_mode",
arity: Arity::One,
kind: ValueKind::Str,
doc: "threading mode: context | global | serial",
},
Spec {
flag: "-ksp_min_len_vec",
key: "ksp_min_len_vec",
arity: Arity::One,
kind: ValueKind::UInt,
doc: "vector length cutoff for threaded kernels",
},
Spec {
flag: "-ksp_min_rows_spmv",
key: "ksp_min_rows_spmv",
arity: Arity::One,
kind: ValueKind::UInt,
doc: "row cutoff for threaded CSR SpMV",
},
Spec {
flag: "-ksp_chunk_rows_spmv",
key: "ksp_chunk_rows_spmv",
arity: Arity::One,
kind: ValueKind::UInt,
doc: "target rows per chunk for threaded CSR SpMV",
},
Spec {
flag: "-ksp_min_work_spmm_dense",
key: "ksp_min_work_spmm_dense",
arity: Arity::One,
kind: ValueKind::UInt,
doc: "work cutoff (rows*rhs) for threaded CSR SpMM dense",
},
Spec {
flag: "-ksp_chunk_rows_spmm_dense",
key: "ksp_chunk_rows_spmm_dense",
arity: Arity::One,
kind: ValueKind::UInt,
doc: "row block for threaded CSR SpMM dense",
},
Spec {
flag: "-ksp_chunk_cols_spmm_dense",
key: "ksp_chunk_cols_spmm_dense",
arity: Arity::One,
kind: ValueKind::UInt,
doc: "rhs-column block for threaded CSR SpMM dense",
},
Spec {
flag: "-pc_type",
key: "pc_type",
arity: Arity::One,
kind: ValueKind::Str,
doc: "jacobi, ilu, amg, ...",
},
Spec {
flag: "-pc_view",
key: "pc_view",
arity: Arity::Zero,
kind: ValueKind::Bool,
doc: "emit structured PC diagnostics",
},
Spec {
flag: "-pc_global",
key: "pc_global",
arity: Arity::One,
kind: ValueKind::Str,
doc: "distributed preconditioner: none | block-jacobi | asm | ras",
},
Spec {
flag: "-pc_local",
key: "pc_local",
arity: Arity::One,
kind: ValueKind::Str,
doc: "local PC for block Jacobi: ilu | ilutp | jacobi | sor | chebyshev | fsai | spai (ilut row-filter is experimental, requires -pc_ilut_row_filter_opt_in)",
},
Spec {
flag: "-pc_dist_local_apply",
key: "pc_dist_local_apply",
arity: Arity::One,
kind: ValueKind::Str,
doc: "distributed local apply mode: wrapped_local | distributed_native | strict",
},
Spec {
flag: "-pc_dist_route",
key: "pc_dist_route",
arity: Arity::One,
kind: ValueKind::Str,
doc: "distributed route preference: native | adapted | root_gather",
},
Spec {
flag: "-pc_dist_max_fallbacks",
key: "pc_dist_max_fallbacks",
arity: Arity::One,
kind: ValueKind::UInt,
doc: "maximum fallback events allowed in distributed route selection",
},
Spec {
flag: "-pc_dist_native_required",
key: "pc_dist_native_required",
arity: Arity::Zero,
kind: ValueKind::Bool,
doc: "require native distributed route; fail early on adapted/configured fallback routes",
},
Spec {
flag: "-pc_jacobi_block_size",
key: "pc_jacobi_block_size",
arity: Arity::One,
kind: ValueKind::UInt,
doc: "block size for block-Jacobi preconditioner",
},
Spec {
flag: "-pc_approxinv_kind",
key: "pc_approxinv_kind",
arity: Arity::One,
kind: ValueKind::Str,
doc: "fsai | spai",
},
Spec {
flag: "-pc_approxinv_levels",
key: "pc_approxinv_levels",
arity: Arity::One,
kind: ValueKind::UInt,
doc: "graph expansion depth (default 1)",
},
Spec {
flag: "-pc_approxinv_max_per_col",
key: "pc_approxinv_max_per_col",
arity: Arity::One,
kind: ValueKind::UInt,
doc: "cap nnz per column (default 20)",
},
Spec {
flag: "-pc_approxinv_drop_tol",
key: "pc_approxinv_drop_tol",
arity: Arity::One,
kind: ValueKind::Float,
doc: "post-solve prune threshold (default 1e-3)",
},
Spec {
flag: "-pc_approxinv_reg",
key: "pc_approxinv_reg",
arity: Arity::One,
kind: ValueKind::Float,
doc: "diagonal regularization (default 1e-12)",
},
Spec {
flag: "-pc_approxinv_max_cond",
key: "pc_approxinv_max_cond",
arity: Arity::One,
kind: ValueKind::Float,
doc: "max local cond estimate (reserved)",
},
Spec {
flag: "-pc_approxinv_parallel",
key: "pc_approxinv_parallel",
arity: Arity::Zero,
kind: ValueKind::Bool,
doc: "enable rayon parallel build",
},
Spec {
flag: "-pc_ilu_levels",
key: "pc_ilu_levels",
arity: Arity::One,
kind: ValueKind::UInt,
doc: "ILU levels (legacy)",
},
Spec {
flag: "-pc_chebyshev_degree",
key: "pc_chebyshev_degree",
arity: Arity::One,
kind: ValueKind::UInt,
doc: "Chebyshev degree",
},
Spec {
flag: "-pc_ilut_drop_tol",
key: "pc_ilut_drop_tol",
arity: Arity::One,
kind: ValueKind::Float,
doc: "ILUT drop tol",
},
Spec {
flag: "-pc_ilut_max_fill",
key: "pc_ilut_max_fill",
arity: Arity::One,
kind: ValueKind::UInt,
doc: "ILUT max fill",
},
Spec {
flag: "-pc_ilut_perm_tol",
key: "pc_ilut_perm_tol",
arity: Arity::One,
kind: ValueKind::Float,
doc: "ILUTP pivot tol",
},
Spec {
flag: "-pc_ilut_row_filter_opt_in",
key: "pc_ilut_row_filter_opt_in",
arity: Arity::Zero,
kind: ValueKind::Bool,
doc: "explicitly allow experimental row-filter ILUT mode (pc_type=ilut / pc_local=ilut)",
},
Spec {
flag: "-pc_ilutp_max_fill",
key: "pc_ilutp_max_fill",
arity: Arity::One,
kind: ValueKind::UInt,
doc: "ILUTP max fill",
},
Spec {
flag: "-pc_ilutp_drop_tol",
key: "pc_ilutp_drop_tol",
arity: Arity::One,
kind: ValueKind::Float,
doc: "ILUTP drop tol",
},
Spec {
flag: "-pc_ilutp_perm_tol",
key: "pc_ilutp_perm_tol",
arity: Arity::One,
kind: ValueKind::Float,
doc: "ILUTP pivot tol",
},
Spec {
flag: "-pc_reorder",
key: "pc_reorder",
arity: Arity::One,
kind: ValueKind::Str,
doc: "none|colamd|amd|rcm|cuthill_mckee",
},
Spec {
flag: "-pc_scaling",
key: "pc_scaling",
arity: Arity::One,
kind: ValueKind::Str,
doc: "none|diagonal|symmetric",
},
Spec {
flag: "-pc_fixdiag",
key: "pc_fixdiag",
arity: Arity::OptionalBool,
kind: ValueKind::Bool,
doc: "fix tiny/missing diagonal entries",
},
Spec {
flag: "-pc_shift_diag",
key: "pc_shift_diag",
arity: Arity::One,
kind: ValueKind::Float,
doc: "shift diagonal by a constant",
},
Spec {
flag: "-pc_diag_inject_tau",
key: "pc_diag_inject_tau",
arity: Arity::One,
kind: ValueKind::Float,
doc: "inject tau*row_norm into diagonal",
},
Spec {
flag: "-pc_scale",
key: "pc_scale",
arity: Arity::One,
kind: ValueKind::Str,
doc: "row|col|both scaling",
},
Spec {
flag: "-pc_scale_norm",
key: "pc_scale_norm",
arity: Arity::One,
kind: ValueKind::Str,
doc: "scale norm: 1|inf",
},
Spec {
flag: "-pc_asm_overlap",
key: "pc_asm_overlap",
arity: Arity::One,
kind: ValueKind::UInt,
doc: "ASM overlap",
},
Spec {
flag: "-pc_asm_mode",
key: "pc_asm_mode",
arity: Arity::One,
kind: ValueKind::Str,
doc: "asm|ras",
},
Spec {
flag: "-pc_asm_weighting",
key: "pc_asm_weighting",
arity: Arity::One,
kind: ValueKind::Str,
doc: "none|uniform|linear|poly:k",
},
Spec {
flag: "-pc_asm_subdomains",
key: "pc_asm_subdomains",
arity: Arity::One,
kind: ValueKind::Str,
doc: "CSV indices",
},
Spec {
flag: "-pc_asm_inner_pc",
key: "pc_asm_inner_pc",
arity: Arity::One,
kind: ValueKind::Str,
doc: "jacobi|ilu|ilutp (ilut row-filter is experimental, requires -pc_ilut_row_filter_opt_in)",
},
Spec {
flag: "-pc_chebyshev_lambda_min",
key: "pc_chebyshev_lambda_min",
arity: Arity::One,
kind: ValueKind::Float,
doc: "lambda_min",
},
Spec {
flag: "-pc_chebyshev_lambda_max",
key: "pc_chebyshev_lambda_max",
arity: Arity::One,
kind: ValueKind::Float,
doc: "lambda_max",
},
Spec {
flag: "-pc_amg_levels",
key: "pc_amg_levels",
arity: Arity::One,
kind: ValueKind::UInt,
doc: "AMG levels",
},
Spec {
flag: "-pc_amg",
key: "pc_amg",
arity: Arity::Zero,
kind: ValueKind::Bool,
doc: "alias for -pc_type amg",
},
Spec {
flag: "-pc_amg_coarsen",
key: "pc_amg_coarsen",
arity: Arity::One,
kind: ValueKind::Str,
doc: "coarsen strategy alias for -pc_amg_coarsen_type",
},
Spec {
flag: "-pc_amg_strength_threshold",
key: "pc_amg_strength_threshold",
arity: Arity::One,
kind: ValueKind::Float,
doc: "strength threshold",
},
Spec {
flag: "-pc_amg_strength_type",
key: "pc_amg_strength_type",
arity: Arity::One,
kind: ValueKind::Str,
doc: "strength type: classical|symmetric|normalized",
},
Spec {
flag: "-pc_amg_nu_pre",
key: "pc_amg_nu_pre",
arity: Arity::One,
kind: ValueKind::UInt,
doc: "pre-smoothing iters",
},
Spec {
flag: "-pc_amg_nu_post",
key: "pc_amg_nu_post",
arity: Arity::One,
kind: ValueKind::UInt,
doc: "post-smoothing iters",
},
Spec {
flag: "-pc_amg_cycle_type",
key: "pc_amg_cycle_type",
arity: Arity::One,
kind: ValueKind::Str,
doc: "cycle type: v|w",
},
Spec {
flag: "-pc_amg_cycle_w_gamma",
key: "pc_amg_cycle_w_gamma",
arity: Arity::One,
kind: ValueKind::UInt,
doc: "W-cycle gamma factor",
},
Spec {
flag: "-pc_amg_coarse_threshold",
key: "pc_amg_coarse_threshold",
arity: Arity::One,
kind: ValueKind::UInt,
doc: "coarse threshold",
},
Spec {
flag: "-pc_amg_max_coarse_size",
key: "pc_amg_max_coarse_size",
arity: Arity::One,
kind: ValueKind::UInt,
doc: "max coarse size",
},
Spec {
flag: "-pc_amg_min_coarse_size",
key: "pc_amg_min_coarse_size",
arity: Arity::One,
kind: ValueKind::UInt,
doc: "min coarse size",
},
Spec {
flag: "-pc_amg_truncation_factor",
key: "pc_amg_truncation_factor",
arity: Arity::One,
kind: ValueKind::Float,
doc: "interp truncation",
},
Spec {
flag: "-pc_amg_max_elements_per_row",
key: "pc_amg_max_elements_per_row",
arity: Arity::One,
kind: ValueKind::UInt,
doc: "max elts/row",
},
Spec {
flag: "-pc_amg_interpolation_truncation",
key: "pc_amg_interpolation_truncation",
arity: Arity::One,
kind: ValueKind::Float,
doc: "interp truncation",
},
Spec {
flag: "-pc_amg_interp",
key: "pc_amg_interp",
arity: Arity::One,
kind: ValueKind::Str,
doc: "interpolation strategy alias for -pc_amg_interp_type",
},
Spec {
flag: "-pc_amg_coarsen_type",
key: "pc_amg_coarsen_type",
arity: Arity::One,
kind: ValueKind::Str,
doc: "rs|hmis|pmis|falgout",
},
Spec {
flag: "-pc_amg_interp_maxnnz",
key: "pc_amg_interp_maxnnz",
arity: Arity::One,
kind: ValueKind::UInt,
doc: "cap nnz per interp row",
},
Spec {
flag: "-pc_amg_interp_type",
key: "pc_amg_interp_type",
arity: Arity::One,
kind: ValueKind::Str,
doc: "classical|direct|...",
},
Spec {
flag: "-pc_amg_interp_variant",
key: "pc_amg_interp_variant",
arity: Arity::One,
kind: ValueKind::Str,
doc: "interpolation variant alias for -pc_amg_interp_type",
},
Spec {
flag: "-pc_amg_rap_truncation_factor",
key: "pc_amg_rap_truncation_factor",
arity: Arity::One,
kind: ValueKind::Float,
doc: "relative RAP truncation (alias for -pc_amg_truncation_factor)",
},
Spec {
flag: "-pc_amg_rap_truncation_abs",
key: "pc_amg_rap_truncation_abs",
arity: Arity::One,
kind: ValueKind::Float,
doc: "absolute RAP truncation",
},
Spec {
flag: "-pc_amg_rap_maxnnz",
key: "pc_amg_rap_maxnnz",
arity: Arity::One,
kind: ValueKind::UInt,
doc: "CAP number of RAP entries per row",
},
Spec {
flag: "-pc_amg_relax_type",
key: "pc_amg_relax_type",
arity: Arity::One,
kind: ValueKind::Str,
doc: "jacobi|gs|...|chebyshev",
},
Spec {
flag: "-pc_amg_smoother",
key: "pc_amg_smoother",
arity: Arity::One,
kind: ValueKind::Str,
doc: "AMG smoother (e.g. jacobi|gs|...)",
},
Spec {
flag: "-pc_amg_smoother_fine",
key: "pc_amg_smoother_fine",
arity: Arity::One,
kind: ValueKind::Str,
doc: "fine-level smoother override",
},
Spec {
flag: "-pc_amg_smoother_down",
key: "pc_amg_smoother_down",
arity: Arity::One,
kind: ValueKind::Str,
doc: "down-sweep smoother override",
},
Spec {
flag: "-pc_amg_smoother_up",
key: "pc_amg_smoother_up",
arity: Arity::One,
kind: ValueKind::Str,
doc: "up-sweep smoother override",
},
Spec {
flag: "-pc_amg_smoother_coarse",
key: "pc_amg_smoother_coarse",
arity: Arity::One,
kind: ValueKind::Str,
doc: "coarsest-level smoother override",
},
Spec {
flag: "-pc_amg_sweeps_fine",
key: "pc_amg_sweeps_fine",
arity: Arity::One,
kind: ValueKind::UInt,
doc: "fine-level sweep count",
},
Spec {
flag: "-pc_amg_sweeps_down",
key: "pc_amg_sweeps_down",
arity: Arity::One,
kind: ValueKind::UInt,
doc: "down-sweep count",
},
Spec {
flag: "-pc_amg_sweeps_up",
key: "pc_amg_sweeps_up",
arity: Arity::One,
kind: ValueKind::UInt,
doc: "up-sweep count",
},
Spec {
flag: "-pc_amg_sweeps_coarse",
key: "pc_amg_sweeps_coarse",
arity: Arity::One,
kind: ValueKind::UInt,
doc: "coarsest-level sweep count",
},
Spec {
flag: "-pc_amg_smoother_steps",
key: "pc_amg_smoother_steps",
arity: Arity::One,
kind: ValueKind::UInt,
doc: "set both pre/post smoothing sweeps",
},
Spec {
flag: "-pc_amg_smoother_omega",
key: "pc_amg_smoother_omega",
arity: Arity::One,
kind: ValueKind::Float,
doc: "Jacobi relaxation ω (0,2)",
},
Spec {
flag: "-pc_amg_coarse_solver",
key: "pc_amg_coarse_solver",
arity: Arity::One,
kind: ValueKind::Str,
doc: "coarse solve: cg|direct|ilu|smoother",
},
Spec {
flag: "-pc_amg_coarse_pc_type",
key: "pc_amg_coarse_solver",
arity: Arity::One,
kind: ValueKind::Str,
doc: "alias for -pc_amg_coarse_solver",
},
Spec {
flag: "-pc_amg_logging_level",
key: "pc_amg_logging_level",
arity: Arity::One,
kind: ValueKind::UInt,
doc: "0..2",
},
Spec {
flag: "-pc_amg_print_level",
key: "pc_amg_print_level",
arity: Arity::One,
kind: ValueKind::UInt,
doc: "0..2",
},
Spec {
flag: "-pc_amg_tolerance",
key: "pc_amg_tolerance",
arity: Arity::One,
kind: ValueKind::Float,
doc: "AMG tol (standalone)",
},
Spec {
flag: "-pc_amg_max_iterations",
key: "pc_amg_max_iterations",
arity: Arity::One,
kind: ValueKind::UInt,
doc: "AMG max iters",
},
Spec {
flag: "-pc_amg_min_iterations",
key: "pc_amg_min_iterations",
arity: Arity::One,
kind: ValueKind::UInt,
doc: "AMG min iters",
},
Spec {
flag: "-pc_amg_keep_transpose",
key: "pc_amg_keep_transpose",
arity: Arity::Zero,
kind: ValueKind::Bool,
doc: "keep P^T as R during RAP",
},
Spec {
flag: "-pc_amg_keep_pivot_in_rap",
key: "pc_amg_keep_pivot_in_rap",
arity: Arity::Zero,
kind: ValueKind::Bool,
doc: "always keep pivot entries while truncating RAP",
},
Spec {
flag: "-pc_amg_require_spd",
key: "pc_amg_require_spd",
arity: Arity::Zero,
kind: ValueKind::Bool,
doc: "enforce SPD-safe AMG for CG",
},
Spec {
flag: "-pc_amg_print_setup",
key: "pc_amg_print_setup",
arity: Arity::Zero,
kind: ValueKind::Bool,
doc: "print AMG setup tables",
},
Spec {
flag: "-pc_amg_dist_apply_mode",
key: "pc_amg_dist_apply_mode",
arity: Arity::One,
kind: ValueKind::Str,
doc: "distributed AMG apply mode: root or local",
},
Spec {
flag: "-pc_amg_dist_coarse_repartition",
key: "pc_amg_dist_coarse_repartition",
arity: Arity::One,
kind: ValueKind::Str,
doc: "distributed AMG coarse repartition policy: keep|uniform|root",
},
Spec {
flag: "-pc_amg_dist_repartition",
key: "pc_amg_dist_repartition",
arity: Arity::One,
kind: ValueKind::Str,
doc: "alias for -pc_amg_dist_coarse_repartition",
},
Spec {
flag: "-pc_amg_dist_coarse_solver_route",
key: "pc_amg_dist_coarse_solver_route",
arity: Arity::One,
kind: ValueKind::Str,
doc: "distributed AMG coarse solver route: auto|root|local|superlu_dist",
},
Spec {
flag: "-pc_amg_dist_instrumentation",
key: "pc_amg_dist_instrumentation",
arity: Arity::Zero,
kind: ValueKind::Bool,
doc: "enable distributed AMG apply instrumentation",
},
Spec {
flag: "-pc_amg_dist_coarse_ghost_scale",
key: "pc_amg_dist_coarse_ghost_scale",
arity: Arity::One,
kind: ValueKind::Float,
doc: "halo-based coarse correction scale for local prototype",
},
Spec {
flag: "-pc_amg_ieee_checks",
key: "pc_amg_ieee_checks",
arity: Arity::Zero,
kind: ValueKind::Bool,
doc: "enable IEEE checks",
},
Spec {
flag: "-pc_amg_optimize_workspace",
key: "pc_amg_optimize_workspace",
arity: Arity::Zero,
kind: ValueKind::Bool,
doc: "optimize workspace",
},
Spec {
flag: "-pc_fieldsplit_block_sizes",
key: "pc_fieldsplit_block_sizes",
arity: Arity::One,
kind: ValueKind::Str,
doc: "comma-separated block sizes",
},
Spec {
flag: "-pc_fieldsplit_child_pc_type",
key: "pc_fieldsplit_child_pc_type",
arity: Arity::One,
kind: ValueKind::Str,
doc: "child PC type for each split",
},
Spec {
flag: "-pc_fieldsplit_type",
key: "pc_fieldsplit_type",
arity: Arity::One,
kind: ValueKind::Str,
doc: "fieldsplit mode hint (additive/multiplicative/symmetric/schur)",
},
Spec {
flag: "-pc_fieldsplit_strategy",
key: "pc_fieldsplit_strategy",
arity: Arity::One,
kind: ValueKind::Str,
doc: "fieldsplit split strategy alias (additive/multiplicative/symmetric/schur)",
},
Spec {
flag: "-pc_fieldsplit_schur_fact_type",
key: "pc_fieldsplit_schur_fact_type",
arity: Arity::One,
kind: ValueKind::Str,
doc: "Schur factorization type (diag/lower/upper/full)",
},
Spec {
flag: "-pc_fieldsplit_schur_precondition",
key: "pc_fieldsplit_schur_precondition",
arity: Arity::One,
kind: ValueKind::Str,
doc: "Schur preconditioning strategy (self/diag/a11/full/full_matfree/user)",
},
Spec {
flag: "-pc_fieldsplit_schur_approx",
key: "pc_fieldsplit_schur_approx",
arity: Arity::One,
kind: ValueKind::Str,
doc: "Schur complement approximation workflow (diag/full)",
},
Spec {
flag: "-pc_fieldsplit_comm_schedule",
key: "pc_fieldsplit_comm_schedule",
arity: Arity::One,
kind: ValueKind::Str,
doc: "per-split communication schedule (auto/local_first/exchange_first)",
},
Spec {
flag: "-pc_fieldsplit_extraction",
key: "pc_fieldsplit_extraction",
arity: Arity::One,
kind: ValueKind::Str,
doc: "fieldsplit block extraction strategy (extract/cached/zero_copy)",
},
Spec {
flag: "-pc_shell_name",
key: "pc_shell_name",
arity: Arity::One,
kind: ValueKind::Str,
doc: "registered shell callback name (legacy alias for -pc_shell_apply)",
},
Spec {
flag: "-pc_shell_apply",
key: "pc_shell_apply",
arity: Arity::One,
kind: ValueKind::Str,
doc: "registered shell apply hook name",
},
Spec {
flag: "-pc_shell_apply_transpose",
key: "pc_shell_apply_transpose",
arity: Arity::One,
kind: ValueKind::Str,
doc: "registered shell transpose apply hook name",
},
Spec {
flag: "-pc_shell_apply_conjugate_transpose",
key: "pc_shell_apply_conjugate_transpose",
arity: Arity::One,
kind: ValueKind::Str,
doc: "registered shell conjugate-transpose apply hook name",
},
Spec {
flag: "-pc_shell_apply_symmetric",
key: "pc_shell_apply_symmetric",
arity: Arity::One,
kind: ValueKind::Str,
doc: "registered shell symmetric apply hook name",
},
Spec {
flag: "-pc_shell_apply_symmetric_left",
key: "pc_shell_apply_symmetric_left",
arity: Arity::One,
kind: ValueKind::Str,
doc: "registered shell symmetric-left apply hook name",
},
Spec {
flag: "-pc_shell_apply_symmetric_right",
key: "pc_shell_apply_symmetric_right",
arity: Arity::One,
kind: ValueKind::Str,
doc: "registered shell symmetric-right apply hook name",
},
Spec {
flag: "-pc_shell_setup",
key: "pc_shell_setup",
arity: Arity::One,
kind: ValueKind::Str,
doc: "registered shell setup hook name",
},
Spec {
flag: "-pc_shell_destroy",
key: "pc_shell_destroy",
arity: Arity::One,
kind: ValueKind::Str,
doc: "registered shell destroy hook name",
},
Spec {
flag: "-pc_shell_context",
key: "pc_shell_context",
arity: Arity::One,
kind: ValueKind::Str,
doc: "registered shell context binding",
},
Spec {
flag: "-pc_ksp_type",
key: "pc_ksp_type",
arity: Arity::One,
kind: ValueKind::Str,
doc: "inner KSP type for pc_type=ksp",
},
Spec {
flag: "-pc_ksp_ksp_type",
key: "pc_ksp_type",
arity: Arity::One,
kind: ValueKind::Str,
doc: "legacy alias for inner KSP type for pc_type=ksp",
},
Spec {
flag: "-pc_ksp_pc_type",
key: "pc_ksp_pc_type",
arity: Arity::One,
kind: ValueKind::Str,
doc: "inner PC type for pc_type=ksp",
},
Spec {
flag: "-pc_ksp_maxits",
key: "pc_ksp_maxits",
arity: Arity::One,
kind: ValueKind::UInt,
doc: "inner KSP max iterations",
},
Spec {
flag: "-pc_ksp_rtol",
key: "pc_ksp_rtol",
arity: Arity::One,
kind: ValueKind::Float,
doc: "inner KSP relative tolerance",
},
Spec {
flag: "-pc_ksp_atol",
key: "pc_ksp_atol",
arity: Arity::One,
kind: ValueKind::Float,
doc: "inner KSP absolute tolerance",
},
Spec {
flag: "-pc_ksp_dtol",
key: "pc_ksp_dtol",
arity: Arity::One,
kind: ValueKind::Float,
doc: "inner KSP divergence tolerance",
},
Spec {
flag: "-pc_ksp_restart",
key: "pc_ksp_restart",
arity: Arity::One,
kind: ValueKind::UInt,
doc: "inner KSP restart",
},
Spec {
flag: "-pc_ksp_gmres_restart",
key: "pc_ksp_gmres_restart",
arity: Arity::One,
kind: ValueKind::UInt,
doc: "inner GMRES restart",
},
Spec {
flag: "-pc_ksp_fgmres_restart",
key: "pc_ksp_fgmres_restart",
arity: Arity::One,
kind: ValueKind::UInt,
doc: "inner FGMRES restart",
},
Spec {
flag: "-pc_ksp_gmres_orthog",
key: "pc_ksp_gmres_orthog",
arity: Arity::One,
kind: ValueKind::Str,
doc: "inner GMRES orthogonalization method",
},
Spec {
flag: "-pc_ksp_fgmres_orthog",
key: "pc_ksp_fgmres_orthog",
arity: Arity::One,
kind: ValueKind::Str,
doc: "inner FGMRES orthog: cgs|classical|cgs_refined",
},
Spec {
flag: "-pc_ksp_monitor_rank0",
key: "pc_ksp_monitor_rank0",
arity: Arity::One,
kind: ValueKind::Bool,
doc: "inner KSP monitors rank0-only",
},
Spec {
flag: "-pc_ksp_monitor_policy",
key: "pc_ksp_monitor_policy",
arity: Arity::One,
kind: ValueKind::Str,
doc: "inner KSP monitor policy (all|rank0)",
},
Spec {
flag: "-pc_ksp_inner_tol_policy",
key: "pc_ksp_inner_tol_policy",
arity: Arity::One,
kind: ValueKind::Str,
doc: "inner KSP convergence policy (strict|allow_maxits)",
},
Spec {
flag: "-pc_ksp_propagate_converged_reason",
key: "pc_ksp_propagate_converged_reason",
arity: Arity::One,
kind: ValueKind::Bool,
doc: "propagate inner KSP converged reason to outer nested-pc failure",
},
Spec {
flag: "-pc_ksp_allow_maxits",
key: "pc_ksp_allow_maxits",
arity: Arity::One,
kind: ValueKind::Bool,
doc: "treat inner KSP_DIVERGED_ITS as acceptable for nested pc_type=ksp",
},
Spec {
flag: "-pc_ksp_reduction",
key: "pc_ksp_reduction",
arity: Arity::One,
kind: ValueKind::Str,
doc: "inner KSP reduction mode",
},
Spec {
flag: "-pc_ksp_reproducible",
key: "pc_ksp_reproducible",
arity: Arity::One,
kind: ValueKind::Bool,
doc: "inner KSP reproducibility flag",
},
Spec {
flag: "-pc_ksp_threads",
key: "pc_ksp_threads",
arity: Arity::One,
kind: ValueKind::UInt,
doc: "inner KSP rayon thread count",
},
Spec {
flag: "-pc_ksp_threads_mode",
key: "pc_ksp_threads_mode",
arity: Arity::One,
kind: ValueKind::Str,
doc: "inner KSP thread policy",
},
Spec {
flag: "-pc_ksp_pc_side",
key: "pc_ksp_pc_side",
arity: Arity::One,
kind: ValueKind::Str,
doc: "inner KSP preconditioning side",
},
Spec {
flag: "-pc_mg_levels",
key: "pc_mg_levels",
arity: Arity::One,
kind: ValueKind::UInt,
doc: "number of MG levels",
},
Spec {
flag: "-pc_mg_cycle_type",
key: "pc_mg_cycle_type",
arity: Arity::One,
kind: ValueKind::Str,
doc: "MG cycle type (v|w)",
},
Spec {
flag: "-pc_mg_smoother",
key: "pc_mg_smoother",
arity: Arity::One,
kind: ValueKind::Str,
doc: "MG smoother hint",
},
Spec {
flag: "-pc_mg_smoother_steps",
key: "pc_mg_smoother_steps",
arity: Arity::One,
kind: ValueKind::UInt,
doc: "MG smoother sweeps",
},
Spec {
flag: "-pc_mg_coarsen_type",
key: "pc_mg_coarsen_type",
arity: Arity::One,
kind: ValueKind::Str,
doc: "MG coarsening strategy (injection|linear|aggregation)",
},
Spec {
flag: "-pc_mg_interpolation_type",
key: "pc_mg_interpolation_type",
arity: Arity::One,
kind: ValueKind::Str,
doc: "MG prolongation type (injection|linear)",
},
Spec {
flag: "-pc_mg_restriction_type",
key: "pc_mg_restriction_type",
arity: Arity::One,
kind: ValueKind::Str,
doc: "MG restriction type (injection|full_weighting)",
},
Spec {
flag: "-pc_mg_coarse_pc_type",
key: "pc_mg_coarse_pc_type",
arity: Arity::One,
kind: ValueKind::Str,
doc: "MG coarse level PC type",
},
Spec {
flag: "-pc_mg_coarse_ksp_type",
key: "pc_mg_coarse_ksp_type",
arity: Arity::One,
kind: ValueKind::Str,
doc: "MG coarse level KSP type (enables nested KSP-as-PC)",
},
Spec {
flag: "-pc_mg_coarse_ksp_maxits",
key: "pc_mg_coarse_ksp_maxits",
arity: Arity::One,
kind: ValueKind::UInt,
doc: "MG coarse KSP max iterations",
},
Spec {
flag: "-pc_mg_coarse_ksp_rtol",
key: "pc_mg_coarse_ksp_rtol",
arity: Arity::One,
kind: ValueKind::Float,
doc: "MG coarse KSP relative tolerance",
},
Spec {
flag: "-pc_mg_levels_policy",
key: "pc_mg_levels_policy",
arity: Arity::One,
kind: ValueKind::Str,
doc: "semicolon-separated MG level policies; level-scoped options also accepted as -pc_mg_levels_<i>_* or -pc_mg_level_<i>_*",
},
Spec {
flag: "-pc_mg_level_policies",
key: "pc_mg_level_policies",
arity: Arity::One,
kind: ValueKind::Str,
doc: "alias for -pc_mg_levels_policy",
},
Spec {
flag: "-pc_bddc_coarse_ksp_type",
key: "pc_bddc_coarse_ksp_type",
arity: Arity::One,
kind: ValueKind::Str,
doc: "BDDC coarse KSP type (placeholder)",
},
Spec {
flag: "-pc_bddc_coarse_pc_type",
key: "pc_bddc_coarse_pc_type",
arity: Arity::One,
kind: ValueKind::Str,
doc: "BDDC coarse PC type (placeholder)",
},
Spec {
flag: "-pc_bddc_use_vertices",
key: "pc_bddc_use_vertices",
arity: Arity::Zero,
kind: ValueKind::Bool,
doc: "BDDC vertex constraints (placeholder)",
},
Spec {
flag: "-pc_bddc_constraint_selection",
key: "pc_bddc_constraint_selection",
arity: Arity::One,
kind: ValueKind::Str,
doc: "BDDC primal constraints: interface|vertices|vertices_and_interface",
},
Spec {
flag: "-pc_bddc_scaling",
key: "pc_bddc_scaling",
arity: Arity::One,
kind: ValueKind::Str,
doc: "BDDC interface scaling: uniform|deluxe_like",
},
Spec {
flag: "-pc_gamg_type",
key: "pc_gamg_type",
arity: Arity::One,
kind: ValueKind::Str,
doc: "GAMG type (agg|classical)",
},
Spec {
flag: "-pc_gamg_threshold",
key: "pc_gamg_threshold",
arity: Arity::One,
kind: ValueKind::Float,
doc: "GAMG strength threshold (0,1]",
},
Spec {
flag: "-pc_gamg_levels",
key: "pc_gamg_levels",
arity: Arity::One,
kind: ValueKind::UInt,
doc: "GAMG levels (max hierarchy depth)",
},
Spec {
flag: "-pc_gamg_coarsen_type",
key: "pc_gamg_coarsen_type",
arity: Arity::One,
kind: ValueKind::Str,
doc: "GAMG coarsening type (rs|hmis|pmis|falgout)",
},
Spec {
flag: "-pc_gamg_interp_type",
key: "pc_gamg_interp_type",
arity: Arity::One,
kind: ValueKind::Str,
doc: "GAMG interpolation type (classical|direct|multipass|extended|standard|he)",
},
Spec {
flag: "-pc_gamg_aggressive_levels",
key: "pc_gamg_aggressive_levels",
arity: Arity::One,
kind: ValueKind::UInt,
doc: "GAMG aggressive coarsening levels",
},
Spec {
flag: "-pc_gamg_aggressive_mis_k",
key: "pc_gamg_aggressive_mis_k",
arity: Arity::One,
kind: ValueKind::UInt,
doc: "GAMG aggressive coarsening MIS neighborhood depth",
},
Spec {
flag: "-pc_gamg_levels_policy",
key: "pc_gamg_levels_policy",
arity: Arity::One,
kind: ValueKind::Str,
doc: "semicolon-separated GAMG level policies; level-scoped options also accepted as -pc_gamg_levels_<i>_* or -pc_gamg_level_<i>_*",
},
Spec {
flag: "-pc_gamg_level_policies",
key: "pc_gamg_level_policies",
arity: Arity::One,
kind: ValueKind::Str,
doc: "alias for -pc_gamg_levels_policy",
},
Spec {
flag: "-pc_gamg_repartition",
key: "pc_gamg_repartition",
arity: Arity::One,
kind: ValueKind::Str,
doc: "alias for -pc_amg_dist_coarse_repartition",
},
Spec {
flag: "-pc_gamg_coarse_solver_route",
key: "pc_gamg_coarse_solver_route",
arity: Arity::One,
kind: ValueKind::Str,
doc: "alias for -pc_amg_dist_coarse_solver_route",
},
Spec {
flag: "-pc_mg_repartition",
key: "pc_mg_repartition",
arity: Arity::One,
kind: ValueKind::Str,
doc: "alias for -pc_amg_dist_coarse_repartition",
},
Spec {
flag: "-pc_mg_coarse_solver_route",
key: "pc_mg_coarse_solver_route",
arity: Arity::One,
kind: ValueKind::Str,
doc: "alias for -pc_amg_dist_coarse_solver_route",
},
Spec {
flag: "-pc_mg_dist_coarse_policy",
key: "pc_mg_dist_coarse_policy",
arity: Arity::One,
kind: ValueKind::Str,
doc: "alias for -pc_amg_dist_apply_mode",
},
Spec {
flag: "-pc_chain",
key: "pc_chain",
arity: Arity::One,
kind: ValueKind::Str,
doc: "comma-separated chain",
},
Spec {
flag: "-pc_composite_type",
key: "pc_composite_type",
arity: Arity::One,
kind: ValueKind::Str,
doc: "composite mode: multiplicative|additive",
},
Spec {
flag: "-pc_composite_prefixes",
key: "pc_composite_prefixes",
arity: Arity::One,
kind: ValueKind::Str,
doc: "comma-separated per-stage prefixes",
},
Spec {
flag: "-pc_fieldsplit_prefixes",
key: "pc_fieldsplit_prefixes",
arity: Arity::One,
kind: ValueKind::Str,
doc: "comma-separated per-field prefixes",
},
Spec {
flag: "-pc_sor_omega",
key: "pc_sor_omega",
arity: Arity::One,
kind: ValueKind::Float,
doc: "SOR relaxation parameter ω ∈ (0,2)",
},
Spec {
flag: "-pc_sor_sweeps",
key: "pc_sor_sweeps",
arity: Arity::One,
kind: ValueKind::UInt,
doc: "number of SOR sweeps",
},
Spec {
flag: "-pc_sor_symmetric",
key: "pc_sor_symmetric",
arity: Arity::Zero,
kind: ValueKind::Bool,
doc: "use symmetric SOR (SSOR)",
},
Spec {
flag: "-pc_sor_mat_side",
key: "pc_sor_mat_side",
arity: Arity::One,
kind: ValueKind::Str,
doc: "local sweep orientation: lower|upper|symmetric|eisenstat",
},
Spec {
flag: "-pc_reuse_policy",
key: "pc_reuse_policy",
arity: Arity::One,
kind: ValueKind::Str,
doc: "never|reuse_numeric|auto",
},
Spec {
flag: "-pc_ilu_type",
key: "pc_ilu_type",
arity: Arity::One,
kind: ValueKind::Str,
doc: "ilu0|iluk|ilut|...",
},
Spec {
flag: "-pc_ilu_level_of_fill",
key: "pc_ilu_level_of_fill",
arity: Arity::One,
kind: ValueKind::UInt,
doc: "ILU(k) level",
},
Spec {
flag: "-pc_ilu_max_fill_per_row",
key: "pc_ilu_max_fill_per_row",
arity: Arity::One,
kind: ValueKind::UInt,
doc: "max nnz/row",
},
Spec {
flag: "-pc_ilu_offdiag_drop_tolerance",
key: "pc_ilu_offdiag_drop_tolerance",
arity: Arity::One,
kind: ValueKind::Float,
doc: "offdiag drop tol",
},
Spec {
flag: "-pc_ilu_schur_drop_tolerance",
key: "pc_ilu_schur_drop_tolerance",
arity: Arity::One,
kind: ValueKind::Float,
doc: "Schur drop tol",
},
Spec {
flag: "-pc_ilu_reordering_type",
key: "pc_ilu_reordering_type",
arity: Arity::One,
kind: ValueKind::Str,
doc: "none|rcm|amd|natural",
},
Spec {
flag: "-pc_ilu_triangular_solve",
key: "pc_ilu_triangular_solve",
arity: Arity::One,
kind: ValueKind::Str,
doc: "exact|iterative",
},
Spec {
flag: "-pc_ilu_lower_jacobi_iters",
key: "pc_ilu_lower_jacobi_iters",
arity: Arity::One,
kind: ValueKind::UInt,
doc: "lower Jacobi iters",
},
Spec {
flag: "-pc_ilu_upper_jacobi_iters",
key: "pc_ilu_upper_jacobi_iters",
arity: Arity::One,
kind: ValueKind::UInt,
doc: "upper Jacobi iters",
},
Spec {
flag: "-pc_ilu_tolerance",
key: "pc_ilu_tolerance",
arity: Arity::One,
kind: ValueKind::Float,
doc: "iterative solve tol",
},
Spec {
flag: "-pc_ilu_max_iterations",
key: "pc_ilu_max_iterations",
arity: Arity::One,
kind: ValueKind::UInt,
doc: "iterative solve max iters",
},
Spec {
flag: "-pc_ilu_logging_level",
key: "pc_ilu_logging_level",
arity: Arity::One,
kind: ValueKind::UInt,
doc: "0..2",
},
Spec {
flag: "-pc_ilu_print_level",
key: "pc_ilu_print_level",
arity: Arity::One,
kind: ValueKind::UInt,
doc: "0..2",
},
Spec {
flag: "-pc_ilu_ieee_checks",
key: "pc_ilu_ieee_checks",
arity: Arity::Zero,
kind: ValueKind::Bool,
doc: "enable IEEE checks",
},
Spec {
flag: "-pc_ilu_pivot_monitoring",
key: "pc_ilu_pivot_monitoring",
arity: Arity::Zero,
kind: ValueKind::Bool,
doc: "monitor pivots",
},
Spec {
flag: "-pc_ilu_optimize_workspace",
key: "pc_ilu_optimize_workspace",
arity: Arity::Zero,
kind: ValueKind::Bool,
doc: "optimize workspace",
},
Spec {
flag: "-pc_ilu_pivot_threshold",
key: "pc_ilu_pivot_threshold",
arity: Arity::One,
kind: ValueKind::Float,
doc: "pivot threshold",
},
Spec {
flag: "-pc_ilu_parallel_factorization",
key: "pc_ilu_parallel_factorization",
arity: Arity::Zero,
kind: ValueKind::Bool,
doc: "enable ILU parallel factorization",
},
Spec {
flag: "-pc_ilu_parallel_trisolve",
key: "pc_ilu_parallel_trisolve",
arity: Arity::Zero,
kind: ValueKind::Bool,
doc: "enable ILU parallel triangular solves",
},
Spec {
flag: "-pc_ilu_par_factor",
key: "pc_ilu_par_factor",
arity: Arity::One,
kind: ValueKind::Str,
doc: "parallel ILU factorization mode: none|block|parilu",
},
Spec {
flag: "-pc_ilu_parilu_iters",
key: "pc_ilu_parilu_iters",
arity: Arity::One,
kind: ValueKind::UInt,
doc: "maximum ParILU sweeps",
},
Spec {
flag: "-pc_ilu_parilu_min_iters",
key: "pc_ilu_parilu_min_iters",
arity: Arity::One,
kind: ValueKind::UInt,
doc: "minimum ParILU sweeps before convergence check",
},
Spec {
flag: "-pc_ilu_parilu_tol",
key: "pc_ilu_parilu_tol",
arity: Arity::One,
kind: ValueKind::Float,
doc: "ParILU residual tolerance",
},
Spec {
flag: "-pc_ilu_parilu_omega",
key: "pc_ilu_parilu_omega",
arity: Arity::One,
kind: ValueKind::Float,
doc: "ParILU relaxation factor",
},
Spec {
flag: "-pc_ilu_parallel_chunk_size",
key: "pc_ilu_parallel_chunk_size",
arity: Arity::One,
kind: ValueKind::UInt,
doc: "chunk size for ILU parallel work",
},
Spec {
flag: "-pc_ilu_block_size",
key: "pc_ilu_block_size",
arity: Arity::One,
kind: ValueKind::UInt,
doc: "block size for ILU block factorization",
},
Spec {
flag: "-pc_ilu_distributed",
key: "pc_ilu_distributed",
arity: Arity::Zero,
kind: ValueKind::Bool,
doc: "hint ILU can run in distributed mode",
},
Spec {
flag: "-pc_ilu_pivot_mode",
key: "pc_ilu_pivot_mode",
arity: Arity::One,
kind: ValueKind::Str,
doc: "pivot mode: strict|additive|threshold|pivoting",
},
Spec {
flag: "-pc_ilu_pivot_scale",
key: "pc_ilu_pivot_scale",
arity: Arity::One,
kind: ValueKind::Str,
doc: "pivot scale: maxdiaga|localdiaga|rowinf|rowgershgorin|runningmaxu",
},
Spec {
flag: "-pc_ilu_pivot_tau",
key: "pc_ilu_pivot_tau",
arity: Arity::One,
kind: ValueKind::Float,
doc: "pivot threshold multiplier",
},
Spec {
flag: "-pc_superlu_pivot_threshold",
key: "pc_superlu_pivot_threshold",
arity: Arity::One,
kind: ValueKind::Float,
doc: "pivot threshold (0..1)",
},
Spec {
flag: "-pc_superlu_replace_tiny_pivot",
key: "pc_superlu_replace_tiny_pivot",
arity: Arity::Zero,
kind: ValueKind::Bool,
doc: "replace tiny pivots",
},
Spec {
flag: "-pc_superlu_print_level",
key: "pc_superlu_print_level",
arity: Arity::One,
kind: ValueKind::UInt,
doc: "0..2",
},
Spec {
flag: "-pc_superlu_process_grid",
key: "pc_superlu_process_grid",
arity: Arity::Two,
kind: ValueKind::Pair("uint", "uint"),
doc: "grid rows cols",
},
Spec {
flag: "-pc_superlu_column_permutation",
key: "pc_superlu_column_permutation",
arity: Arity::One,
kind: ValueKind::Str,
doc: "col perm strategy",
},
Spec {
flag: "-pc_superlu_row_permutation",
key: "pc_superlu_row_permutation",
arity: Arity::One,
kind: ValueKind::Str,
doc: "row perm strategy",
},
Spec {
flag: "-pc_superlu_iterative_refinement",
key: "pc_superlu_iterative_refinement",
arity: Arity::One,
kind: ValueKind::Str,
doc: "iterative refinement",
},
Spec {
flag: "-pc_superlu_static_pivoting",
key: "pc_superlu_static_pivoting",
arity: Arity::Zero,
kind: ValueKind::Bool,
doc: "static pivoting",
},
Spec {
flag: "-pc_superlu_panel_size",
key: "pc_superlu_panel_size",
arity: Arity::One,
kind: ValueKind::UInt,
doc: "panel size",
},
Spec {
flag: "-pc_superlu_enable_3d_factorization",
key: "pc_superlu_enable_3d_factorization",
arity: Arity::Zero,
kind: ValueKind::Bool,
doc: "enable 3D",
},
Spec {
flag: "-pc_superlu_process_grid_3d_depth",
key: "pc_superlu_process_grid_3d_depth",
arity: Arity::One,
kind: ValueKind::UInt,
doc: "3D depth",
},
Spec {
flag: "-pc_superlu_memory_tradeoff_factor",
key: "pc_superlu_memory_tradeoff_factor",
arity: Arity::One,
kind: ValueKind::Float,
doc: "memory tradeoff",
},
Spec {
flag: "-pc_superlu_max_concurrent_panels",
key: "pc_superlu_max_concurrent_panels",
arity: Arity::One,
kind: ValueKind::UInt,
doc: "max panels",
},
Spec {
flag: "-pc_superlu_async_panel_updates",
key: "pc_superlu_async_panel_updates",
arity: Arity::Zero,
kind: ValueKind::Bool,
doc: "async panels",
},
Spec {
flag: "-pc_superlu_workspace_memory_limit",
key: "pc_superlu_workspace_memory_limit",
arity: Arity::One,
kind: ValueKind::UInt,
doc: "MB limit",
},
Spec {
flag: "-pc_superlu_aggressive_memory_reuse",
key: "pc_superlu_aggressive_memory_reuse",
arity: Arity::Zero,
kind: ValueKind::Bool,
doc: "aggressive reuse",
},
Spec {
flag: "-pc_superlu_preallocation_strategy",
key: "pc_superlu_preallocation_strategy",
arity: Arity::One,
kind: ValueKind::Str,
doc: "none|matrix_size|...",
},
];
pub fn registry() -> Registry {
Registry::new(SPECS)
}