Make RBF sampler work in both serial and parallel mode.
Added functions to facilitate ghost cell collection and ghost cell matrix construction.
Removes the Eigen library dependency.
Established MUI built-in linear algebra namespace, i.e. mui::linalg, with sparse matrix system and conjugate gradient solver.
The conjugate gradient solver is based on Algorithm 1 of the following paper:
Igor Baratta, Chris Richardson, and Garth Wells. "Performance analysis of matrix-free conjugate gradient kernels using SYCL." International Workshop on OpenCL. 2022.
In addition to the implementation of the conjugate gradient solver based on the paper above, three preconditioners (Incomplete LU preconditioner, Incomplete Cholesky Preconditioner, Symmetric Successive Over-Relaxation Preconditioner) have also been implemented in the mui::linalg namespace. The conjugate gradient solver can be worked in both w/o preconditioner mode and with one of the preconditioner modes.
Add unit test code (a separate folder named “test”) to verify arithmetic operations of the sparse matrix, verify matrix file I/O and verify different combinations of preconditioner and CG by comparing calculated results with reference results.
Verifications:
The RBF sampler is verified by MUI demo 7-pseudo-diffusion. Both conservative mode and consistent mode have been tested.
The arithmetic operations of the mui::linalg sparse matrix system have been verified by the matrix.cpp code in the “test” folder. More specifically: matrix addition, matrix subtraction, matrix multiplication, matrix transpose and matrix I/O (includes print matrix to the console and matrix file I/O in CSV format).
The mui::linalg Conjugate Gradient solver has been verified with reference results by the conjugate_gradient.cpp code in the “test” folder. The following modes have been verified: TEST_0. CG Solver w/o Preconditioner & w/o Initial matrix Guess; TEST_1. CG solver with ILU Preconditioner & w/o Initial matrix Guess; TEST_2: CG solver with SSOR Preconditioner & w/o Initial matrix Guess; TEST_3: CG solver with IC Preconditioner & with Initial matrix Guess.
Future works:
Generalise ghost cell functions, so that to enable other samplers/algorithms to access and use it.
Since the RBF sampler is no longer special compared with other samplers, some pieces of code like below can be removed.
What has been done:
Make RBF sampler work in both serial and parallel mode.
Removes the Eigen library dependency.
Verifications:
Future works: