Module: Ignis::Solver

Defined in:
lib/nvruby/solver.rb,
lib/nvruby/solver/lu.rb,
lib/nvruby/solver/svd.rb,
lib/nvruby/solver/eigen.rb,
lib/nvruby/solver/amgx_config.rb,
lib/nvruby/solver/amgx_solver.rb,
lib/nvruby/solver/amgx_bindings.rb,
lib/nvruby/solver/sparse_solver.rb,
lib/nvruby/solver/cudss_bindings.rb,
lib/nvruby/solver/cusolver_bindings.rb

Defined Under Namespace

Modules: AMGXBindings, CuDSSBindings, CuSolverBindings, Eigen, LU, SVD Classes: AMGXConfig, AMGXError, AMGXSolver, CuDSSError, LUSolver, SparseSolver, StateError

Class Method Summary collapse

Class Method Details

.available?Boolean

Check if cuSOLVER is available

Returns:

  • (Boolean)


108
109
110
111
112
113
# File 'lib/nvruby/solver.rb', line 108

def available?
  CuSolverBindings.ensure_loaded!
  true
rescue StandardError
  false
end

.cond(matrix) ⇒ Float

Condition number via SVD

Parameters:

  • matrix (NvArray)

    Input matrix

Returns:

  • (Float)

    Condition number



78
79
80
# File 'lib/nvruby/solver.rb', line 78

def cond(matrix)
  SVD.cond(matrix)
end

.eig(matrix) ⇒ Hash

Eigenvalue decomposition of general matrix

Parameters:

  • matrix (NvArray)

    General square matrix

Returns:

  • (Hash)

    { eigenvalues:, eigenvectors: }



63
64
65
# File 'lib/nvruby/solver.rb', line 63

def eig(matrix)
  Eigen.eig(matrix)
end

.eigh(matrix, eigenvectors: true) ⇒ Hash

Eigenvalue decomposition of symmetric/Hermitian matrix

Parameters:

  • matrix (NvArray)

    Symmetric/Hermitian matrix

  • eigenvectors (Boolean) (defaults to: true)

    Compute eigenvectors

Returns:

  • (Hash)

    { eigenvalues:, eigenvectors: }



49
50
51
# File 'lib/nvruby/solver.rb', line 49

def eigh(matrix, eigenvectors: true)
  Eigen.eigh(matrix, eigenvectors: eigenvectors)
end

.eigvalsh(matrix) ⇒ NvArray

Eigenvalues of symmetric/Hermitian matrix

Parameters:

  • matrix (NvArray)

    Symmetric/Hermitian matrix

Returns:



56
57
58
# File 'lib/nvruby/solver.rb', line 56

def eigvalsh(matrix)
  Eigen.eigvalsh(matrix)
end

.finalize!void

This method returns an undefined value.

Finalize cuSOLVER (release resources)



117
118
119
# File 'lib/nvruby/solver.rb', line 117

def finalize!
  CuSolverBindings.finalize!
end

.lu(matrix) ⇒ Hash

LU decomposition with partial pivoting

Parameters:

  • matrix (NvArray)

    Input matrix (m x n)

Returns:

  • (Hash)

    { lu:, pivot:, info: }



26
27
28
# File 'lib/nvruby/solver.rb', line 26

def lu(matrix)
  LU.getrf(matrix)
end

.lu_solver(matrix) ⇒ LUSolver

Create an LU solver for repeated solves

Parameters:

  • matrix (NvArray)

    Coefficient matrix

Returns:



85
86
87
# File 'lib/nvruby/solver.rb', line 85

def lu_solver(matrix)
  LUSolver.new(matrix)
end

.matrix_rank(matrix, tol: nil) ⇒ Integer

Matrix rank via SVD

Parameters:

  • matrix (NvArray)

    Input matrix

  • tol (Float, nil) (defaults to: nil)

    Tolerance

Returns:

  • (Integer)

    Numerical rank



71
72
73
# File 'lib/nvruby/solver.rb', line 71

def matrix_rank(matrix, tol: nil)
  SVD.rank(matrix, tol: tol)
end

.solve(a, b) ⇒ NvArray

Solve linear system Ax = b

Parameters:

  • a (NvArray)

    Coefficient matrix (n x n)

  • b (NvArray)

    Right-hand side (n x nrhs)

Returns:



19
20
21
# File 'lib/nvruby/solver.rb', line 19

def solve(a, b)
  LU.solve(a, b)
end

.sparse_solve(sparse_matrix, b, matrix_type: :general) ⇒ NvArray

Solve sparse linear system Ax = b using cuDSS

Parameters:

  • sparse_matrix (Sparse::SparseMatrix)

    Sparse coefficient matrix in CSR format

  • b (NvArray)

    Right-hand side vector/matrix

  • matrix_type (Symbol) (defaults to: :general)

    Type of matrix (:general, :symmetric, :spd)

Returns:



94
95
96
# File 'lib/nvruby/solver.rb', line 94

def sparse_solve(sparse_matrix, b, matrix_type: :general)
  SparseSolver.solve(sparse_matrix, b, matrix_type: matrix_type)
end

.sparse_solver(sparse_matrix, matrix_type: :general) ⇒ SparseSolver

Create a sparse solver for repeated solves with same sparsity pattern

Parameters:

  • sparse_matrix (Sparse::SparseMatrix)

    Sparse coefficient matrix

  • matrix_type (Symbol) (defaults to: :general)

    Type of matrix (:general, :symmetric, :spd)

Returns:



102
103
104
# File 'lib/nvruby/solver.rb', line 102

def sparse_solver(sparse_matrix, matrix_type: :general)
  SparseSolver.new(sparse_matrix, matrix_type: matrix_type)
end

.svd(matrix, full_matrices: false) ⇒ Hash

Singular Value Decomposition

Parameters:

  • matrix (NvArray)

    Input matrix (m x n)

  • full_matrices (Boolean) (defaults to: false)

    Compute full U, V matrices

Returns:

  • (Hash)

    { u:, s:, vt: }



34
35
36
# File 'lib/nvruby/solver.rb', line 34

def svd(matrix, full_matrices: false)
  SVD.gesvd(matrix, full_matrices: full_matrices)
end

.svdvals(matrix) ⇒ NvArray

Compute singular values only

Parameters:

  • matrix (NvArray)

    Input matrix

Returns:



41
42
43
# File 'lib/nvruby/solver.rb', line 41

def svdvals(matrix)
  SVD.singular_values(matrix)
end