: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)