# PCNN
Balancing Neumann-Neumann for scalar elliptic PDEs. 
## Options Database Keys

- ***-pc_nn_turn_off_first_balancing -*** do not balance the residual before solving the local Neumann problems
(this skips the first coarse grid solve in the preconditioner)
- ***-pc_nn_turn_off_second_balancing -*** do not balance the solution solving the local Neumann problems
(this skips the second coarse grid solve in the preconditioner)
- ***-pc_is_damp_fixed <fact> -*** 
- ***-pc_is_remove_nullspace_fixed -*** 
- ***-pc_is_set_damping_factor_floating <fact> -*** 
- ***-pc_is_not_damp_floating -*** 
- ***-pc_is_not_remove_nullspace_floating -*** 



## Options Database prefixes for the subsolvers this preconditioner uses

- ***-nn_coarse_pc_ -*** for the coarse grid preconditioner
- ***-is_localD_pc_ -*** for the Dirichlet subproblem preconditioner
- ***-is_localN_pc_ -*** for the Neumann subproblem preconditioner





## Notes
The matrix used with this preconditioner must be of type `MATIS`

Unlike more 'conventional' Neumann-Neumann preconditioners this iterates over ALL the
degrees of freedom, NOT just those on the interface (this allows the use of approximate solvers
on the subdomains; though in our experience using approximate solvers is slower.).

Contributed by Paulo Goldfeld


## See Also
 `PCCreate()`, `PCSetType()`, `PCType`, `PC`, `MATIS`, `PCBDDC`

## Level
intermediate

## Location
<A HREF="PETSC_DOC_OUT_ROOT_PLACEHOLDER/src/ksp/pc/impls/is/nn/nn.c.html#PCNN">src/ksp/pc/impls/is/nn/nn.c</A>


---
[Edit on GitLab](https://gitlab.com/petsc/petsc/-/edit/release/src/ksp/pc/impls/is/nn/nn.c)


[Index of all PC routines](index.md)  
[Table of Contents for all manual pages](/docs/manualpages/index.md)  
[Index of all manual pages](/docs/manualpages/singleindex.md)  
