|
Flow123d
|
Abstract linear system class. More...
#include <la_linsys_new.hh>


Public Types | |
| enum | SetValuesMode { INSERT =INSERT_VALUES, ADD =ADD_VALUES, ALLOCATE, DONE, NONE, INSERT =INSERT_VALUES, ADD =ADD_VALUES, ALLOCATE, DONE, NONE } |
| enum | SetValuesMode { INSERT =INSERT_VALUES, ADD =ADD_VALUES, ALLOCATE, DONE, NONE, INSERT =INSERT_VALUES, ADD =ADD_VALUES, ALLOCATE, DONE, NONE } |
| enum | LinSysType { PETSC_MPIAIJ_preallocate_by_assembly, PETSC_MPIAIJ_assembly_by_triples, BDDC, PETSC_schur_complement } |
Public Member Functions | |
| LinSys (const Distribution *rows_ds) | |
| LinSys (LinSys &other) | |
| unsigned int | size () |
| unsigned int | vec_lsize () |
| virtual const Mat & | get_matrix () |
| virtual const Vec & | get_rhs () |
| void | set_matrix_changed () |
| void | set_rhs_changed () |
| bool | is_matrix_changed () |
| bool | is_rhs_changed () |
| virtual PetscErrorCode | set_matrix (Mat &matrix, MatStructure str) |
| virtual PetscErrorCode | set_rhs (Vec &rhs) |
| virtual PetscErrorCode | mat_zero_entries () |
| virtual PetscErrorCode | rhs_zero_entries () |
| const Vec & | get_solution () |
| void | set_solution (double *sol_array) |
| double * | get_solution_array () |
| virtual void | get_whole_solution (std::vector< double > &globalSolution) |
| virtual void | set_whole_solution (std::vector< double > &globalSolution) |
| virtual void | start_allocation () |
| virtual void | start_add_assembly () |
| virtual void | start_insert_assembly () |
| virtual void | finish_assembly ()=0 |
| virtual void | mat_set_values (int nrow, int *rows, int ncol, int *cols, double *vals)=0 |
| void | mat_set_value (int row, int col, double val) |
| virtual void | rhs_set_values (int nrow, int *rows, double *vals)=0 |
| 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) |
| virtual void | apply_constrains (double scalar)=0 |
| virtual int | solve ()=0 |
| double | get_residual_norm () |
| double | get_relative_accuracy () |
| virtual double | get_absolute_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 void | view () |
| virtual void | set_from_input (const Input::Record in_rec) |
| virtual double | get_solution_precision ()=0 |
| virtual | ~LinSys () |
| LinSys (unsigned int lsize, double *sol_array=NULL) | |
| unsigned int | size () |
| unsigned int | vec_lsize () |
| const Distribution & | ds () |
| const Mat & | get_matrix () |
| const Vec & | get_rhs () |
| const Vec & | get_solution () |
| double * | get_solution_array () |
| virtual void | start_allocation ()=0 |
| void | start_add_assembly () |
| void | start_insert_assembly () |
| void | partial_assembly () |
| void | finish_assembly () |
| virtual void | mat_set_values (int nrow, int *rows, int ncol, int *cols, PetscScalar *vals)=0 |
| void | mat_set_value (int row, int col, PetscScalar val) |
| void | rhs_set_values (int nrow, int *rows, PetscScalar *vals) |
| void | rhs_set_value (int row, PetscScalar val) |
| void | set_values (int nrow, int *rows, int ncol, int *cols, PetscScalar *mat_vals, PetscScalar *rhs_vals, std::vector< bool > &constrains_row_mask=std::vector(0), double *constrain_values=NULL) |
| void | add_constrain (int row, double value) |
| void | apply_constrains (std::vector< Constrain > &constraints) |
| virtual int | solve () |
| void | set_symmetric (bool flag=true) |
| bool | is_symmetric () |
| void | set_positive_definite (bool flag=true) |
| bool | is_positive_definite () |
| void | view (std::ostream output_stream, int *output_mapping=NULL) |
| virtual | ~LinSys () |
Public Attributes | |
| LinSysType | type |
| Particular type of the linear system. More... | |
Static Public Attributes | |
| static Input::Type::AbstractRecord | input_type |
Protected Types | |
| typedef std::pair< unsigned, double > | Constraint_ |
| typedef std::vector< Constraint_ > | ConstraintVec_ |
Protected Member Functions | |
| virtual void | preallocate_matrix ()=0 |
| virtual void | preallocate_values (int nrow, int *rows, int ncol, int *cols)=0 |
Protected Attributes | |
| 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_ |
| Distribution | vec_ds |
| Distribution of continuous blocks of system rows among the processors. More... | |
| bool | symmetric |
| Flag for the symmetric system. More... | |
| bool | positive_definite |
| Flag for positive definite system. More... | |
| bool | own_solution |
| Indicates if the solution array has been allocated by this class. More... | |
| SetValuesMode | status |
| Set value status of the linear system. More... | |
| Mat | matrix |
| Petsc matrix of the problem. More... | |
| Vec | rhs |
| PETSc vector constructed with vx array. More... | |
| Vec | solution |
| PETSc vector constructed with vb array. More... | |
| double * | v_rhs |
| RHS vector. More... | |
| double * | v_solution |
| Vector of solution. More... | |
| int * | subdomain_indices |
| Remember indices which created mapping. More... | |
| Mat | local_matrix |
| local matrix of subdomain (used in LinSys_MATIS) More... | |
Private Member Functions | |
| LinSys * | block (i, j) MatrixArray *matrix() virtual solve(Vector solution |
Private Attributes | |
| LinSys Vector | RHS |
Friends | |
| class | SchurComplement |
| void | SchurComplement::form_schur () |
Abstract linear system class.
LinSys - matrix and a particular way how to compute solution for given RHS, i.e. this class can perform action of the matrix inverse
This is abstract class for members of possible hierarchical tree of the whole system.
Linear system consists of Matrix, RHS and solution. It provides general methods for:
Method operates on the system as single object. But some methods for matrix only manipulation can be provided until we have matrix as separate class.
TODO:
Linear system consists of Matrix, RHS and solution. It provides general methods for:
Method operates on the system as single object. But some methods for matrix only manipulation can be provided until we have matrix as separate class.
Definition at line 182 of file la_linsys_new.hh.
|
protected |
|
protected |
| enum LinSys::LinSysType |
| Enumerator | |
|---|---|
| PETSC_MPIAIJ_preallocate_by_assembly | |
| PETSC_MPIAIJ_assembly_by_triples | |
| BDDC | |
| PETSC_schur_complement | |
Definition at line 81 of file linsys_proposed.hh.
| Enumerator | |
|---|---|
| INSERT | |
| ADD | |
| ALLOCATE | |
| DONE | |
| NONE | |
| INSERT | |
| ADD | |
| ALLOCATE | |
| DONE | |
| NONE | |
Definition at line 73 of file linsys_proposed.hh.
|
inline |
Constructor. Constructor of abstract class should not be called directly, but is used for initialization of member common to all particular solvers.
| comm | - MPI communicator |
TODO: Vector solution_ is now initialized to NULL, but it should be rather allocated in the constructor instead of the method set_solution().
| LinSys::LinSys | ( | unsigned int | lsize, |
| double * | sol_array = NULL |
||
| ) |
Constructor. Constructor of abstract class should not be called directly, but is used for initialization of member common to all particular solvers.
| lsize | - local size of the solution vector |
| sol_array | - optionally one can provide pointer to array allocated to size lsize, where the solution should be stored, |
|
virtual |
| void LinSys::add_constrain | ( | int | row, |
| double | value | ||
| ) |
Adds Dirichlet constrain.
| row | - global numeb of row that should be eliminated. |
| value | - solution value at the given row |
|
inline |
| void LinSys::apply_constrains | ( | std::vector< Constrain > & | constraints) |
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?
|
pure virtual |
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?
Implemented in LinSys_PETSC, and LinSys_BDDC.
|
private |
|
inline |
Returns whole Distribution class for distribution of the solution.
Definition at line 119 of file linsys_proposed.hh.
| void LinSys::finish_assembly | ( | ) |
Finish assembly of the whole system. For PETSC this should call MatEndAssembly with MAT_FINAL_ASSEMBLY
|
pure virtual |
Finish assembly of the whole system. For PETSC this should call MatEndAssembly with MAT_FINAL_ASSEMBLY
Implemented in LinSys_PETSC, and LinSys_BDDC.

|
inlinevirtual |
Returns information on absolute solver accuracy
Reimplemented in LinSys_PETSC.
|
inline |
Returns PETSC matrix (only for PETSC solvers)
Definition at line 125 of file linsys_proposed.hh.
|
inlinevirtual |
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 in LinSys_PETSC.
Definition at line 180 of file linsys.hh.

|
inline |
|
inline |
|
inline |
Returns RHS vector (only for PETSC solvers)
Definition at line 131 of file linsys_proposed.hh.
|
inlinevirtual |
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 in LinSys_PETSC.
Definition at line 195 of file linsys.hh.

|
inline |
Returns PETSC vector with solution. Underlying array can be provided on construction. Can this be implemented for BDDC?
Definition at line 138 of file linsys_proposed.hh.
|
inline |
|
inline |
Returns local part of solution vector. Can this be implemented for BDDC?
Definition at line 145 of file linsys_proposed.hh.
|
inline |
|
pure virtual |
Get precision of solving
Implemented in LinSys_PETSC, SchurComplement, and LinSys_BDDC.

|
inlinevirtual |
Returns whole solution vector.
Reimplemented in LinSys_PETSC, and LinSys_BDDC.
|
inline |
|
inline |
|
inline |
|
inline |
Definition at line 284 of file linsys_proposed.hh.
|
inline |
|
inline |
|
inline |
|
inline |
Definition at line 272 of file linsys_proposed.hh.
|
inline |
|
inline |
Shortcut for assembling just one element into the matrix. Similarly we can provide method accepting armadillo matrices.
Definition at line 183 of file linsys_proposed.hh.
|
inline |
|
pure virtual |
Assembly full rectangular submatrix into the system matrix. Should be virtual, implemented differently in particular solvers.
|
pure virtual |
Assembly full rectangular submatrix into the system matrix. Should be virtual, implemented differently in particular solvers.
Implemented in LinSys_PETSC, and LinSys_BDDC.

|
inlinevirtual |
Clears entries of the matrix
Reimplemented in LinSys_PETSC, and LinSys_BDDC.
Definition at line 244 of file linsys.hh.

| void LinSys::partial_assembly | ( | ) |
May not be necessary. For PETSC this should call MatEndAssembly with MAT_PARTIAL_ASSEMBLY
|
protectedpure virtual |
Protected methods used in preallocate_by_assembly solvers.
Implemented in LinSys_MATIS, LinSys_MPIAIJ, and LinSys_PETSC.
|
protectedpure virtual |
Protected methods used in preallocate_by_assembly solvers.
Implemented in LinSys_MATIS, LinSys_MPIAIJ, and LinSys_PETSC.
|
inline |
Shorcut for assembling just one element into RHS vector.
Definition at line 204 of file linsys_proposed.hh.
|
inline |
|
inline |
Set values of the system right-hand side. Should be virtual, implemented differently in particular solvers.
Definition at line 190 of file linsys_proposed.hh.
|
pure virtual |
Set values of the system right-hand side. Should be virtual, implemented differently in particular solvers.
Implemented in LinSys_PETSC, and LinSys_BDDC.

|
inlinevirtual |
Clears entries of the right-hand side
Reimplemented in LinSys_PETSC, and LinSys_BDDC.
Definition at line 252 of file linsys.hh.

|
inlinevirtual |
Sets basic parameters of LinSys defined by user in input file and used to calculate
Reimplemented in LinSys_PETSC, and LinSys_BDDC.
Definition at line 562 of file linsys.hh.

|
inlinevirtual |
Sets PETSC matrix (only for PETSC solvers)
Reimplemented in LinSys_PETSC.
|
inline |
|
inline |
|
inline |
Provides user knowledge about positive definiteness.
Definition at line 278 of file linsys_proposed.hh.
|
inline |
|
inlinevirtual |
Sets RHS vector (only for PETSC solvers)
Reimplemented in LinSys_PETSC.
|
inline |
|
inline |
|
inline |
Provides user knowledge about positive definiteness via symmetric general approach. This is useful for solving Darcy flow by mixed hybrid method, where blocks on subdomains are saddle point but interface among subdomains is only at the block of Lagrange multipliers and is symmetric positive definite. Problem condensed to interface can thus be solved by PCG method, although original problem is saddle point.
|
inline |
Provides user knowledge about symmetry.
Definition at line 266 of file linsys_proposed.hh.
|
inline |
|
inline |
Shortcut to assembly into matrix and RHS in one call. This can also apply constrains at assembly time (only in add assembly regime).
Constrains can either be set before through add_constrain. Or by additional parameters if we have only per element knowledge about boundary conditions.
Definition at line 215 of file linsys_proposed.hh.
|
inline |
|
inline |
Shortcut to assembly into matrix and RHS in one call, possibly apply Dirichlet boundary conditions. row_dofs - are global indices of rows of dense matrix and rows of dense vector in global system col_dofs - are global indices of columns of the matrix, and possibly
Application of Dirichlet conditions: 1) Rows with negative dofs are set to zero. 2) Cols with negative dofs are eliminated. 3) If there are entries on global diagonal. We determine value K either from diagonal of local matrix, or (if it is zero) from diagonal average.
|
inlinevirtual |
|
inline |
Returns global system size.
Definition at line 106 of file linsys_proposed.hh.
|
inline |
|
virtual |
Solve the system. parameters should by provided in input file (currently INI file, but will be changed to JSON) If we realize that we need to set something, rather add some set_* function. double tol = 1.e-7, //!< tolerance on relative residual ||res||/||rhs|| int numLevels = 2, //!< number of levels std::vector<int> * numSubAtLevels = NULL, //!< number of subdomains at levels int verboseLevel = 0, //!< level of verbosity of BDDCML library
!< ( 0 - only fatal errors reported, !< 1 - mild output, !< 2 - detailed output ) int maxIt = 1000, //!< maximum number of iterations int ndecrMax = 30 ); //!< maximum number of iterations with non-decreasing residual !< ( used to stop diverging process )
Returns convergence reason (form PETSC)
Reimplemented in SchurComplement, LinSys_PETSC, and LinSys_BDDC.
|
pure virtual |
Solve the system and return convergence reason.
Implemented in SchurComplement, LinSys_PETSC, and LinSys_BDDC.

