#include <PetscMatTools.hpp>
Static Public Member Functions | |
static void | SetElement (Mat matrix, PetscInt row, PetscInt col, double value) |
static void | AddToElement (Mat matrix, PetscInt row, PetscInt col, double value) |
static void | Finalise (Mat matrix) |
static void | SwitchWriteMode (Mat matrix) |
static void | Display (Mat matrix) |
static void | SetRow (Mat matrix, PetscInt row, double value) |
static void | ZeroRowsWithValueOnDiagonal (Mat matrix, std::vector< unsigned > &rRows, double diagonalValue) |
static void | ZeroRowsAndColumnsWithValueOnDiagonal (Mat matrix, std::vector< unsigned > &rRowColIndices, double diagonalValue) |
static void | ZeroColumn (Mat matrix, PetscInt col) |
static void | Zero (Mat matrix) |
static unsigned | GetSize (Mat matrix) |
static void | GetOwnershipRange (Mat matrix, PetscInt &lo, PetscInt &hi) |
static double | GetElement (Mat matrix, PetscInt row, PetscInt col) |
static void | SetOption (Mat matrix, MatOption option) |
static Vec | GetMatrixRowDistributed (Mat matrix, unsigned rowIndex) |
static bool | CheckEquality (const Mat mat1, const Mat mat2, double tol=1e-10) |
static bool | CheckSymmetry (const Mat matrix, double tol=1e-10) |
template<size_t MATRIX_SIZE> | |
static void | AddMultipleValues (Mat matrix, unsigned *matrixRowAndColIndices, c_matrix< double, MATRIX_SIZE, MATRIX_SIZE > &rSmallMatrix) |
A collection of static methods for working with PETSc matrices.
Definition at line 41 of file PetscMatTools.hpp.
static void PetscMatTools::AddMultipleValues | ( | Mat | matrix, | |
unsigned * | matrixRowAndColIndices, | |||
c_matrix< double, MATRIX_SIZE, MATRIX_SIZE > & | rSmallMatrix | |||
) | [inline, static] |
Add multiple values to a matrix.
matrix | the matrix | |
matrixRowAndColIndices | mapping from index of the ublas matrix (see param below) to index of the PETSc matrix of this linear system | |
rSmallMatrix | Ublas matrix containing the values to be added |
N.B. Values which are not local (ie the row is not owned) will be skipped.
Definition at line 214 of file PetscMatTools.hpp.
References GetOwnershipRange().
Referenced by LinearSystem::AddLhsMultipleValues().
void PetscMatTools::AddToElement | ( | Mat | matrix, | |
PetscInt | row, | |||
PetscInt | col, | |||
double | value | |||
) | [static] |
Add the specified value to an entry of a matrix.
matrix | the matrix | |
row | the row index | |
col | the column index | |
value | the value for this entry |
Definition at line 47 of file PetscMatTools.cpp.
References GetOwnershipRange().
Referenced by LinearSystem::AddToMatrixElement(), and NodeBasedCellPopulationWithBuskeUpdate< DIM >::UpdateNodeLocations().
Check whether two matrices are equal to within a given tolerance.
mat1 | the first matrix | |
mat2 | the second matrix | |
tol | the tolerance |
Definition at line 359 of file PetscMatTools.cpp.
Referenced by CheckSymmetry(), and AbstractNonlinearAssemblerSolverHybrid< ELEMENT_DIM, SPACE_DIM, PROBLEM_DIM >::VerifyJacobian().
Check whether a matrix is symmetrix, to within a given tolerance, by checking if it is (approximately) equal to its transpose.
Note that while there is a PETSc method MatIsSymmetric, it won't work in parallel on some PETSc versions: "Matrix of type <mpiaij> does not support checking for symmetric!"
Also checking for exact equality of the transpose can break on 32bit systems.
matrix | the matrix to check | |
tol | the tolerance |
Definition at line 382 of file PetscMatTools.cpp.
References CheckEquality().
void PetscMatTools::Display | ( | Mat | matrix | ) | [static] |
Display a matrix.
matrix | the matrix |
Definition at line 70 of file PetscMatTools.cpp.
Referenced by LinearSystem::DisplayMatrix().
void PetscMatTools::Finalise | ( | Mat | matrix | ) | [static] |
Sets up the matrix ready for use, e.g. in solving a linear system. This is a wrapper to PETSc functions like MatAssemblyBegin(matrix, MAT_FINAL_ASSEMBLY).
matrix | the matrix |
Definition at line 58 of file PetscMatTools.cpp.
Referenced by AbstractNonlinearElasticitySolver< DIM >::ApplyDirichletBoundaryConditions(), BoundaryConditionsContainer< ELEMENT_DIM, SPACE_DIM, PROBLEM_DIM >::ApplyDirichletToNonlinearJacobian(), AbstractNonlinearAssemblerSolverHybrid< ELEMENT_DIM, SPACE_DIM, PROBLEM_DIM >::ComputeJacobian(), AbstractNonlinearAssemblerSolverHybrid< ELEMENT_DIM, SPACE_DIM, PROBLEM_DIM >::ComputeJacobianNumerically(), LinearSystem::FinaliseLhsMatrix(), LinearSystem::FinalisePrecondMatrix(), AbstractNonlinearElasticitySolver< DIM >::FinishAssembleSystem(), OperatorSplittingMonodomainSolver< ELEMENT_DIM, SPACE_DIM >::SetupLinearSystem(), MonodomainSolver< ELEMENT_DIM, SPACE_DIM >::SetupLinearSystem(), ExtendedBidomainSolver< ELEM_DIM, SPACE_DIM >::SetupLinearSystem(), BidomainSolver< ELEMENT_DIM, SPACE_DIM >::SetupLinearSystem(), NodeBasedCellPopulationWithBuskeUpdate< DIM >::UpdateNodeLocations(), ZeroColumn(), ZeroRowsAndColumnsWithValueOnDiagonal(), and ZeroRowsWithValueOnDiagonal().
double PetscMatTools::GetElement | ( | Mat | matrix, | |
PetscInt | row, | |||
PetscInt | col | |||
) | [static] |
Return an element of a matrix. May only be called for elements you own.
matrix | the matrix | |
row | the row index | |
col | the column index |
Definition at line 291 of file PetscMatTools.cpp.
References GetOwnershipRange().
Referenced by LinearSystem::GetMatrixElement(), and ZeroColumn().
Returns the i-th row of the LHS matrix as a distributed PETSc Vec
matrix | the matrix | |
rowIndex | the row index |
Definition at line 318 of file PetscMatTools.cpp.
References PetscTools::CreateVec(), GetOwnershipRange(), and GetSize().
Referenced by AbstractNonlinearElasticitySolver< DIM >::ApplyDirichletBoundaryConditions().
void PetscMatTools::GetOwnershipRange | ( | Mat | matrix, | |
PetscInt & | lo, | |||
PetscInt & | hi | |||
) | [static] |
Get this process's ownership range of the contents of the system.
matrix | the matrix | |
lo | lowest index owned by this process | |
hi | highest index owned by this process |
Definition at line 286 of file PetscMatTools.cpp.
Referenced by AddMultipleValues(), AddToElement(), GetElement(), GetMatrixRowDistributed(), SetElement(), SetRow(), ZeroColumn(), and ZeroRowsAndColumnsWithValueOnDiagonal().
unsigned PetscMatTools::GetSize | ( | Mat | matrix | ) | [static] |
Get the size of a matrix
matrix | the matrix |
Definition at line 277 of file PetscMatTools.cpp.
Referenced by AbstractContinuumMechanicsAssembler< DIM, CAN_ASSEMBLE_VECTOR, CAN_ASSEMBLE_MATRIX >::DoAssemble(), and GetMatrixRowDistributed().
void PetscMatTools::SetElement | ( | Mat | matrix, | |
PetscInt | row, | |||
PetscInt | col, | |||
double | value | |||
) | [static] |
Change one of the entries of a matrix to the specified value.
matrix | the matrix | |
row | the row index | |
col | the column index | |
value | the value for this entry |
Definition at line 36 of file PetscMatTools.cpp.
References GetOwnershipRange().
Referenced by AbstractNonlinearAssemblerSolverHybrid< ELEMENT_DIM, SPACE_DIM, PROBLEM_DIM >::ComputeJacobianNumerically(), AbstractBidomainSolver< ELEMENT_DIM, SPACE_DIM >::FinaliseForBath(), LinearSystem::SetMatrixElement(), and SetRow().
void PetscMatTools::SetOption | ( | Mat | matrix, | |
MatOption | option | |||
) | [static] |
Set a PETSc matrix option to be true, using the PETSc method MatSetOption.
matrix | the matrix for which to set the option | |
option | the option to set |
Definition at line 309 of file PetscMatTools.cpp.
Referenced by LinearSystem::SetMatrixIsSymmetric().
void PetscMatTools::SetRow | ( | Mat | matrix, | |
PetscInt | row, | |||
double | value | |||
) | [static] |
Set all entries in a given row of a matrix to a certain value. This must be called by the process who owns the row, (but other processors will treat it as a null-op
matrix | the matrix | |
row | the row index | |
value | the value to set each entry in this row |
Definition at line 75 of file PetscMatTools.cpp.
References GetOwnershipRange(), and SetElement().
Referenced by LinearSystem::SetMatrixRow().
void PetscMatTools::SwitchWriteMode | ( | Mat | matrix | ) | [static] |
This must be called if switching between inserting or adding values to the matrix, to ensure all processes are in sync. This is a wrapper to PETSc functions like MatAssemblyBegin(matrix, MAT_FLUSH_ASSEMBLY).
matrix | the matrix |
Definition at line 64 of file PetscMatTools.cpp.
Referenced by AbstractNonlinearAssemblerSolverHybrid< ELEMENT_DIM, SPACE_DIM, PROBLEM_DIM >::ComputeJacobian(), AbstractNonlinearElasticitySolver< DIM >::FinishAssembleSystem(), and LinearSystem::SwitchWriteModeLhsMatrix().
void PetscMatTools::Zero | ( | Mat | matrix | ) | [static] |
Zero all entries of a matrix.
matrix | the matrix |
Definition at line 272 of file PetscMatTools.cpp.
Referenced by IncompressibleNonlinearElasticitySolver< DIM >::AssembleSystem(), CompressibleNonlinearElasticitySolver< DIM >::AssembleSystem(), AbstractFeVolumeIntegralAssembler< ELEMENT_DIM, SPACE_DIM, PROBLEM_DIM, CAN_ASSEMBLE_VECTOR, CAN_ASSEMBLE_MATRIX, INTERPOLATION_LEVEL >::DoAssemble(), AbstractFeCableIntegralAssembler< ELEMENT_DIM, SPACE_DIM, PROBLEM_DIM, CAN_ASSEMBLE_VECTOR, CAN_ASSEMBLE_MATRIX, INTERPOLATION_LEVEL >::DoAssemble(), AbstractContinuumMechanicsAssembler< DIM, CAN_ASSEMBLE_VECTOR, CAN_ASSEMBLE_MATRIX >::DoAssemble(), and LinearSystem::ZeroLhsMatrix().
void PetscMatTools::ZeroColumn | ( | Mat | matrix, | |
PetscInt | col | |||
) | [static] |
Zero a column of a matrix.
Unfortunately there is no equivalent method in Petsc, so this has to be done carefully to ensure that the sparsity structure of the matrix is not broken. Only owned entries which are non-zero are zeroed.
matrix | the matrix | |
col | the column index |
Definition at line 236 of file PetscMatTools.cpp.
References Finalise(), GetElement(), and GetOwnershipRange().
Referenced by LinearSystem::ZeroMatrixColumn().
void PetscMatTools::ZeroRowsAndColumnsWithValueOnDiagonal | ( | Mat | matrix, | |
std::vector< unsigned > & | rRowColIndices, | |||
double | diagonalValue | |||
) | [static] |
Zero several rows and columns of a matrix, putting a given value on the diagonal.
matrix | the matrix | |
rRowColIndices | A list of indices. All the rows with these indices, and all the columns with these indices, will be zeroed. | |
diagonalValue | value to put in the diagonal entries (of the zeroed rows) |
Definition at line 169 of file PetscMatTools.cpp.
References Finalise(), GetOwnershipRange(), and ZeroRowsWithValueOnDiagonal().
Referenced by AbstractNonlinearElasticitySolver< DIM >::ApplyDirichletBoundaryConditions(), and LinearSystem::ZeroMatrixRowsAndColumnsWithValueOnDiagonal().
void PetscMatTools::ZeroRowsWithValueOnDiagonal | ( | Mat | matrix, | |
std::vector< unsigned > & | rRows, | |||
double | diagonalValue | |||
) | [static] |
Zero several rows of a matrix, putting a given value in the diagonal entries.
*Massively* less expensive than zeroing each matrix row individually
matrix | the matrix | |
rRows | std::vector of rows to be zeroed | |
diagonalValue | value to put in the diagonal entries (of the zeroed rows) |
Definition at line 91 of file PetscMatTools.cpp.
References Finalise().
Referenced by AbstractNonlinearElasticitySolver< DIM >::ApplyDirichletBoundaryConditions(), BoundaryConditionsContainer< ELEMENT_DIM, SPACE_DIM, PROBLEM_DIM >::ApplyDirichletToNonlinearJacobian(), LinearSystem::ZeroMatrixRowsWithValueOnDiagonal(), and ZeroRowsAndColumnsWithValueOnDiagonal().