:orphan:
# PetscSFGetGraph
Get the graph specifying a parallel star forest 
## Synopsis
```
#include "petscsf.h" 
PetscErrorCode PetscSFGetGraph(PetscSF sf, PetscInt *nroots, PetscInt *nleaves, const PetscInt **ilocal, const PetscSFNode **iremote)
```
Not Collective


## Input Parameter

- ***sf -*** star forest



## Output Parameters

- ***nroots -*** number of root vertices on the current process (these are possible targets for other process to attach leaves)
- ***nleaves -*** number of leaf vertices on the current process, each of these references a root on any process
- ***ilocal -*** locations of leaves in leafdata buffers (if returned value is `NULL`, it means leaves are in contiguous storage)
- ***iremote -*** remote locations of root vertices for each leaf on the current process





## Notes
We are not currently requiring that the graph is set, thus returning `nroots` = -1 if it has not been set yet

The returned `ilocal` and `iremote` might contain values in different order than the input ones in `PetscSFSetGraph()`


## Fortran Notes
The returned `iremote` array is a copy and must be deallocated after use. Consequently, if you
want to update the graph, you must call `PetscSFSetGraph()` after modifying the `iremote` array.

To check for a `NULL` `ilocal` use
```none
if (loc(ilocal) == loc(PETSC_NULL_INTEGER)) then
```


## See Also
 `PetscSF`, `PetscSFType`, `PetscSFCreate()`, `PetscSFView()`, `PetscSFSetGraph()`

## Level
intermediate

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

## Examples
<A HREF="PETSC_DOC_OUT_ROOT_PLACEHOLDER/src/ts/tutorials/ex11_sa.c.html">src/ts/tutorials/ex11_sa.c</A><BR>
<A HREF="PETSC_DOC_OUT_ROOT_PLACEHOLDER/src/vec/is/sf/tutorials/ex1.c.html">src/vec/is/sf/tutorials/ex1.c</A><BR>
<A HREF="PETSC_DOC_OUT_ROOT_PLACEHOLDER/src/vec/is/sf/tutorials/ex1f.F90.html">src/vec/is/sf/tutorials/ex1f.F90</A><BR>

## Implementations

<A HREF="PETSC_DOC_OUT_ROOT_PLACEHOLDER/src/vec/is/sf/impls/basic/allgatherv/sfallgatherv.c.html#PetscSFGetGraph_Allgatherv">PetscSFGetGraph_Allgatherv in src/vec/is/sf/impls/basic/allgatherv/sfallgatherv.c</A><BR>
<A HREF="PETSC_DOC_OUT_ROOT_PLACEHOLDER/src/vec/is/sf/impls/basic/alltoall/sfalltoall.c.html#PetscSFGetGraph_Alltoall">PetscSFGetGraph_Alltoall in src/vec/is/sf/impls/basic/alltoall/sfalltoall.c</A><BR>


---
[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](/manualpages/index.md)  
[Index of all manual pages](/manualpages/singleindex.md)  
