DMSwarmProjectFields#

Project a set of swarm fields onto another DM

Synopsis#

#include "petscdm.h" 
#include "petscdmda.h" 
#include "petscdmplex.h" 
#include "petscdmswarm.h" 
#include "petscksp.h" 
PetscErrorCode DMSwarmProjectFields(DM sw, DM dm, PetscInt nfields, const char *fieldnames[], Vec fields[], ScatterMode mode)

Collective

Input Parameters#

  • sw - the DMSWARM

  • dm - the DM, or NULL to use the cell DM

  • 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

  • mode - if SCATTER_FORWARD then map particles to the continuum, and if SCATTER_REVERSE map the continuum to particles

Notes#

Currently, there are two available projection methods. The first is conservative projection, used for a DMPLEX cell DM. The second is the averaging which is used for a DMDA cell DM

ϕi=p=0npNi(xp)ϕpdJ/p=0npNi(xp)dJ \phi_i = \sum_{p=0}^{np} N_i(x_p) \phi_p dJ / \sum_{p=0}^{np} N_i(x_p) dJ

where ϕp\phi_p is the swarm field at point pp, Ni()N_i() is the cell DM basis function at vertex ii, dJdJ is the determinant of the cell Jacobian and ϕi\phi_i is the projected vertex value of the field ϕ\phi.

The user is responsible for destroying both the array and the individual Vec objects.

For the DMPLEX case, there is only a single vector, so the field layout in the DMPLEX must match the requested fields from the DMSwarm.

For averaging projection, nly swarm fields registered with data type of PETSC_REAL can be projected onto the cell DM, and only swarm fields of block size = 1 can currently be projected.

See Also#

DM Basics, DMSWARM, DMSwarmSetType(), DMSwarmSetCellDM(), DMSwarmType

Level#

beginner

Location#

src/ksp/ksp/utils/dm/dmproject.c

Examples#

src/dm/impls/swarm/tutorials/ex1.c
src/ksp/ksp/tutorials/ex70.c
src/dm/tutorials/ex21.c


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