OGS
PETScMatrix.h
Go to the documentation of this file.
1
15#pragma once
16
17#include <string>
18#include <vector>
19
21#include "PETScMatrixOption.h"
22#include "PETScVector.h"
23
24typedef Mat PETSc_Mat;
25
26namespace MathLib
27{
32{
33public:
35
36public:
44 PETScMatrix(const PetscInt nrows,
46
54 PETScMatrix(const PetscInt nrows, const PetscInt ncols,
56
58 PETScMatrix(PETScMatrix const& A);
59
61
72
74 PetscInt getNumberOfRows() const { return nrows_; }
84 PetscInt getRangeEnd() const { return end_rank_; }
86 Mat& getRawMatrix() { return A_; }
93 Mat const& getRawMatrix() const { return A_; }
105 void setRowsColumnsZero(std::vector<PetscInt> const& row_pos);
106
113 void set(const PetscInt i, const PetscInt j, const PetscScalar value)
114 {
115 MatSetValue(A_, i, j, value, INSERT_VALUES);
116 }
117
124 void add(const PetscInt i, const PetscInt j, const PetscScalar value)
125 {
126 MatSetValue(A_, i, j, value, ADD_VALUES);
127 }
128
145 template <class T_DENSE_MATRIX>
146 void add(RowColumnIndices<PetscInt> const& indices,
148 {
149 // Set global column indices to positive to allow all entries of columns
150 // to be added to the global matrix. For the ghost columns, only the
151 // off diagonal entries are added due to the negative indices of the
152 // corresponding rows.
153 std::vector<PetscInt> cols;
154 cols.reserve(indices.columns.size());
155 for (auto col : indices.columns)
156 {
157 // Ghost entries, and its original index is 0.
158 if (col == -ncols_)
159 {
160 cols.push_back(0);
161 }
162 else
163 {
164 cols.push_back(std::abs(col));
165 }
166 }
167
168 add(indices.rows, cols, sub_matrix);
169 }
170
178 template <class T_DENSE_MATRIX>
179 void add(std::vector<PetscInt> const& row_pos,
180 std::vector<PetscInt> const& col_pos,
181 const T_DENSE_MATRIX& sub_mat);
182
212 void viewer(const std::string& file_name,
214
215private:
216 void destroy()
217 {
218 if (A_ != nullptr)
219 {
220 MatDestroy(&A_);
221 }
222 A_ = nullptr;
223 }
224
226 Mat A_ = nullptr;
227
230
233
236
239
242
245
254 void create(const PetscInt d_nz, const PetscInt o_nz);
255
258};
259
260template <class T_DENSE_MATRIX>
261void PETScMatrix::add(std::vector<PetscInt> const& row_pos,
262 std::vector<PetscInt> const& col_pos,
263 const T_DENSE_MATRIX& sub_mat)
264{
265 const PetscInt nrows = static_cast<PetscInt>(row_pos.size());
266 const PetscInt ncols = static_cast<PetscInt>(col_pos.size());
267
268 MatSetValues(A_, nrows, &row_pos[0], ncols, &col_pos[0], &sub_mat(0, 0),
269 ADD_VALUES);
270};
271
279 PETScMatrix& mat, const MatAssemblyType asm_type = MAT_FINAL_ASSEMBLY);
280
281} // namespace MathLib
Define data for the configuration of PETSc matrix and linear solver.
Mat PETSc_Mat
Definition PETScMatrix.h:24
Declaration of class PETScVector, which provides an interface to PETSc vector routines.
Wrapper class for PETSc matrix routines for matrix.
Definition PETScMatrix.h:32
PetscInt n_loc_cols_
Number of the local columns.
Mat const & getRawMatrix() const
Definition PETScMatrix.h:93
PetscInt getNumberOfLocalRows() const
Get the number of local rows.
Definition PETScMatrix.h:78
PETScMatrix & operator=(PETScMatrix const &A)
Mat & getRawMatrix()
Get matrix reference.
Definition PETScMatrix.h:86
PetscInt getNumberOfColumns() const
Get the number of columns.
Definition PETScMatrix.h:76
void add(RowColumnIndices< PetscInt > const &indices, const T_DENSE_MATRIX &sub_matrix)
Add sub-matrix at positions given by global indices, in which negative index indicates ghost entry.
void setZero()
Set all entries to zero.
Definition PETScMatrix.h:95
void create(const PetscInt d_nz, const PetscInt o_nz)
Create the matrix, configure memory allocation and set the related member data.
PetscInt getRangeEnd() const
Get the end global index of the rows in the same rank.
Definition PETScMatrix.h:84
void set(const PetscInt i, const PetscInt j, const PetscScalar value)
Set a single entry with a value.
PetscInt end_rank_
Ending index in a rank.
PetscInt getRangeBegin() const
Get the start global index of the rows of the same rank.
Definition PETScMatrix.h:82
void finalizeAssembly(const MatAssemblyType asm_type=MAT_FINAL_ASSEMBLY)
Perform MPI collection of assembled entries in buffer.
Definition PETScMatrix.h:67
PetscInt n_loc_rows_
Number of the local rows.
Mat A_
PETSc matrix.
PetscInt nrows_
Number of the global rows.
void setRowsColumnsZero(std::vector< PetscInt > const &row_pos)
Set the specified rows to zero except diagonal entries, i.e. , where This function must be called b...
PetscInt ncols_
Number of the global columns.
void viewer(const std::string &file_name, const PetscViewerFormat vw_format=PETSC_VIEWER_ASCII_MATLAB)
friend bool finalizeMatrixAssembly(PETScMatrix &mat, const MatAssemblyType asm_type)
General interface for the matrix assembly.
void add(const PetscInt i, const PetscInt j, const PetscScalar value)
Add value to a single entry.
PetscInt getNumberOfRows() const
Get the number of rows.
Definition PETScMatrix.h:74
PetscInt start_rank_
Starting index in a rank.
PetscInt getNumberOfLocalColumns() const
Get the number of local columns.
Definition PETScMatrix.h:80
bool finalizeMatrixAssembly(MAT_T &)
This a struct data containing the configuration information to create a PETSc type matrix.