|
|
|
@ -1,12 +1,13 @@ |
|
|
|
# HYPRE.jl |
|
|
|
# HYPRE.jl |
|
|
|
|
|
|
|
|
|
|
|
| **Documentation** | **Build Status** | |
|
|
|
[](https://fredrikekre.github.io/HYPRE.jl/) |
|
|
|
|:------------------------- |:------------------------------------- | |
|
|
|
[](https://github.com/fredrikekre/HYPRE.jl/actions/workflows/Test.yml) |
|
|
|
| [![][docs-img]][docs-url] | [![][gh-actions-img]][gh-actions-url] | |
|
|
|
[](https://codecov.io/github/fredrikekre/HYPRE.jl) |
|
|
|
|
|
|
|
[](https://github.com/fredrikekre/Runic.jl) |
|
|
|
|
|
|
|
|
|
|
|
[Julia][julia] interface to [HYPRE][hypre] ("high performance preconditioners and solvers |
|
|
|
[Julia](https://julialang.org) interface to [HYPRE](https://github.com/hypre-space/hypre) |
|
|
|
featuring multigrid methods for the solution of large, sparse linear systems of equations on |
|
|
|
("high performance preconditioners and solvers featuring multigrid methods for the solution |
|
|
|
massively parallel computers"). |
|
|
|
of large, sparse linear systems of equations on massively parallel computers"). |
|
|
|
|
|
|
|
|
|
|
|
While the main purpose of HYPRE is to solve problems on multiple cores, it can also be used |
|
|
|
While the main purpose of HYPRE is to solve problems on multiple cores, it can also be used |
|
|
|
for single core problems. HYPRE.jl aims to make it easy to use both modes of operation, with |
|
|
|
for single core problems. HYPRE.jl aims to make it easy to use both modes of operation, with |
|
|
|
@ -22,7 +23,7 @@ HYPRE.jl can be installed from the Pkg REPL (press `]` in the Julia REPL to ente |
|
|
|
(@v1) pkg> add HYPRE |
|
|
|
(@v1) pkg> add HYPRE |
|
|
|
``` |
|
|
|
``` |
|
|
|
|
|
|
|
|
|
|
|
To configure MPI, see the [documentation for MPI.jl][mpi-docs]. |
|
|
|
To configure MPI, see the [documentation for MPI.jl](https://juliaparallel.org/MPI.jl/). |
|
|
|
|
|
|
|
|
|
|
|
## Changes |
|
|
|
## Changes |
|
|
|
|
|
|
|
|
|
|
|
@ -35,9 +36,10 @@ Some basic usage examples are shown below. See the [documentation][docs-url] for |
|
|
|
### Example: Single-core solve with standard sparse matrices |
|
|
|
### Example: Single-core solve with standard sparse matrices |
|
|
|
|
|
|
|
|
|
|
|
It is possible to use Julia's standard sparse arrays (`SparseMatrixCSC` from the |
|
|
|
It is possible to use Julia's standard sparse arrays (`SparseMatrixCSC` from the |
|
|
|
[SparseArrays.jl][sparse-stdlib] standard library, and `SparseMatrixCSR` from the |
|
|
|
[SparseArrays.jl](https://github.com/JuliaSparse/SparseArrays.jl) standard library, and |
|
|
|
[SparseMatricesCSR.jl][sparsecsr] package) directly in HYPRE.jl. For example, to solve |
|
|
|
`SparseMatrixCSR` from the |
|
|
|
`Ax = b` with conjugate gradients: |
|
|
|
[SparseMatricesCSR.jl](https://github.com/gridap/SparseMatricesCSR.jl) package) directly in |
|
|
|
|
|
|
|
HYPRE.jl. For example, to solve `Ax = b` with conjugate gradients: |
|
|
|
|
|
|
|
|
|
|
|
```julia |
|
|
|
```julia |
|
|
|
# Initialize linear system |
|
|
|
# Initialize linear system |
|
|
|
@ -53,10 +55,10 @@ x = HYPRE.solve(cg, A, b) |
|
|
|
|
|
|
|
|
|
|
|
### Example: Multi-core solve using PartitionedArrays.jl |
|
|
|
### Example: Multi-core solve using PartitionedArrays.jl |
|
|
|
|
|
|
|
|
|
|
|
For multi-core problems it is possible to use [PartitionedArrays.jl][partarrays] directly |
|
|
|
For multi-core problems it is possible to use |
|
|
|
with HYPRE.jl. Once the linear system is setup the solver interface is identical. For |
|
|
|
[PartitionedArrays.jl](https://github.com/fverdugo/PartitionedArrays.jl) directly with |
|
|
|
example, to solve `Ax = b` with bi-conjugate gradients and an algebraic multigrid |
|
|
|
HYPRE.jl. Once the linear system is setup the solver interface is identical. For example, to |
|
|
|
preconditioner: |
|
|
|
solve `Ax = b` with bi-conjugate gradients and an algebraic multigrid preconditioner: |
|
|
|
|
|
|
|
|
|
|
|
```julia |
|
|
|
```julia |
|
|
|
# Initialize linear system |
|
|
|
# Initialize linear system |
|
|
|
@ -72,15 +74,3 @@ bicg = HYPRE.BiCGSTAB(; Precond = precond) |
|
|
|
# Compute the solution |
|
|
|
# Compute the solution |
|
|
|
x = HYPRE.solve(bicg, A, b) |
|
|
|
x = HYPRE.solve(bicg, A, b) |
|
|
|
``` |
|
|
|
``` |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[julia]: https://julialang.org/ |
|
|
|
|
|
|
|
[hypre]: https://github.com/hypre-space/hypre |
|
|
|
|
|
|
|
[mpi-docs]: https://juliaparallel.org/MPI.jl/ |
|
|
|
|
|
|
|
[sparse-stdlib]: https://github.com/JuliaSparse/SparseArrays.jl |
|
|
|
|
|
|
|
[sparsecsr]: https://github.com/gridap/SparseMatricesCSR.jl |
|
|
|
|
|
|
|
[partarrays]: https://github.com/fverdugo/PartitionedArrays.jl |
|
|
|
|
|
|
|
[docs-img]: https://img.shields.io/badge/docs-stable%20release-blue.svg |
|
|
|
|
|
|
|
[docs-url]: https://fredrikekre.github.io/HYPRE.jl/ |
|
|
|
|
|
|
|
[gh-actions-img]: https://github.com/fredrikekre/HYPRE.jl/actions/workflows/Test.yml/badge.svg?branch=master&event=push |
|
|
|
|
|
|
|
[gh-actions-url]: https://github.com/fredrikekre/HYPRE.jl/actions/workflows/Test.yml?query=branch%3Amaster |
|
|
|
|
|
|
|
|