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_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_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: mgs|cgs",
},
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_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 interval for pipelined PCG",
},
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: "-pc_type",
key: "pc_type",
arity: Arity::One,
kind: ValueKind::Str,
doc: "jacobi, ilu, amg, ...",
},
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 ILU variant for block Jacobi: ilu | ilut | ilutp",
},
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_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|ilut|ilutp",
},
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_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_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_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_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_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_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_chain",
key: "pc_chain",
arity: Arity::One,
kind: ValueKind::Str,
doc: "comma-separated chain",
},
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)
}