kwant.solvers.mumps
– High performance sparse solver based on MUMPS#
This solver uses MUMPS. (Only the sequential, single core version of MUMPS is used.) MUMPS is a very efficient direct sparse solver that can take advantage of memory beyond 3GiB for the solution of large problems. Furthermore, it offers a choice of several orderings of the input matrix some of which can speed up a calculation significantly.
Compared with the default solver
, this module
adds several options that may be used to fine-tune performance. Otherwise the
interface is identical. These options can be set and queried with the
following functions.
- kwant.solvers.mumps.options(nrhs=None, ordering=None, sparse_rhs=None)[source]#
Modify some options. Return the old options.
- Parameters:
nrhs (number) – number of right hand sides that should be solved simultaneously. A value around 5-10 gives optimal performance on many machines. If memory is an issue, it can be set to 1, to minimize memory usage (at the cost of slower performance). Default value is 6.
ordering (string) –
one of the ordering methods supported by the MUMPS solver (see
kwant.linalg.mumps
. The availability of certain orderings depends on the MUMPS installation.), or ‘kwant_decides’. Ifordering=='kwant_decides'
, the ordering that typically gives the best performance is chosen from the available ones. One can also defer the choice of ordering to MUMPS by specifying ‘auto’, in some cases MUMPS however chooses poorly.The choice of ordering can significantly influence the performance and memory impact of the solve phase. Typically the nested dissection orderings ‘metis’ and ‘scotch’ are most suited for physical systems. Default is ‘kwant_decides’
sparse_rhs (True or False) – whether to use a sparse right hand side in the solve phase of MUMPS. Preliminary tests have not shown a significant performance increase when this feature is used, but this needs more looking into. Default value is False.
- Returns:
old_options – dictionary containing the previous options.
- Return type:
dict
Notes
Thanks to this method returning the old options as a dictionary it is easy to change some options temporarily:
>>> saved_options = kwant.solvers.mumps.options(nrhs=12) >>> some_code() >>> kwant.solvers.mumps.options(**saved_options)