:orphan:
# DMSwarmProjectFields
Project a set of swarm fields onto the cell `DM`
## Synopsis
```
#include "petscdmswarm.h"
PETSC_EXTERN PetscErrorCode DMSwarmProjectFields(DM dm, PetscInt nfields, const char *fieldnames[], Vec **fields, PetscBool reuse)
```
Collective
## Input parameters
- ***dm -*** the `DMSWARM`
- ***nfields -*** the number of swarm fields to project
- ***fieldnames -*** the textual names of the swarm fields to project
- ***fields -*** an array of Vec's of length nfields
- ***reuse -*** flag indicating whether the array and contents of fields should be re-used or internally allocated
## Notes
Currently, the only available projection method consists of
```none
phi_i = \sum_{p=0}^{np} N_i(x_p) phi_p dJ / \sum_{p=0}^{np} N_i(x_p) dJ
where phi_p is the swarm field at point p,
N_i() is the cell DM basis function at vertex i,
dJ is the determinant of the cell Jacobian and
phi_i is the projected vertex value of the field phi.
```
If `reuse` is `PETSC_FALSE`, this function will allocate the array of `Vec`'s, and each individual `Vec`.
The user is responsible for destroying both the array and the individual `Vec` objects.
Only swarm fields registered with data type of `PETSC_REAL` can be projected onto the cell `DM`.
Only swarm fields of block size = 1 can currently be projected.
The only projection methods currently only support the `DMDA` (2D) and `DMPLEX` (triangles 2D).
## See Also
`DMSWARM`, `DMSwarmSetType()`, `DMSwarmSetCellDM()`, `DMSwarmType`
## Level
beginner
## Location
src/dm/impls/swarm/swarmpic.c
## Examples
src/dm/tutorials/ex21.c
src/ksp/ksp/tutorials/ex70.c
---
[Edit on GitLab](https://gitlab.com/petsc/petsc/-/edit/release/src/dm/impls/swarm/swarmpic.c)
[Index of all DMSwarm routines](index.md)
[Table of Contents for all manual pages](/manualpages/index.md)
[Index of all manual pages](/manualpages/singleindex.md)