1 const char help[] = "Simple example to get equally space points in high-order elements (and XGC mirror)";
2
3 #include <petscfe.h>
4 #include <petscdmplex.h>
x(PetscInt dim,PetscReal time,const PetscReal x[],PetscInt Nf_unused,PetscScalar * u,void * actx)5 static PetscErrorCode x(PetscInt dim, PetscReal time, const PetscReal x[], PetscInt Nf_unused, PetscScalar *u, void *actx)
6 {
7 PetscFunctionBegin;
8 u[0] = x[0];
9 PetscFunctionReturn(PETSC_SUCCESS);
10 }
11
main(int argc,char ** argv)12 int main(int argc, char **argv)
13 {
14 PetscInt dim = 2, cells[] = {1, 1, 1};
15 DM K;
16 PetscReal radius = 2, lo[] = {-radius, -radius, -radius}, hi[] = {radius, radius, radius};
17 DMBoundaryType periodicity[3] = {DM_BOUNDARY_NONE, DM_BOUNDARY_NONE, DM_BOUNDARY_NONE};
18 PetscFE fe;
19 PetscErrorCode (*initu[1])(PetscInt, PetscReal, const PetscReal[], PetscInt, PetscScalar[], void *);
20 Vec X;
21
22 PetscFunctionBeginUser;
23 PetscCall(PetscInitialize(&argc, &argv, NULL, help));
24 PetscOptionsBegin(PETSC_COMM_WORLD, "", "Options for PETSCDUALSPACELAGRANGE test", "none");
25 PetscCall(PetscOptionsRangeInt("-dim", "The spatial dimension", "ex1.c", dim, &dim, NULL, 0, 3));
26 PetscOptionsEnd();
27
28 PetscCall(DMPlexCreateBoxMesh(PETSC_COMM_SELF, dim, PETSC_FALSE, cells, lo, hi, periodicity, PETSC_TRUE, 0, PETSC_TRUE, &K));
29 PetscCall(PetscFECreateDefault(PETSC_COMM_SELF, dim, 1, PETSC_FALSE, NULL, PETSC_DECIDE, &fe));
30 PetscCall(DMSetField(K, 0, NULL, (PetscObject)fe));
31 PetscCall(PetscFEDestroy(&fe));
32 PetscCall(DMCreateDS(K));
33
34 initu[0] = x;
35 PetscCall(DMCreateGlobalVector(K, &X));
36 PetscCall(DMProjectFunction(K, 0.0, initu, NULL, INSERT_ALL_VALUES, X));
37 PetscCall(DMViewFromOptions(K, NULL, "-dual_dm_view"));
38 PetscCall(VecViewFromOptions(X, NULL, "-dual_vec_view"));
39 PetscCall(DMDestroy(&K));
40 PetscCall(VecDestroy(&X));
41 PetscCall(PetscFinalize());
42 return 0;
43 }
44
45 /*TEST
46
47 testset:
48 filter: grep -v DM_
49 diff_args: -j
50 args: -petscspace_degree 4 -petscdualspace_lagrange_node_type equispaced -petscdualspace_lagrange_node_endpoints 1 -dual_dm_view -dual_vec_view
51 test:
52 requires: !single
53 suffix: 0
54 test:
55 requires: !single
56 suffix: 3d
57 args: -dim 3
58
59 TEST*/
60