SuiteSparseMatrixCollection.jl

A straightforward interface to the SuiteSparse Matrix Collection
Author JuliaSmoothOptimizers
Popularity
4 Stars
Updated Last
1 Year Ago
Started In
February 2019

SuiteSparseMatrixCollection.jl

DOI CI Build Status documentation codecov

A straightforward interface to the SuiteSparse Matrix Collection.

How to Cite

If you use SuiteSparseMatrixCollection.jl in your work, please cite using the format given in CITATION.bib.

How to install

pkg> add SuiteSparseMatrixCollection
pkg> test SuiteSparseMatrixCollection

Updating the database

Clone this repository, activate the utils environment and run gen_db.jl to check if the database needs to be updated.

Updating Artifacts.toml

Clone this repository, activate the utils environment and run gen_artifacts.jl to check if Artifacts.toml needs to be updated.

Examples

julia> using SuiteSparseMatrixCollection

julia> # name-based selection can be done with `ssmc_matrices()`
julia> ssmc_matrices("HB", "bcsstk")  # all matrices whose group contains "HB" and name contains "bcsstk"
julia> ssmc_matrices("", "bcsstk")    # all matrices whose name contains "bcsstk"
julia> ssmc_matrices("HB", "")        # all matrices whose group contains "HB"

julia> # select symmetric positive definite matrices with ≤ 100 rows and columns
julia> tiny = ssmc[(ssmc.numerical_symmetry .== 1) .& (ssmc.positive_definite.== true) .&
                   (ssmc.real .== true) .& (ssmc.nrows .≤ 100), :]

julia> # fetch the matrices selects in MatrixMarket format
julia> paths = fetch_ssmc(tiny, format="MM")  # matrices are downloaded in paths

Matrices are available in formats:

Use DataFrames syntax to further examine a list of selected matrices:

julia> tiny[!, [:name, :nrows, :ncols, :positive_definite, :lower_bandwidth]]
12×5 DataFrame
│ Row │ name          │ nrows │ ncols │ positive_definite │ lower_bandwidth │
│     │ String        │ Int64 │ Int64 │ Bool              │ Int64           │
├─────┼───────────────┼───────┼───────┼───────────────────┼─────────────────┤
│ 1   │ bcsstk01      │ 4848135              │
│ 2   │ bcsstk02      │ 6666165              │
│ 3   │ bcsstm02      │ 666610               │
│ 4   │ nos4          │ 100100113              │
│ 5   │ ex5           │ 2727120              │
│ 6   │ mesh1e1       │ 4848147              │
│ 7   │ mesh1em1      │ 4848147              │
│ 8   │ mesh1em6      │ 4848147              │
│ 9   │ LF10          │ 181813               │
│ 10  │ LFAT5         │ 141415               │
│ 11  │ Trefethen_20b │ 1919116              │
│ 12  │ Trefethen_20  │ 2020116

Matrices in Rutherford-Boeing format can be opened with HarwellRutherfordBoeing.jl:

pkg> add HarwellRutherfordBoeing

julia> using HarwellRutherfordBoeing

julia> matrix = ssmc[ssmc.name .== "bcsstk01", :]
1×30 DataFrame. Omitted printing of 17 columns
│ Row │ group  │ nnzdiag │ nrows │ numerical_symmetry │ amd_vnz │ binary │ structural_rank │ is_nd │ is_graph │ RB_type │ lower_bandwidth │ explicit_zeros │ amd_flops │
│     │ String │ Int64   │ Int64 │ Float64            │ Int64   │ Bool   │ Int64           │ Bool  │ Bool     │ String  │ Int64           │ Int64          │ Float64   │
├─────┼────────┼─────────┼───────┼────────────────────┼─────────┼────────┼─────────────────┼───────┼──────────┼─────────┼─────────────────┼────────────────┼───────────┤
│ 1   │ HB     │ 48481.065104810        │ rsa     │ 3506009.0    │

julia> path = fetch_ssmc(matrix, format="RB")
1-element Array{String,1}:
 "/Users/dpo/dev/JSO/SuiteSparseMatrixCollection.jl/src/../data/RB/HB/bcsstk01"

julia> A = RutherfordBoeingData(joinpath(path[1], "$(matrix.name[1]).rb"))
Rutherford-Boeing data 23 of type rsa
48 rows, 48 cols, 224 nonzeros

Matrices in MM format can be opened with MatrixMarket.jl.

Used By Packages

No packages found.