Flow123d
master-f44eb46
|
#include <linsys_BDDC.hh>
Public Types | |
typedef LinSys | FactoryBaseType |
typedef la::BddcmlWrapper::MatrixType | BDDCMatrixType |
Public Types inherited from LinSys | |
enum | SetValuesMode { INSERT =INSERT_VALUES , ADD =ADD_VALUES , ALLOCATE , DONE , NONE } |
Public Member Functions | |
LinSys_BDDC (const Distribution *rows_ds, const bool swap_sign=false) | |
void | set_tolerances (double r_tol, double a_tol, double d_tol, unsigned int max_it) override |
Sets tolerances. Note that BDDC does not use a_tol. More... | |
void | load_mesh (BDDCMatrixType matrix_type, const int nDim, const int numNodes, const int numDofs, const std::vector< int > &inet, const std::vector< int > &nnet, const std::vector< int > &nndf, const std::vector< int > &isegn, const std::vector< int > &isngn, const std::vector< int > &isvgvn, const std::vector< double > &xyz, const std::vector< double > &element_permeability, const int meshDim) |
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 | diagonal_weights_set_value (int global_index, double value) |
PetscErrorCode | mat_zero_entries () override |
PetscErrorCode | rhs_zero_entries () override |
void | finish_assembly () override |
void | apply_constrains (double scalar=1.) override |
LinSys::SolveInfo | solve () override |
void | set_from_input (const Input::Record in_rec) override |
double | get_solution_precision () override |
double | compute_residual () override |
void | print_matrix (std::ostream &out) |
~LinSys_BDDC () | |
Public Member Functions inherited from LinSys | |
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 &, MatStructure) |
virtual PetscErrorCode | set_rhs (Vec &) |
const Vec & | get_solution () |
void | set_solution (Vec sol_vec) |
void | set_solution (double *sol_array) |
void | set_solution () |
double * | get_solution_array () |
virtual void | start_allocation () |
virtual void | start_add_assembly () |
virtual void | start_insert_assembly () |
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_local_system (LocalSystem &local, const std::vector< LongIdx > &local_to_global_map) |
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 () |
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 (string) |
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 () |
Private Types | |
typedef la::BddcmlWrapper | Bddcml_ |
Private Attributes | |
int | max_nondecr_it_ |
parameters expected from input file: More... | |
int | number_of_levels_ |
number of levels in the multilevel method More... | |
bool | use_adaptive_bddc_ |
should adaptive BDDC be used? More... | |
int | bddcml_verbosity_level_ |
const bool | swap_sign_ |
swap sign of matrix and rhs entries, e.g. to make the matrix SPD More... | |
std::vector< int > | isngn_ |
indices of subdomain nodes in global numbering More... | |
std::vector< double > | locSolution_ |
subdomain solution More... | |
Vec | locSolVec_ |
local solution PETSc vector - sequential More... | |
VecScatter | VSpetscToSubScatter_ |
scatter from solution_ to locSolVec_ More... | |
Bddcml_ * | bddcml_ |
BDDCML wrapper. More... | |
Static Private Attributes | |
static const int | registrar = LinSys_BDDC::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_ |
Protected Attributes inherited from LinSys | |
double | r_tol_ |
relative tolerance of linear solver More... | |
double | a_tol_ |
absolute tolerance of linear solver More... | |
double | d_tol_ |
tolerance for divergence 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_vec_ |
Indicates if the solution vector has been allocated by this class. 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_ |
Static Protected Attributes inherited from LinSys | |
static constexpr double | default_r_tol_ = 1e-7 |
static constexpr double | default_a_tol_ = 1e-11 |
static constexpr double | default_d_tol_ = 10000 |
static constexpr unsigned int | default_max_it_ = 1000 |
Definition at line 39 of file linsys_BDDC.hh.
Definition at line 44 of file linsys_BDDC.hh.
|
private |
Definition at line 141 of file linsys_BDDC.hh.
typedef LinSys LinSys_BDDC::FactoryBaseType |
Definition at line 43 of file linsys_BDDC.hh.
LinSys_BDDC::LinSys_BDDC | ( | const Distribution * | rows_ds, |
const bool | swap_sign = false |
||
) |
Definition at line 65 of file linsys_BDDC.cc.
LinSys_BDDC::~LinSys_BDDC | ( | ) |
Definition at line 290 of file linsys_BDDC.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 231 of file linsys_BDDC.cc.
|
inlineoverridevirtual |
Explicitly compute residual and its norm for current solution.
Implements LinSys.
Definition at line 103 of file linsys_BDDC.hh.
void LinSys_BDDC::diagonal_weights_set_value | ( | int | global_index, |
double | value | ||
) |
Definition at line 201 of file linsys_BDDC.cc.
|
overridevirtual |
Finish assembly of the whole system. For PETSC this should call MatEndAssembly with MAT_FINAL_ASSEMBLY
Implements LinSys.
Definition at line 224 of file linsys_BDDC.cc.
|
static |
|
overridevirtual |
void LinSys_BDDC::load_mesh | ( | BDDCMatrixType | matrix_type, |
const int | nDim, | ||
const int | numNodes, | ||
const int | numDofs, | ||
const std::vector< int > & | inet, | ||
const std::vector< int > & | nnet, | ||
const std::vector< int > & | nndf, | ||
const std::vector< int > & | isegn, | ||
const std::vector< int > & | isngn, | ||
const std::vector< int > & | isvgvn, | ||
const std::vector< double > & | xyz, | ||
const std::vector< double > & | element_permeability, | ||
const int | meshDim | ||
) |
Extracted from bddcml_wrapper.hpp:
nDim - dimension of the ambient space numNodes - number of nodes (auxiliary points related to dofs) numDofs - size of the linear system inet - local dof indices on elements nnet - numbers of dofs per elements nndf - number of dofs per node, size numNodes
isegn - global indices of subdomain elements isngn - global indices of subdomain nodes isvggn - global indices of subdomain dofs xyz - coordinates of nodes element_permability - scaling parameters one per element meshDim - topological dimension of the problem (e.g. shell in 3d)
Definition at line 91 of file linsys_BDDC.cc.
|
overridevirtual |
Assembly full rectangular submatrix into the system matrix. Should be virtual, implemented differently in particular solvers.
Implements LinSys.
Definition at line 155 of file linsys_BDDC.cc.
|
overridevirtual |
Clears entries of the matrix
Reimplemented from LinSys.
Definition at line 208 of file linsys_BDDC.cc.
void LinSys_BDDC::print_matrix | ( | std::ostream & | out | ) |
Prints matrix in coordinate format, can be load by matlab as a sparse matrix. Works only on 1 proc.
Definition at line 366 of file linsys_BDDC.cc.
|
overridevirtual |
Set values of the system right-hand side. Should be virtual, implemented differently in particular solvers.
Implements LinSys.
Definition at line 180 of file linsys_BDDC.cc.
|
overridevirtual |
Clears entries of the right-hand side
Reimplemented from LinSys.
Definition at line 216 of file linsys_BDDC.cc.
|
overridevirtual |
Sets basic parameters of LinSys defined by user in input file and used to calculate
Reimplemented from LinSys.
Definition at line 279 of file linsys_BDDC.cc.
|
overridevirtual |
Sets tolerances. Note that BDDC does not use a_tol.
Implements LinSys.
Definition at line 79 of file linsys_BDDC.cc.
|
overridevirtual |
Solve the system and return convergence reason.
Implements LinSys.
Definition at line 238 of file linsys_BDDC.cc.
|
private |
BDDCML wrapper.
Definition at line 142 of file linsys_BDDC.hh.
|
private |
level of verbosity of BDDCML library ( 0 - only fatal errors reported, 1 - mild output, 2 - detailed output )//!< should adaptive BDDC be used?
Definition at line 129 of file linsys_BDDC.hh.
|
private |
indices of subdomain nodes in global numbering
Definition at line 136 of file linsys_BDDC.hh.
|
private |
subdomain solution
Definition at line 137 of file linsys_BDDC.hh.
|
private |
local solution PETSc vector - sequential
Definition at line 138 of file linsys_BDDC.hh.
|
private |
parameters expected from input file:
maximum number of iterations of linear solver with non-decreasing residual
Definition at line 126 of file linsys_BDDC.hh.
|
private |
number of levels in the multilevel method
Definition at line 127 of file linsys_BDDC.hh.
|
staticprivate |
Registrar of class to factory.
Definition at line 123 of file linsys_BDDC.hh.
|
private |
swap sign of matrix and rhs entries, e.g. to make the matrix SPD
Definition at line 134 of file linsys_BDDC.hh.
|
private |
should adaptive BDDC be used?
Definition at line 128 of file linsys_BDDC.hh.
|
private |
scatter from solution_ to locSolVec_
Definition at line 139 of file linsys_BDDC.hh.