| void LinSys::start_add_assembly | ( | ) |
Switch linear system into adding assembly. (the only one supported by triplets ??)
|
inlinevirtual |
Switch linear system into adding assembly. (the only one supported by triplets ??)
Reimplemented in LinSys_PETSC.
Definition at line 317 of file linsys.hh.

|
pure virtual |
Switch linear system into allocating assembly. (only for PETSC_MPIAIJ_preallocate_by_assembly)
Implemented in LinSys_MATIS, LinSys_MPIAIJ, and LinSys_PETSC.
|
inlinevirtual |
Switch linear system into allocating assembly. (only for PETSC_MPIAIJ_preallocate_by_assembly)
Reimplemented in LinSys_MATIS, LinSys_MPIAIJ, and LinSys_PETSC.
Definition at line 309 of file linsys.hh.

| void LinSys::start_insert_assembly | ( | ) |
Switch linear system into insert assembly. (not currently used)
|
inlinevirtual |
Switch linear system into insert assembly. (not currently used)
Reimplemented in LinSys_PETSC.
|
inline |
Returns local system size. (for partitioning of solution vectors) for PETSC_MPIAIJ it is also partitioning of the matrix
Definition at line 113 of file linsys_proposed.hh.
|
inline |
| void LinSys::view | ( | std::ostream | output_stream, |
| int * | output_mapping = NULL |
||
| ) |
Output the system in the Matlab format possibly with given ordering. Rather we shoud provide output operator <<, since it is more flexible.
|
inlinevirtual |
Output the system in the Matlab format possibly with given ordering. Rather we shoud provide output operator <<, since it is more flexible.
Reimplemented in LinSys_PETSC.
|
friend |
|
friend |
|
protected |
|
protected |
|
protected |
|
static |
|
protected |
local matrix of subdomain (used in LinSys_MATIS)
Definition at line 321 of file linsys_proposed.hh.
|
protected |
|
protected |
Petsc matrix of the problem.
Definition at line 313 of file linsys_proposed.hh.
|
protected |
|
protected |
Indicates if the solution array has been allocated by this class.
Definition at line 310 of file linsys_proposed.hh.
|
protected |
|
protected |
Flag for positive definite system.
Definition at line 309 of file linsys_proposed.hh.
|
protected |
|
private |
Definition at line 186 of file la_linsys_new.hh.
|
protected |
PETSc vector constructed with vx array.
Definition at line 314 of file linsys_proposed.hh.
|
protected |
|
protected |
|
protected |
|
protected |
PETSc vector constructed with vb array.
Definition at line 315 of file linsys_proposed.hh.
|
protected |
|
protected |
Set value status of the linear system.
Definition at line 311 of file linsys_proposed.hh.
|
protected |
|
protected |
Remember indices which created mapping.
Definition at line 320 of file linsys_proposed.hh.
|
protected |
Flag for the symmetric system.
Definition at line 308 of file linsys_proposed.hh.
| LinSysType LinSys::type |
Particular type of the linear system.
MAT_IS or MAT_MPIAIJ anyone can inquire my type
Definition at line 100 of file linsys_proposed.hh.
|
protected |
RHS vector.
Definition at line 316 of file linsys_proposed.hh.
|
protected |
Vector of solution.
Definition at line 317 of file linsys_proposed.hh.
|
protected |
|
protected |
Distribution of continuous blocks of system rows among the processors.
Definition at line 307 of file linsys_proposed.hh.
1.8.4