doc:user:integration:general:solvers
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| doc:user:integration:general:solvers [2015/05/19 15:27] – [MUltifrontal Massively Parallel sparse direct Solver (MUMPS)] ziane | doc:user:integration:general:solvers [2026/04/09 16:31] (current) – lacroix | ||
|---|---|---|---|
| Line 9: | Line 9: | ||
| use : | use : | ||
| <code python> | <code python> | ||
| - | metafor = domain.getMetafor() | ||
| solvermanager = metafor.getSolverManager() | solvermanager = metafor.getSolverManager() | ||
| solvermanager.setSymmetric(True) # False by default | solvermanager.setSymmetric(True) # False by default | ||
| Line 21: | Line 20: | ||
| ===== Pardiso (DSS) Solver===== | ===== Pardiso (DSS) Solver===== | ||
| - | Pardiso solver is a sparse direct solver using CSR format for storing the matrix. Several CPU can be used (SMP parallelism, | + | Pardiso solver is a sparse direct solver using CSR format for storing the matrix. Several CPU can be used (SMP parallelism, |
| Use: | Use: | ||
| <code python> | <code python> | ||
| - | metafor = domain.getMetafor() | + | solvermanager = metafor.getSolverManager() |
| - | solvermanager = metafor.getSolverManager(); | + | solvermanager.setSolver(DSSolver()) |
| - | try: | + | |
| - | | + | |
| - | except NameError: | + | |
| - | pass | + | |
| </ | </ | ||
| The number of CPUs is set using | The number of CPUs is set using | ||
| - | Blas.setNumThreads(n) | + | < |
| + | Metafor -k n | ||
| + | </ | ||
| where '' | where '' | ||
| Line 47: | Line 44: | ||
| <code python> | <code python> | ||
| - | solver = ISSolver() | + | solver = ISSolver() |
| - | solver.setRestart(5) | + | |
| - | solver.setItMax(10) | + | solver.setRestart(5) |
| - | solver.setTol(1e-1) | + | solver.setMaxIter(10) |
| + | solver.setTol(1e-1) | ||
| solvermanager = metafor.getSolverManager() | solvermanager = metafor.getSolverManager() | ||
| Line 56: | Line 54: | ||
| </ | </ | ||
| - | By default, the solver uses a ILU0 preconditioner. It is an incomplete factorization (A~=LU) for which the structure of L and U is the same as A. | + | By default, the solver uses a ILU0 preconditioner. It is an incomplete factorization (A~=LU) for which the structure of L and U is the same as A. A more elaborated preconditioner is also available (ILUT). It is also an incomplete factorization, |
| - | + | ||
| - | A more elaborated preconditioner is also available (ILUT). It is also an incomplete factorization, | + | |
| <code python> | <code python> | ||
| - | solver.useILUT(20) # nFill=20 (only 20 elements are kept on the lines of L and U) | + | solver.setPreconditioner(ILUT) |
| + | solver.setPrecMaxFill(20) # 20 elements are kept on the lines of L and U | ||
| </ | </ | ||
| - | ===== MUltifrontal Massively Parallel sparse direct Solver | + | ===== MUMPS (MUltifrontal Massively Parallel sparse direct Solver) ===== |
| MUMPS is a sparse direct solver for the solution of large linear algebric systems on distributed memory parallel computers. It implements the multifrontal method, which is a version of Gaussian elimination for large sparse systems of equations, especially those arising from the finite element method. It is written in Fortran 90 with parallelism by MPI and it uses BLAS and ScaLAPACK kernels for dense matrix computations. | MUMPS is a sparse direct solver for the solution of large linear algebric systems on distributed memory parallel computers. It implements the multifrontal method, which is a version of Gaussian elimination for large sparse systems of equations, especially those arising from the finite element method. It is written in Fortran 90 with parallelism by MPI and it uses BLAS and ScaLAPACK kernels for dense matrix computations. | ||
| - | The input matrix can be supplied to MUMPS in assembled format in coordinate | + | <code python> |
| + | solvermanager = metafor.getSolverManager() | ||
| + | solvermanager.setSolver(MUMPSolver()) | ||
| + | </ | ||
| + | The input matrix can be supplied to MUMPS in assembled format in coordinate COO (distributed or centralized) or in elemental format. MUMPS can also be used with multiple threads (CPU cores) by using | ||
| - | Use: | + | < |
| + | Metafor -k n | ||
| + | </ | ||
| + | |||
| + | where '' | ||
| + | |||
| + | ===== CUDSS (CUDA Direct Sparse Solver) ===== | ||
| + | |||
| + | CUDSS is a GPU-accelerated sparse direct solver using the CSR matrix format. Providing your hardware is equipped with a good Nvidia GPU, leveraging GPU acceleration for solving the finite element system can become beneficial compared to Intel MKL DSS. The CUDSS interface requires CUDA >= 12.0 along with the Nvidia drivers and CUDA Toolkit, and a compatible version of the CUDSS library (i.e. >= 0.6.0.5). Download links are given below, but it is **strongly advised** to use the packages provided by your Linux distro, rather than Nvidia ones, when available. | ||
| + | |||
| + | * Nvidia drivers | ||
| + | * CUDA Toolkit : https:// | ||
| + | * CUDSS : https:// | ||
| <code python> | <code python> | ||
| - | metafor | + | solver |
| - | solvermanager = metafor.getSolverManager(); | + | solvermanager = metafor.getSolverManager() |
| - | try: | + | solvermanager.setSolver(solver) |
| - | | + | |
| - | except NameError: | + | |
| - | pass | + | |
| </ | </ | ||
| - | MUMPS can be used with multiple threads (CPU cores) by using | + | CUDSS is interfaced |
| - | Blas.setBlasNumThreads(n) | + | <code python> |
| + | solver.setNSteps(2) # Default is 0 | ||
| + | </ | ||
| - | where '' | + | ===== AMGX (Algebraic MultiGrid) ===== |
| + | |||
| + | AMGX is a GPU-accelerated iterative sparse solver using the CSR matrix format. It requires CUDA > 12.0, CUDA Toolkit and a compatible Nvidia drivers (and hardware). AMGX can provide an accurate solution in a significantly smaller computation time than CUDSS if configured properly, but its overall robustness is weaker than a direct solver. | ||
| + | |||
| + | * AMGX Website : https:// | ||
| + | * AMGX repository : https:// | ||
| + | |||
| + | <code python> | ||
| + | solver = AMGX() | ||
| + | |||
| + | solver.setAlgorithm(algo) | ||
| + | solver.setPreconditioner(prec) | ||
| + | solver.setMaxIter(1000) | ||
| + | solver.setAbsTol(1e-12) | ||
| + | solver.setRelTol(1e-12) | ||
| + | solver.setRestart(5) | ||
| + | |||
| + | solvermanager = metafor.getSolverManager() | ||
| + | solvermanager.setSolver(solver) | ||
| + | </ | ||
| + | |||
| + | AMGX offers many options, among which a few have been interfaced in Metafor: | ||
| + | |||
| + | |||
| + | | '' | ||
| + | | ::: | ::: | = '' | ||
| + | | ::: | ::: | = '' | ||
| + | | '' | ||
| + | | ::: | ::: | = '' | ||
| + | | ::: | ::: | = '' | ||
| + | | ::: | ::: | = '' | ||
| + | | ::: | ::: | = '' | ||
doc/user/integration/general/solvers.1432042056.txt.gz · Last modified: (external edit)
