DOUG 0.2

# Robust Coarse Spaces

Implementation is based on the work by Ivan Graham, Robert Scheichl and Jan Van lent, "Robust Coarse Spaces for Overlapping Schwarz Methods".

## Input

• - injection matrices mapping from the vectors taking values at all points of the fine mesh to vectors taking values at the points in the interior of the support of basis function i. This also identifies aggregates with the overlap included (although no aggregate neighbour information is directly available).
• A - system matrix
• <unavailable, ie may leave out for the first implementation> - neighbour information, i.e. which aggregates overlap.
Note:
At the moment projection matrices are only available without overlap (i.e. simple aggregates). The extended aggregates are extracted from the restriction matrix of the smoothing method.

## Output

• - restriction matrix from fine space to coarse space

## Algorithm

Note:
No parallel implementation is yet available

### Definitions

• n - number of fine-level subdomains
• - number of coarse nodes (number of coarse node supports), also number of fine aggregates

### General description

To get restriction matrix we need to solve the problem (g - vector of Lagrange multipliers in the energy minimization problem) The CG solver (see preconditioner below) can be found in pcg_forRCS(). Because matrix B is not sparse special datatype RobustCoarseMtx_mod::SumOfInversedSubMtx has been introduced. Matrix-vector multiplication for this type of matrix is implemented in the subroutine SOISMtx_pmvm().

Then we get - rows of the with The implementation of this last step can be found in RobustRestrictMtxBuild().

### Construction of preconditioner

CG is slow, so preconditioner must be introduced for .

Preconditioner C for the B is Multiplying a vector by the matrix C can be implemented efficiently using the following formulas which involve only sparse matrices   Note:
currently I's for all combinations of R's are calculated, non-overlaping are simply zero

The data of C preconditioner is stored in pcgRobust_mod::RobustPreconditionMtx datatype. The implementation of preconditioner is in 2 subroutines