pgesv
The pgesv solver supports the following input types.
- data type: DSZC
- index type:
std::int32_t,std::int64_t
The pgesv solves a square matrix using LU decomposition with partial pivoting.
The matrix of size \(N\) is stored in a memory block of size \(N^2\).
Constructor
There are three template arguments.
- data type, e.g.,
double,float,std::complex<double>,std::complex<float>. - index type, e.g.,
std::int32_t,std::int64_t. - proccess grid order,
RorC.
This solver uses a 2D process grid, so one can choose from Row major or Column major ordering.
With np_row and np_col denoting the numbers of rows and columns of the process grid, a solver can be constructed using the following.
It is possible to let the library automatically determine the numbers of rows and columns, then the solver can be constructed as
Solving
Prepare matrices \(A\) and \(B\) on the root process in whatever form of choice.
Those two matrices need to be wrapped into template<data_t DT, index_t IT> struct full_mat objects, which require
- the number of rows of the matrix,
n_rows, - the number of columns of the matrix,
n_cols, - a pointer pointing to the data,
data.
Then one can call the solver via
The factorization will be stored internally as long as the solver object stays alive. Thus to reuse the factorization, a second solve can call the following.
A second call to solve(full_mat<DT, IT>&& A, full_mat<DT, IT>&& B) will clear previous factorizations automatically.
On return, B will be replaced by the solution.
In the above example, std::vector<double> B will contain the solution.