# PetscSFComposeInverse
Compose a new `PetscSF` by putting the inverse of the second `PetscSF` under the first one 
## Synopsis
```
#include "petscsf.h" 
PetscErrorCode PetscSFComposeInverse(PetscSF sfA, PetscSF sfB, PetscSF *sfBA)
```

## Input Parameters

- ***sfA -*** The first `PetscSF`
- ***sfB -*** The second `PetscSF`



## Output Parameters

- ***sfBA -*** The composite `PetscSF`.





## Notes
Currently, the two SFs must be defined on congruent communicators and they must be true star
forests, i.e. the same leaf is not connected with different roots. Even more, all roots of the
second SF must have a degree of 1, i.e., no roots have more than one leaf connected.

sfA's leaf space and sfB's leaf space might be partially overlapped. The composition builds
a graph with sfA's roots and sfB's roots only when there is a path between them. Unconnected
roots are not in sfBA. Doing a Bcast on the new SF is equivalent to doing a Bcast on sfA, then
a Reduce on sfB, on connected roots.


## See Also
 `PetscSF`, `PetscSFCompose()`, `PetscSFGetGraph()`, `PetscSFSetGraph()`, `PetscSFCreateInverseSF()`

## Level
developer

## Location
<A HREF="PETSC_DOC_OUT_ROOT_PLACEHOLDER/src/vec/is/sf/interface/sf.c.html#PetscSFComposeInverse">src/vec/is/sf/interface/sf.c</A>


---
[Edit on GitLab](https://gitlab.com/petsc/petsc/-/edit/release/src/vec/is/sf/interface/sf.c)


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