petsc-3.5.4 2015-05-23
Report Typos and Errors

# PCLSC

Preconditioning for Schur complements, based on Least Squares Commutators

### Options Database Key

-pc_lsc_scale_diag -Use the diagonal of A for scaling

### Notes

This preconditioner will normally be used with PCFieldSplit to precondition the Schur complement, but it can be used for any Schur complement system. Consider the Schur complement

```   S = A11 - A10 inv(A00) A01
```

PCLSC currently doesn't do anything with A11, so let's assume it is 0. The idea is that a good approximation to inv(S) is given by

```   inv(A10 A01) A10 A00 A01 inv(A10 A01)
```

The product A10 A01 can be computed for you, but you can provide it (this is usually more efficient anyway). In the case of incompressible flow, A10 A10 is a Laplacian, call it L. The current interface is to hang L and a preconditioning matrix Lp on the preconditioning matrix.

If you had called KSPSetOperators(ksp,S,Sp), S should have type MATSCHURCOMPLEMENT and Sp can be any type you like (PCLSC doesn't use it directly) but should have matrices composed with it, under the names "LSC_L" and "LSC_Lp". For example, you might have setup code like this

```   PetscObjectCompose((PetscObject)Sp,"LSC_L",(PetscObject)L);
PetscObjectCompose((PetscObject)Sp,"LSC_Lp",(PetscObject)Lp);
```

And then your Jacobian assembly would look like

```   PetscObjectQuery((PetscObject)Sp,"LSC_L",(PetscObject*)&L);
PetscObjectQuery((PetscObject)Sp,"LSC_Lp",(PetscObject*)&Lp);
if (L) { assembly L }
if (Lp) { assemble Lp }
```

With this, you should be able to choose LSC preconditioning, using e.g. ML's algebraic multigrid to solve with L

```   -fieldsplit_1_pc_type lsc -fieldsplit_1_lsc_pc_type ml
```

Since we do not use the values in Sp, you can still put an assembled matrix there to use normal preconditioners.