petsc4m-lite is an interface of PETSc for MATLAB and GNU Octave on Linux or MacOSX.
Its main top-level function is petscSolve
, which uses the direct solver MUMPS by
default but can be configured to call any combination of solves and preconditioners
available in PETSc. For convenience, petsc4m-lite provides two additional top-level
functions, gmresILU
and gmresHypre
, which use ILU0 and BoomerAMG as right
preconditioners, respectively. In all cases, the true residuals are used for the
convergence criteria. The inputs matrices can be either a MATLAB sparse
matrix or
a CRS struct
containing row_ptr
, col_ind
, and vals
fields.
The following example illustrates how to use gmresILU
:
A = gallery('wathen', 10, 10);
b = A * ones(length(A), 1);
rtol = 10*eps(class(PetscReal(0))).^(1/2);
[x,flag,relres,iter,reshis,times] = gmresILU(A, b, [], rtol);
petsc4m-lite requires PETSc. A recommended approach for installing PETSc
is to use miniconda3
(or anaconda3
), since it has the most up-to-date
version of PETSc. Suppose you have already installed either miniconda3
or anaconda3
and have conda
in the path and the environment variable
CONDA_PREFIX
pointing to the correct version, you can install PETSc
using the command
conda install -y -c conda-forge petsc=3.18.1
On Linux systems, you can also use the older versions of PETSc that comes with your Linux distribution if you have system-administration access. For example, on Ubuntu 22.04, you can install PETSc using the command
sudo apt update
sudo apt install -y petsc-dev
Of course, you can also install PETSc yourself and define the environnement
variable PETSC_DIR
. petsc-lite tries to locate the PETSc installation in the
following order:
- root path of PETSc specified by the environment variable
PETSC_DIR
; - installation with Anaconda/Miniconda with environment variable
CONDA_PREFIX
; - System installation under
/usr/lib/petsc
(such as on Ubuntu).
When running MATLAB on Linux or with JAVA enabled, petsc4m-lite pass data through files between MATLAB and PETSc for robustness. However, on MacOSX, data will be passed through memory when MATLAB is started without Java using the command
matlab -nojvm
This may be better for solving large systems. On Linux systems, unfortunately, your only option would be to use Octave (see below).
petsc4m-lite works with Octave on Linux and Mac. In this case, data is passed through memory. It is recommended that you install Octave using Miniconda.
petsc4m-lite was developed and maintained by Xiangmin (Jim) Jiao [email protected]. It was mainly used for comparative research. If you found the software useful, please cite the following paper.
@article{ghai2019comparison, title={A comparison of preconditioned Krylov subspace methods for large-scale nonsymmetric linear systems}, author={Ghai, Aditi and Lu, Cao and Jiao, Xiangmin}, journal={Numerical Linear Algebra with Applications}, volume={26}, number={1}, pages={e2215}, year={2019}, publisher={Wiley Online Library} }