static char help[] = "Example program demonstrating projection between particle and finite element spaces\n\n"; #include "petscdmplex.h" #include "petscds.h" #include "petscdmswarm.h" #include "petscksp.h" static PetscErrorCode crd_func(PetscInt dim, PetscReal time, const PetscReal x[], PetscInt Nf_dummy, PetscScalar *u, void *actx) { PetscInt i; PetscFunctionBeginUser; for (i = 0; i < dim; ++i) u[i] = x[i]; PetscFunctionReturn(0); } int main(int argc, char **argv) { DM dm, crddm, sw; PetscFE fe; KSP ksp; Mat M_p, M; Vec f, rho, rhs, crd_vec; PetscInt dim, Nc = 1, timestep = 0, N, i, idx[3], faces[3]; PetscInt Np = 10, p, field = 0, zero = 0, bs; PetscReal time = 0.0, norm; PetscReal lo[3], hi[3], h[3]; PetscBool removePoints = PETSC_TRUE; const PetscReal *xx, *vv; PetscReal *wq, *coords; PetscDataType dtype; PetscErrorCode (*initu[1])(PetscInt, PetscReal, const PetscReal [], PetscInt, PetscScalar [], void *); PetscErrorCode ierr; ierr = PetscInitialize(&argc, &argv, NULL,help);if (ierr) return ierr; /* Create a mesh */ ierr = DMCreate(PETSC_COMM_WORLD, &dm);CHKERRQ(ierr); ierr = DMSetType(dm, DMPLEX);CHKERRQ(ierr); ierr = DMSetFromOptions(dm);CHKERRQ(ierr); ierr = DMViewFromOptions(dm, NULL, "-dm_view");CHKERRQ(ierr); ierr = DMGetDimension(dm, &dim);CHKERRQ(ierr); i = dim; ierr = PetscOptionsGetIntArray(NULL, NULL, "-dm_plex_box_faces", faces, &i, NULL);CHKERRQ(ierr); ierr = DMGetBoundingBox(dm, lo, hi);CHKERRQ(ierr); for (i=0;i