Skip to main content
`Ctrl`+`K`

# PetscSFSetGraph

Set a parallel star forest

## Synopsis

    #include "petscsf.h"
    PetscErrorCode PetscSFSetGraph(PetscSF sf, PetscInt nroots, PetscInt nleaves, PetscInt ilocal[], PetscCopyMode localmode, PetscSFNode iremote[], PetscCopyMode remotemode)

Collective

## Input Parameters

- sf - star forest

- nroots - number of root vertices on the current MPI process (these are possible targets for other process to attach leaves)

- nleaves - number of leaf vertices on the current MPI process, each of these references a root on any process

- ilocal - locations of leaves in leafdata buffers (locations must be >= 0, enforced during setup in debug mode), pass `NULL` for contiguous storage (same as passing (0, 1, 2, …, nleaves-1))

- localmode - copy mode for `ilocal`

- iremote - remote locations of root vertices for each leaf on the current process, length is `nleaves’ (locations must be >= 0, enforced during setup in debug mode)

- remotemode - copy mode for `iremote`

## Notes

Leaf indices in `ilocal` must be unique, otherwise an error occurs.

Input arrays `ilocal` and `iremote` follow the `PetscCopyMode` semantics. In particular, if `localmode` or `remotemode` is `PETSC_OWN_POINTER` or `PETSC_USE_POINTER`, PETSc might modify the respective array; if `PETSC_USE_POINTER`, the user must delete the array after `PetscSFDestroy()`. If `PETSC_COPY_VALUES` is used, the respective array is guaranteed to stay intact and a const array can be passed (but a cast to non-const is needed).

`PetscSFSetGraphWithPattern()` is an alternative approach to provide certain communication patterns that have extra optimizations.

## Fortran Notes

In Fortran you must use `PETSC_COPY_VALUES` for `localmode` and `remotemode`.

## Developer Notes

We sort leaves to check for duplicates and contiguousness and to find minleaf/maxleaf. This also allows to compare leaf sets of two `PetscSF`s easily.

## See Also

PetscSF - an alternative to low-level MPI calls for data communication, `PetscSF`, `PetscSFType`, `PetscSFCreate()`, `PetscSFView()`, `PetscSFGetGraph()`, `PetscSFSetGraphWithPattern()`

## Level

intermediate

## Location

src/vec/is/sf/interface/sf.c

## Examples

src/dm/tutorials/swarm_ex3.c
src/vec/is/sf/tutorials/ex1f.F90
src/vec/is/sf/tutorials/ex3.c
src/vec/is/sf/tutorials/ex1.c
src/vec/is/sf/tutorials/ex2.c

Index of all PetscSF routines
Table of Contents for all manual pages
Index of all manual pages