koblas

F64SparseLuAdapter

Shared routing for a host sparse LU binding, the counterpart of the dense host adapters.

Below the gate a request is answered by the portable factorization, since crossing into a native library costs more than the work saves on a small problem. The gate is the shared factorization threshold, read here as a count of stored entries rather than as a dimension, because that is what sparse work scales with: an n of a thousand with a diagonal and little else is smaller work than a dense hundred.

Parameters

factorizeMin

stored entries from which this binding factorizes natively, or null for the platform default.

Inheritors

BasicluSparseLu
KluSparseLu
UmfpackSparseLu

Properties

isAvailable

open override val isAvailable: Boolean(source)

Whether this backend can do work on this host. koblas's own implementations always can, so the default is true; a binding reports whether the library it calls resolved.

Each half answers for itself, since a host can provide CBLAS without LAPACKE, or OpenBLAS without UMFPACK. Registration does not consult this: koblas registers its UMFPACK binding on a bare library lookup and lets the binding fall back per call, so a registered backend may still report false here. Read it to report what a host offers, or before installing one explicitly.

isPortable

open override val isPortable: Boolean(source)

Whether this is koblas's own implementation rather than a binding to a host library. The compiled-in SIMD kernels are portable however fast they are; only something calling out counts as accelerated.

Link copied to clipboard
abstract val name: String

A short backend identifier for diagnostics (e.g. "reference").

Link copied to clipboard
open val priority: Int

Relative preference among the backends offered for one half (F64Blas, F64Decompositions, F64Kernels or a sparse counterpart). registerBackend picks the highest; the portable reference is 0.

Link copied to clipboard

Whether factorBasis answers with a factorization that updates its factors in place. When false a replacement costs a factorization, so a caller pacing its own refactorizations has nothing left to pace.

Functions

factor

override fun factor(a: F64SparseMatrix, equilibrate: Boolean = false, dropTolerance: Double = NO_DROP): F64SparseFactorization(source)

Factorize the square a into something solvable. A singular matrix comes back as a factorization reporting singular rather than as an exception, with a failedAt counting elimination steps rather than naming a column: the step that fails is the one with no acceptable pivot left, so there is no column of a to attribute it to.

Parameters

a

the square matrix to factorize.

equilibrate

scale rows by a power of two first; the solves undo it.

dropTolerance

discard produced entries this far below the largest magnitude, giving an incomplete factorization.

Link copied to clipboard

Factor a simplex basis for column replacements.

Link copied to clipboard
open fun refactor(previous: F64SparseFactorization, a: F64SparseMatrix, equilibrate: Boolean = false, dropTolerance: Double = NO_DROP): F64SparseFactorization

Factor a, reusing compatible state from previous when this backend can. The returned factorization supersedes previous, which must not be solved after this call. Backends that cannot reuse it answer as factor would.

Link copied to clipboard
open fun solve(f: F64SparseFactorization, b: DoubleArray, transpose: Boolean = false): DoubleArray

solveInto into a fresh vector.

Link copied to clipboard
open fun solveInto(f: F64SparseFactorization, b: DoubleArray, out: DoubleArray, transpose: Boolean = false, workspace: Workspace? = null): DoubleArray

Solve A·x = b from f into out, Aᵀ·x = b when transpose. The work belongs to the factorization; this is here so the seam reads the same from the sparse side as com.eignex.koblas .dense.F64Decompositions.solveInto does from the dense one.