Flow123d
jenkins-Flow123d-linux-release-multijob-282
|
#include <schur.hh>
Public Member Functions | |
SchurComplement (IS ia, Distribution *ds) | |
SchurComplement (SchurComplement &other) | |
LinSys * | get_system () const |
Distribution * | get_distribution () const |
~SchurComplement () | |
void | form_rhs () |
void | set_complement (LinSys_PETSC *ls) |
Set complement LinSys object. More... | |
Distribution * | make_complement_distribution () |
get distribution of complement object if complement is defined More... | |
double | get_solution_precision () override |
get precision of solving More... | |
int | solve () override |
![]() | |
LinSys_PETSC (const Distribution *rows_ds) | |
LinSys_PETSC (LinSys_PETSC &other) | |
const Distribution * | get_ds () |
const Mat * | get_matrix () |
const Vec * | get_rhs () |
PetscErrorCode | set_matrix (Mat &matrix, MatStructure str) |
PetscErrorCode | set_rhs (Vec &rhs) |
PetscErrorCode | mat_zero_entries () |
PetscErrorCode | rhs_zero_entries () |
void | start_allocation () |
void | start_add_assembly () |
void | start_insert_assembly () |
void | mat_set_values (int nrow, int *rows, int ncol, int *cols, double *vals) |
void | rhs_set_values (int nrow, int *rows, double *vals) |
void | preallocate_values (int nrow, int *rows, int ncol, int *cols) |
void | preallocate_matrix () |
void | finish_assembly () |
void | finish_assembly (MatAssemblyType assembly_type) |
void | apply_constrains (double scalar=1.) |
void | set_initial_guess_nonzero (bool set_nonzero=true) |
double | get_absolute_accuracy () |
void | view () |
void | set_from_input (const Input::Record in_rec) |
~LinSys_PETSC () | |
![]() | |
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_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 () |
Protected Member Functions | |
void | create_inversion_matrix () |
create IA matrix More... | |
void | form_schur () |
void | resolve () |
Protected Attributes | |
Mat | IA |
Mat | B |
Mat | Bt |
Mat | xA |
Mat | IAB |
int | loc_size_A |
int | loc_size_B |
IS | IsA |
IS | IsB |
Vec | RHS1 |
Vec | RHS2 |
Vec | Sol1 |
Vec | Sol2 |
SchurState | state |
int | orig_lsize |
Size of local vector part of original system. More... | |
LinSys_PETSC * | Compl |
Distribution * | ds_ |
![]() | |
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... | |
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_ |
![]() | |
double | r_tol_ |
double | a_tol_ |
int | max_it_ |
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_ |
Additional Inherited Members | |
![]() | |
enum | SetValuesMode { INSERT =INSERT_VALUES, ADD =ADD_VALUES, ALLOCATE, DONE, NONE } |
![]() | |
static Input::Type::Record | input_type |
![]() | |
static Input::Type::AbstractRecord | input_type |
![]() | |
typedef std::pair< unsigned, double > | Constraint_ |
typedef std::vector< Constraint_ > | ConstraintVec_ |
SchurComplement::SchurComplement | ( | IS | ia, |
Distribution * | ds | ||
) |
Constructor
Gets linear system with original matrix A and creates its inversion (IA matrix)
In current implementation the index set IsA has to be continuous sequence at the beginning of the local block of indices.
Create Schur complement system.
[in] | orig | : original system |
[in] | inv_a | : inversion of the A block |
[in] | ia | : index set of the A block, default continuous given by inv_a: proc 1 2 3 |
Orig: ****** ****** **** IA : *** ** ***
SchurComplement::SchurComplement | ( | SchurComplement & | other | ) |
SchurComplement::~SchurComplement | ( | ) |
Destructor. In particular it also delete complement linear system if it was passed in through the set_complement()
method.
SCHUR COMPLEMENT destructor
|
protected |
void SchurComplement::form_rhs | ( | ) |
Compute only right hand side. This is useful when you change only rhs of the original system. TODO: We should ask original system if the matrix has changed (using LazyDependency) and possibly call only form_rhs, then this can be protected
Definition at line 213 of file schur.cc.
|
protected |
COMPUTE A SCHUR COMPLEMENT OF A PETSC MATRIX
given symmetric original matrix Orig has form A B x_1 RHS_1 B' C * x_2 = RHS_2 where the first block is given by index set IsA, and the second block by IsB user has to provide inverse IA of the A-block we suppose that original matrix have non-zero pattern for the schur complement
we return: Shur - schur complement, ShurRHS - RHS of the complemented system: (B' * IA * B - C) * x_2 = (B' * IA * RHS_1 - RHS_2) IAB - a matrix to compute eliminated part of the solution: x_1 = IA * RHS_1 - IAB * x_2
Actually as B' is stored separetly, the routine can be used also for nonsymetric original system
Definition at line 139 of file schur.cc.
|
inline |
Returns distribution of the original system (solved by class SchurComplement).
|
overridevirtual |
|
inline |
Distribution * SchurComplement::make_complement_distribution | ( | ) |
|
protected |
void SchurComplement::set_complement | ( | LinSys_PETSC * | ls | ) |
|
overridevirtual |
|
protected |
|
protected |
|
protected |
|
protected |