Flow123d
release_2.2.0-36-g163dc99
|
Multilevel BDDC based linear system solver. More...
#include <bddcml_wrapper.hpp>
Public Types | |
enum | matrixTypeEnum { GENERAL, SPD, SYMMETRICGENERAL, SPD_VIA_SYMMETRICGENERAL } |
typedef enum matrixTypeEnum | MatrixType |
Public Member Functions | |
BddcmlWrapper (const unsigned numDofs, const unsigned numDofsSub, const MatrixType matrixType=GENERAL, const MPI_Comm comm=MPI_COMM_WORLD, int numSubLoc=1) | |
~BddcmlWrapper () | |
Destructor frees the BDDCML structures. More... | |
void | loadRawMesh (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_data, const int meshDim=0) |
Load raw data about mesh. More... | |
void | prepareMatAssembly (unsigned numElements, unsigned elMatSize) |
Prepare assembly of matrix - reserve space in underlying coordinate matrix object. More... | |
void | insertToMatrix (const SubMat_ &eStiff, const VecUint_ &rowIndices, const VecUint_ &colIndices) |
insert submatrix to system matrix - into coordinate matrix object More... | |
void | finishMatAssembly () |
Finalize assembly of matrix. More... | |
void | insertToRhs (const SubVec_ &eForce, const VecUint_ &dofIndices) |
insert subvector to system rhs vector More... | |
void | writeMatrix (std::ostream &out) |
Outputs. More... | |
void | finishAssembly () |
Compatibility call which does absolutely nothing. More... | |
void | applyConstraints (ConstraintVec_ &constraints, const double factor, const double scalar) |
void | fixDOF (const unsigned index, const double scalar=1.) |
void | insertToDiagonalWeights (const int &index, const double &value) |
void | finishDiagAssembly () |
Finalize assembly of diagonal. More... | |
void | solveSystem (double tol=1.e-7, int numLevels=2, std::vector< int > *numSubAtLevels=NULL, int verboseLevel=0, int maxIt=1000, int ndecrMax=30, bool use_adaptive=false) |
Solve the system. More... | |
double | normRhs () |
Get norm of right-hand side. More... | |
double | normSol () |
Get norm of solution. More... | |
int | giveNumIterations () |
Give number of iteration. More... | |
int | giveConvergedReason () |
Give reason of convergence. More... | |
double | giveCondNumber () |
Give estimate of condition number. More... | |
void | clearMatrix () |
Fill matrix with zeros. More... | |
void | clearRhs () |
Fill RHS with zeros. More... | |
void | clearBC () |
Blank arrays for boundary conditions. More... | |
void | clearSol () |
Fill solution with zeros. More... | |
void | destroyMatrix () |
Destroy matrix. More... | |
void | destroyRhs () |
Destroy RHS. More... | |
void | destroyBC () |
Destroy boundary conditions. More... | |
void | destroySol () |
Destroy solution. More... | |
template<typename VEC1 , typename VEC2 > | |
void | giveSolution (const VEC1 &dofIndices, VEC2 &result) const |
Give access to the solution vector. More... | |
Private Types | |
typedef ublas::matrix< double > | SubMat_ |
typedef ublas::vector< double > | SubVec_ |
typedef std::vector< unsigned > | VecUint_ |
typedef std::vector< std::pair< unsigned, double > > | ConstraintVec_ |
typedef std::map< unsigned, unsigned > | Global2LocalMap_ |
Private Attributes | |
const int | numDofs_ |
number of total dofs More... | |
const int | numDofsSub_ |
number of subdomain dofs More... | |
const MatrixType | matrixType_ |
type of matrix More... | |
const MPI_Comm | comm_ |
communicator More... | |
int | numSubLoc_ |
number of subdomains on process More... | |
int | nProc_ |
number of processors in communicator More... | |
int | rank_ |
ID of processors in communicator. More... | |
int | nDim_ |
space dimension More... | |
int | meshDim_ |
mesh dimension, may differ from space dimension - e.g. 2 for shells in 3D More... | |
int | numElemSub_ |
number of elements in subdomain More... | |
int | numElem_ |
total number of elements More... | |
int | numNodesSub_ |
number of nodes in subdomain More... | |
int | numNodes_ |
total number of nodes More... | |
bool | meshLoaded_ |
std::vector< int > | inet_ |
safety state variable to warn if solver is called without loading subdomain mesh More... | |
std::vector< int > | nnet_ |
std::vector< int > | nndf_ |
std::vector< double > | xyz_ |
std::vector< double > | element_data_ |
array with data on elements, here used for permeability for each element More... | |
std::vector< int > | isngn_ |
Indices of Subdomain Nodes in Global Numbering. More... | |
std::vector< int > | isvgvn_ |
Indices of Subdomain Variables in Global Variable Numbering ( i.e. dof mapping ) More... | |
std::vector< int > | isegn_ |
Indices of Subdomain Elements in Global Numbering. More... | |
Global2LocalMap_ | global2LocalDofMap_ |
type for storage of global to local map More... | |
std::vector< int > | ifix_ |
indices of fixed boundary conditions - ( 0 for free variable, 1 for constrained dof ) More... | |
std::vector< double > | fixv_ |
values of fixed boundary conditions at places of ifix_ - values outside fixed dofs are ignored More... | |
la::MatrixCoo< int, double > | coo_ |
matrix in coordinate format (COO) More... | |
bool | isMatAssembled_ |
true if matrix is assembled More... | |
la::MatrixCoo< int, double > | diagWeightsCoo_ |
diagonal of subdomain matrix in sparse format and global numbers More... | |
bool | isDiagAssembled_ |
true if diagonal is assembled More... | |
std::vector< double > | rhsVec_ |
vector with RHS values restricted to subdomain, i.e. values are repeated at shared nodes More... | |
double | normRhs_ |
norm of the global right-hand side More... | |
std::vector< double > | sol_ |
distributed solution vector More... | |
double | normSol_ |
norm of the global solution More... | |
int | numIter_ |
required number of iterations More... | |
int | convergedReason_ |
double | condNumber_ |
Multilevel BDDC based linear system solver.
This class implements solution of a system of linear equations by multilevel BDDC implementation in BDDCML solver.
The class uses assembly of the matrix into the coordinate matrix format implemented in matrix_coo.hpp file.
prepareMatAssembly - (optional) - reserves memory for sparse coordinate matrix insertToMatrix - called many times, inserts values into coordinate matrix insertToRhs - called many times, inserts values into RHS. If matrix is created and assembled, structure of the vector is deduced from it. Otherwise, it is created as empty. applyConstraints - currently only passes list of boundary conditions into the BDDCML solver, rather then modifying the matrix and rhs
Definition at line 80 of file bddcml_wrapper.hpp.
|
private |
Definition at line 96 of file bddcml_wrapper.hpp.
|
private |
Definition at line 271 of file bddcml_wrapper.hpp.
typedef enum matrixTypeEnum la::BddcmlWrapper::MatrixType |
Definition at line 90 of file bddcml_wrapper.hpp.
|
private |
Definition at line 93 of file bddcml_wrapper.hpp.
|
private |
Definition at line 94 of file bddcml_wrapper.hpp.
|
private |
Definition at line 95 of file bddcml_wrapper.hpp.
Definition at line 83 of file bddcml_wrapper.hpp.
la::BddcmlWrapper::BddcmlWrapper | ( | const unsigned | numDofs, |
const unsigned | numDofsSub, | ||
const MatrixType | matrixType = GENERAL , |
||
const MPI_Comm | comm = MPI_COMM_WORLD , |
||
int | numSubLoc = 1 |
||
) |
Constructor with total number of dofs, subdomain number of dofs, (optional) type of matrix, (optional) communicator ( MPI_COMM_WORLD is the default ), (optional) number of subdomains ( if not given, use number of processes ),
la::BddcmlWrapper::~BddcmlWrapper | ( | ) |
Destructor frees the BDDCML structures.
void la::BddcmlWrapper::applyConstraints | ( | ConstraintVec_ & | constraints, |
const double | factor, | ||
const double | scalar | ||
) |
Apply constraints Currently, scalar is not used in the function and it is kept only for compatibility with constraint functors. Proper scalar is enforced within the BDDC solver.
|
inline |
Blank arrays for boundary conditions.
Definition at line 209 of file bddcml_wrapper.hpp.
|
inline |
Fill matrix with zeros.
Definition at line 196 of file bddcml_wrapper.hpp.
|
inline |
Fill RHS with zeros.
Definition at line 203 of file bddcml_wrapper.hpp.
|
inline |
Fill solution with zeros.
Definition at line 215 of file bddcml_wrapper.hpp.
|
inline |
Destroy boundary conditions.
Definition at line 227 of file bddcml_wrapper.hpp.
|
inline |
Destroy matrix.
Definition at line 221 of file bddcml_wrapper.hpp.
|
inline |
Destroy RHS.
Definition at line 225 of file bddcml_wrapper.hpp.
|
inline |
Destroy solution.
Definition at line 232 of file bddcml_wrapper.hpp.
|
inline |
Compatibility call which does absolutely nothing.
Definition at line 144 of file bddcml_wrapper.hpp.
void la::BddcmlWrapper::finishDiagAssembly | ( | ) |
Finalize assembly of diagonal.
void la::BddcmlWrapper::finishMatAssembly | ( | ) |
Finalize assembly of matrix.
void la::BddcmlWrapper::fixDOF | ( | const unsigned | index, |
const double | scalar = 1. |
||
) |
Set any DOF to zero
[in] | index | Global index of DOF to fix |
[in] | scalar | Value to put on diagonal (default 1.) |
|
inline |
Give estimate of condition number.
Definition at line 193 of file bddcml_wrapper.hpp.
|
inline |
Give reason of convergence.
Definition at line 190 of file bddcml_wrapper.hpp.
|
inline |
Give number of iteration.
Definition at line 187 of file bddcml_wrapper.hpp.
void la::BddcmlWrapper::giveSolution | ( | const VEC1 & | dofIndices, |
VEC2 & | result | ||
) | const |
Give access to the solution vector.
void la::BddcmlWrapper::insertToDiagonalWeights | ( | const int & | index, |
const double & | value | ||
) |
Insert a value to diagonal for creating weights in BDDC
[in] | index | Global index of DOF |
[in] | value | Value to put on diagonal |
void la::BddcmlWrapper::insertToMatrix | ( | const SubMat_ & | eStiff, |
const VecUint_ & | rowIndices, | ||
const VecUint_ & | colIndices | ||
) |
insert submatrix to system matrix - into coordinate matrix object
insert subvector to system rhs vector
void la::BddcmlWrapper::loadRawMesh | ( | 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_data, | ||
const int | meshDim = 0 |
||
) |
Load raw data about mesh.
|
inline |
Get norm of right-hand side.
Definition at line 181 of file bddcml_wrapper.hpp.
|
inline |
Get norm of solution.
Definition at line 184 of file bddcml_wrapper.hpp.
void la::BddcmlWrapper::prepareMatAssembly | ( | unsigned | numElements, |
unsigned | elMatSize | ||
) |
Prepare assembly of matrix - reserve space in underlying coordinate matrix object.
void la::BddcmlWrapper::solveSystem | ( | double | tol = 1.e-7 , |
int | numLevels = 2 , |
||
std::vector< int > * | numSubAtLevels = NULL , |
||
int | verboseLevel = 0 , |
||
int | maxIt = 1000 , |
||
int | ndecrMax = 30 , |
||
bool | use_adaptive = false |
||
) |
Solve the system.
tol | tolerance on relative residual ||res||/||rhs|| |
numLevels | number of levels |
numSubAtLevels | number of subdomains at levels |
verboseLevel | level of verbosity of BDDCML library ( 0 - only fatal errors reported, 1 - mild output, 2 - detailed output ) |
maxIt | maximum number of iterations |
ndecrMax | maximum number of iterations with non-decreasing residual ( used to stop diverging process ) |
use_adaptive | if adaptive constraints should be used by BDDCML |
|
inline |
Outputs.
Definition at line 141 of file bddcml_wrapper.hpp.
|
private |
communicator
Definition at line 242 of file bddcml_wrapper.hpp.
|
private |
estimated condition number of the preconditioned operator only provided for SPD problems solved by PCG ( -1.0 if not meaningful )
Definition at line 294 of file bddcml_wrapper.hpp.
|
private |
reason of convergence: 0 - converged relative residual, desirable state -1 - reached maximal number of iterations -2 - reached maximal number of iterations with non-decreasing residual
Definition at line 290 of file bddcml_wrapper.hpp.
|
private |
matrix in coordinate format (COO)
Definition at line 278 of file bddcml_wrapper.hpp.
|
private |
diagonal of subdomain matrix in sparse format and global numbers
Definition at line 280 of file bddcml_wrapper.hpp.
|
private |
array with data on elements, here used for permeability for each element
Definition at line 265 of file bddcml_wrapper.hpp.
|
private |
values of fixed boundary conditions at places of ifix_ - values outside fixed dofs are ignored
Definition at line 276 of file bddcml_wrapper.hpp.
|
private |
type for storage of global to local map
map from global dof indices to subdomain local indices
Definition at line 272 of file bddcml_wrapper.hpp.
|
private |
indices of fixed boundary conditions - ( 0 for free variable, 1 for constrained dof )
Definition at line 275 of file bddcml_wrapper.hpp.
|
private |
safety state variable to warn if solver is called without loading subdomain mesh
indices of nodes on elements (linearized connectivity) - numbering w.r.t. local subdomain numbering
Definition at line 257 of file bddcml_wrapper.hpp.
|
private |
true if diagonal is assembled
Definition at line 281 of file bddcml_wrapper.hpp.
|
private |
Indices of Subdomain Elements in Global Numbering.
Definition at line 269 of file bddcml_wrapper.hpp.
|
private |
true if matrix is assembled
Definition at line 279 of file bddcml_wrapper.hpp.
|
private |
Indices of Subdomain Nodes in Global Numbering.
Definition at line 267 of file bddcml_wrapper.hpp.
|
private |
Indices of Subdomain Variables in Global Variable Numbering ( i.e. dof mapping )
Definition at line 268 of file bddcml_wrapper.hpp.
|
private |
type of matrix
Definition at line 241 of file bddcml_wrapper.hpp.
|
private |
mesh dimension, may differ from space dimension - e.g. 2 for shells in 3D
Definition at line 249 of file bddcml_wrapper.hpp.
|
private |
Definition at line 256 of file bddcml_wrapper.hpp.
|
private |
space dimension
Definition at line 248 of file bddcml_wrapper.hpp.
|
private |
number of nodal degrees of freedom ( entry for each node ), e.g. [ 3, 3, 3, ... ] for 3D solids
Definition at line 261 of file bddcml_wrapper.hpp.
|
private |
numbers of nodes on elements (determines chunks of nodes for each element in inet), e.g. [ 8, 8, 8, ... ] for linear hexahedra
Definition at line 258 of file bddcml_wrapper.hpp.
|
private |
norm of the global right-hand side
Definition at line 284 of file bddcml_wrapper.hpp.
|
private |
norm of the global solution
Definition at line 287 of file bddcml_wrapper.hpp.
|
private |
number of processors in communicator
Definition at line 245 of file bddcml_wrapper.hpp.
|
private |
number of total dofs
Definition at line 239 of file bddcml_wrapper.hpp.
|
private |
number of subdomain dofs
Definition at line 240 of file bddcml_wrapper.hpp.
|
private |
total number of elements
Definition at line 252 of file bddcml_wrapper.hpp.
|
private |
number of elements in subdomain
Definition at line 251 of file bddcml_wrapper.hpp.
|
private |
required number of iterations
Definition at line 289 of file bddcml_wrapper.hpp.
|
private |
total number of nodes
Definition at line 254 of file bddcml_wrapper.hpp.
|
private |
number of nodes in subdomain
Definition at line 253 of file bddcml_wrapper.hpp.
|
private |
number of subdomains on process
Definition at line 243 of file bddcml_wrapper.hpp.
|
private |
ID of processors in communicator.
Definition at line 246 of file bddcml_wrapper.hpp.
|
private |
vector with RHS values restricted to subdomain, i.e. values are repeated at shared nodes
Definition at line 283 of file bddcml_wrapper.hpp.
|
private |
distributed solution vector
Definition at line 286 of file bddcml_wrapper.hpp.
|
private |
linearized array of coordinates - all x values, all y values, all z values ( if present ) i.e. [ x_0 x_1 x_2 ... x_(numNodes - 1) y_0 y_1 y_2 ... y_(numNodes - 1) z_0 z_1 z_2 ... z_(numNodes - 1) ]
Definition at line 263 of file bddcml_wrapper.hpp.