Flow123d
release_2.2.0-914-gf1a3a4f
|
#include <linsys_PETSC.hh>
Classes | |
struct | PetscScalar2Double_ |
Public Types | |
typedef LinSys | FactoryBaseType |
Public Types inherited from LinSys | |
enum | SetValuesMode { INSERT =INSERT_VALUES, ADD =ADD_VALUES, ALLOCATE, DONE, NONE } |
Public Member Functions | |
LinSys_PETSC (const Distribution *rows_ds, const std::string ¶ms="") | |
LinSys_PETSC (LinSys_PETSC &other) | |
void | set_tolerances (double r_tol, double a_tol, unsigned int max_it) override |
const Distribution * | get_ds () |
const Mat * | get_matrix () override |
const Vec * | get_rhs () override |
PetscErrorCode | set_matrix (Mat &matrix, MatStructure str) override |
PetscErrorCode | set_rhs (Vec &rhs) override |
PetscErrorCode | mat_zero_entries () override |
PetscErrorCode | rhs_zero_entries () override |
void | start_allocation () override |
void | start_add_assembly () override |
void | start_insert_assembly () override |
void | mat_set_values (int nrow, int *rows, int ncol, int *cols, double *vals) override |
void | rhs_set_values (int nrow, int *rows, double *vals) override |
void | preallocate_values (int nrow, int *rows, int ncol, int *cols) |
void | preallocate_matrix () |
void | finish_assembly () override |
void | finish_assembly (MatAssemblyType assembly_type) |
void | apply_constrains (double scalar=1.) override |
void | set_initial_guess_nonzero (bool set_nonzero=true) |
LinSys::SolveInfo | solve () override |
double | get_absolute_accuracy () override |
void | view () override |
void | set_from_input (const Input::Record in_rec) override |
double | get_solution_precision () override |
double | compute_residual () override |
~LinSys_PETSC () | |
Public Member Functions inherited from LinSys | |
LinSys (const Distribution *rows_ds) | |
LinSys (LinSys &other) | |
unsigned int | size () |
unsigned int | vec_lsize () |
void | set_matrix_changed () |
void | set_rhs_changed () |
bool | is_matrix_changed () |
bool | is_rhs_changed () |
const Vec & | get_solution () |
void | set_solution (double *sol_array) |
double * | get_solution_array () |
void | mat_set_value (int row, int col, double val) |
void | rhs_set_value (int row, double val) |
void | set_values (int nrow, int *rows, int ncol, int *cols, PetscScalar *mat_vals, PetscScalar *rhs_vals) |
Set values in the system matrix and values in the right-hand side vector on corresponding rows. More... | |
void | set_local_system (LocalSystem &local) |
void | set_values (std::vector< int > &row_dofs, std::vector< int > &col_dofs, const arma::mat &matrix, const arma::vec &rhs, const arma::vec &row_solution, const arma::vec &col_solution) |
void | add_constraint (int row, double value) |
double | get_residual_norm () |
double | get_relative_accuracy () |
void | set_symmetric (bool flag=true) |
bool | is_symmetric () |
void | set_positive_definite (bool flag=true) |
void | set_negative_definite (bool flag=true) |
bool | is_positive_definite () |
bool | is_negative_definite () |
bool | is_new () |
bool | is_preallocated () |
void | set_spd_via_symmetric_general (bool flag=true) |
bool | is_spd_via_symmetric_general () |
virtual | ~LinSys () |
Static Public Member Functions | |
static const Input::Type::Record & | get_input_type () |
Static Public Member Functions inherited from LinSys | |
static Input::Type::Abstract & | get_input_type () |
Protected Attributes | |
std::string | params_ |
command-line-like options for the PETSc solver More... | |
bool | init_guess_nonzero |
flag for starting from nonzero guess More... | |
Mat | matrix_ |
Petsc matrix of the problem. More... | |
Vec | rhs_ |
PETSc vector constructed with vx array. More... | |
Vec | residual_ |
double * | v_rhs_ |
local RHS array pointing to Vec rhs_ More... | |
Vec | on_vec_ |
Vectors for counting non-zero entries in diagonal block. More... | |
Vec | off_vec_ |
Vectors for counting non-zero entries in off-diagonal block. More... | |
double | solution_precision_ |
KSP | system |
KSPConvergedReason | reason |
Protected Attributes inherited from LinSys | |
double | r_tol_ |
relative tolerance of linear solver More... | |
double | a_tol_ |
absolute tolerance of linear solver More... | |
unsigned int | max_it_ |
maximum number of iterations of linear solver More... | |
MPI_Comm | comm_ |
SetValuesMode | status_ |
Set value status of the linear system. More... | |
const unsigned | lsize_ |
local number of matrix rows (non-overlapping division of rows) More... | |
unsigned | size_ |
global number of matrix rows, i.e. problem size More... | |
const Distribution * | rows_ds_ |
final distribution of rows of MH matrix More... | |
bool | symmetric_ |
bool | positive_definite_ |
bool | negative_definite_ |
bool | spd_via_symmetric_general_ |
bool | matrix_changed_ |
true if the matrix was changed since the last solve More... | |
bool | rhs_changed_ |
true if the right hand side was changed since the last solve More... | |
Vec | solution_ |
PETSc vector constructed with vb array. More... | |
double * | v_solution_ |
local solution array pointing into Vec solution_ More... | |
bool | own_solution_ |
Indicates if the solution array has been allocated by this class. More... | |
double | residual_norm_ |
local solution array pointing into Vec solution_ More... | |
ConstraintVec_ | constraints_ |
std::vector< double > | globalSolution_ |
global solution in numbering for linear system More... | |
Input::Record | in_rec_ |
Private Member Functions | |
template<typename T > | |
T * | makePetscPointer_ (std::vector< T > &array) |
Static Private Attributes | |
static const int | registrar = LinSys_PETSC::get_input_type().size() |
Registrar of class to factory. More... | |
Additional Inherited Members | |
Protected Types inherited from LinSys | |
typedef std::pair< unsigned, double > | Constraint_ |
typedef std::vector< Constraint_ > | ConstraintVec_ |
Static Protected Attributes inherited from LinSys | |
static constexpr double | default_r_tol_ = 1e-7 |
static constexpr double | default_a_tol_ = 1e-11 |
static constexpr unsigned int | default_max_it_ = 1000 |
Definition at line 43 of file linsys_PETSC.hh.
typedef LinSys LinSys_PETSC::FactoryBaseType |
Definition at line 47 of file linsys_PETSC.hh.
LinSys_PETSC::LinSys_PETSC | ( | const Distribution * | rows_ds, |
const std::string & | params = "" |
||
) |
Definition at line 57 of file linsys_PETSC.cc.
LinSys_PETSC::LinSys_PETSC | ( | LinSys_PETSC & | other | ) |
Copy constructor.
Definition at line 77 of file linsys_PETSC.cc.
LinSys_PETSC::~LinSys_PETSC | ( | ) |
Definition at line 431 of file linsys_PETSC.cc.
|
overridevirtual |
Apply constrains to assembled matrix. Constrains are given by pairs: global row index, value. i.e. typedef pair<unsigned int, double> Constrain;
What is th meaning of ( const double factor ) form Cambridge code?
Implements LinSys.
Definition at line 278 of file linsys_PETSC.cc.
|
overridevirtual |
Explicitly compute residual and its norm for current solution.
Implements LinSys.
Reimplemented in SchurComplement.
Definition at line 462 of file linsys_PETSC.cc.
|
overridevirtual |
Finish assembly of the whole system. For PETSC this should call MatEndAssembly with MAT_FINAL_ASSEMBLY
Implements LinSys.
Definition at line 248 of file linsys_PETSC.cc.
void LinSys_PETSC::finish_assembly | ( | MatAssemblyType | assembly_type | ) |
Definition at line 254 of file linsys_PETSC.cc.
|
inlineoverridevirtual |
Returns information on absolute solver accuracy
Reimplemented from LinSys.
Definition at line 130 of file linsys_PETSC.hh.
|
inline |
Returns whole Distribution class for distribution of the solution.
Definition at line 64 of file linsys_PETSC.hh.
|
static |
|
inlineoverridevirtual |
Returns PETSC matrix (only for PETSC solvers)
If matrix is changed, method set_matrix_changed() must be called. Example: MatDiagonalSet(schur->get_matrix(), new_diagonal, ADD_VALUES); schur->set_matrix_changed();
Reimplemented from LinSys.
Definition at line 69 of file linsys_PETSC.hh.
|
inlineoverridevirtual |
Returns RHS vector (only for PETSC solvers)
If vector is changed, method set_rhs_changed() must be called. Example: VecScale(schur->get_rhs(), -1.0); schur->set_rhs_changed();
Reimplemented from LinSys.
Definition at line 74 of file linsys_PETSC.hh.
|
overridevirtual |
Get precision of solving
Implements LinSys.
Reimplemented in SchurComplement.
Definition at line 456 of file linsys_PETSC.cc.
|
inlineprivate |
|
overridevirtual |
Assembly full rectangular submatrix into the system matrix. Should be virtual, implemented differently in particular solvers.
Implements LinSys.
Definition at line 147 of file linsys_PETSC.cc.
|
inlineoverridevirtual |
Clears entries of the matrix
Reimplemented from LinSys.
Definition at line 91 of file linsys_PETSC.hh.
void LinSys_PETSC::preallocate_matrix | ( | ) |
void LinSys_PETSC::preallocate_values | ( | int | nrow, |
int * | rows, | ||
int | ncol, | ||
int * | cols | ||
) |
|
overridevirtual |
Set values of the system right-hand side. Should be virtual, implemented differently in particular solvers.
Implements LinSys.
Definition at line 166 of file linsys_PETSC.cc.
|
inlineoverridevirtual |
Clears entries of the right-hand side
Reimplemented from LinSys.
Definition at line 97 of file linsys_PETSC.hh.
|
overridevirtual |
Sets specific parameters of LinSys_PETSC defined by user in input file and used to calculate
Reimplemented from LinSys.
Reimplemented in SchurComplement.
Definition at line 444 of file linsys_PETSC.cc.
void LinSys_PETSC::set_initial_guess_nonzero | ( | bool | set_nonzero = true | ) |
Definition at line 323 of file linsys_PETSC.cc.
|
inlineoverridevirtual |
Sets PETSC matrix (only for PETSC solvers)
Reimplemented from LinSys.
Definition at line 79 of file linsys_PETSC.hh.
|
inlineoverridevirtual |
Sets RHS vector (only for PETSC solvers)
Reimplemented from LinSys.
Definition at line 85 of file linsys_PETSC.hh.
|
overridevirtual |
Set relative tolerance, absolute tolerance, and maximum number of iterations of the linear solver.
For each of these three parameters we first look for the value at user input if not set we use the value provided to this method and finally the default values are set by the call of this method in the constructor.
Implements LinSys.
Reimplemented in SchurComplement.
Definition at line 86 of file linsys_PETSC.cc.
|
overridevirtual |
Solve the system and return convergence reason.
Implements LinSys.
Reimplemented in SchurComplement.
Definition at line 329 of file linsys_PETSC.cc.
|
overridevirtual |
Switch linear system into adding assembly. (the only one supported by triplets ??)
Reimplemented from LinSys.
Definition at line 111 of file linsys_PETSC.cc.
|
overridevirtual |
Switch linear system into allocating assembly. (only for PETSC_MPIAIJ_preallocate_by_assembly)
Reimplemented from LinSys.
Definition at line 102 of file linsys_PETSC.cc.
|
overridevirtual |
Switch linear system into insert assembly. (not currently used)
Reimplemented from LinSys.
Definition at line 129 of file linsys_PETSC.cc.
|
overridevirtual |
Output the system in the Matlab format possibly with given ordering. Rather we shoud provide output operator <<, since it is more flexible.
Reimplemented from LinSys.
Definition at line 405 of file linsys_PETSC.cc.
|
protected |
flag for starting from nonzero guess
Definition at line 172 of file linsys_PETSC.hh.
|
protected |
Petsc matrix of the problem.
Definition at line 174 of file linsys_PETSC.hh.
|
protected |
Vectors for counting non-zero entries in off-diagonal block.
Definition at line 181 of file linsys_PETSC.hh.
|
protected |
Vectors for counting non-zero entries in diagonal block.
Definition at line 180 of file linsys_PETSC.hh.
|
protected |
command-line-like options for the PETSc solver
Definition at line 170 of file linsys_PETSC.hh.
|
protected |
Definition at line 187 of file linsys_PETSC.hh.
|
staticprivate |
Registrar of class to factory.
Definition at line 149 of file linsys_PETSC.hh.
|
protected |
Definition at line 176 of file linsys_PETSC.hh.
|
protected |
PETSc vector constructed with vx array.
Definition at line 175 of file linsys_PETSC.hh.
|
protected |
Definition at line 184 of file linsys_PETSC.hh.
|
protected |
Definition at line 186 of file linsys_PETSC.hh.
|
protected |
local RHS array pointing to Vec rhs_
Definition at line 178 of file linsys_PETSC.hh.