Actual source code: ex48.c
1: static char help[] = "Tests for VecGetValuesSection / VecSetValuesSection \n\n";
3: #include <petscdmplex.h>
5: int main(int argc, char **argv)
6: {
7: DM dm;
8: Vec v;
9: PetscSection section;
10: PetscScalar val[2];
11: PetscInt pStart, pEnd, p;
13: PetscCall(PetscInitialize(&argc, &argv, NULL, help));
15: PetscCall(DMCreate(PETSC_COMM_WORLD, &dm));
16: PetscCall(DMSetType(dm, DMPLEX));
17: PetscCall(DMSetFromOptions(dm));
18: PetscCall(DMViewFromOptions(dm, NULL, "-d_view"));
20: PetscCall(PetscSectionCreate(PetscObjectComm((PetscObject)dm), §ion));
21: PetscCall(DMPlexGetChart(dm, &pStart, &pEnd));
22: PetscCall(PetscSectionSetChart(section, pStart, pEnd));
23: PetscCall(DMPlexGetHeightStratum(dm, 0, &pStart, &pEnd));
24: for (p = pStart; p < pEnd; p++) PetscCall(PetscSectionSetDof(section, p, 1));
25: PetscCall(DMPlexGetDepthStratum(dm, 0, &pStart, &pEnd));
26: for (p = pStart; p < pEnd; p++) PetscCall(PetscSectionSetDof(section, p, 2));
27: PetscCall(PetscSectionSetUp(section));
28: PetscCall(DMSetLocalSection(dm, section));
29: PetscCall(PetscSectionViewFromOptions(section, NULL, "-s_view"));
31: PetscCall(DMCreateGlobalVector(dm, &v));
32: PetscCall(VecViewFromOptions(v, NULL, "-v_view"));
34: /* look through all cells and change "cell values" */
35: PetscCall(DMPlexGetChart(dm, &pStart, &pEnd));
36: for (p = pStart; p < pEnd; ++p) {
37: PetscInt dof;
39: PetscCall(PetscSectionGetDof(section, p, &dof));
40: for (PetscInt d = 0; d < dof; ++d) val[d] = 100 * p + d;
41: PetscCall(VecSetValuesSection(v, section, p, val, INSERT_VALUES));
42: }
43: PetscCall(VecView(v, PETSC_VIEWER_STDOUT_WORLD));
45: for (p = pStart; p < pEnd; ++p) {
46: PetscScalar *x;
47: PetscInt dof;
49: PetscCall(PetscSectionGetDof(section, p, &dof));
50: PetscCall(VecGetValuesSection(v, section, p, &x));
51: PetscCall(PetscPrintf(PETSC_COMM_SELF, "Point #%" PetscInt_FMT " %" PetscInt_FMT " dof\n", p, dof));
52: }
54: PetscCall(VecDestroy(&v));
55: PetscCall(PetscSectionDestroy(§ion));
56: PetscCall(DMDestroy(&dm));
57: PetscCall(PetscFinalize());
58: return 0;
59: }
61: /*TEST
63: test:
64: suffix: 0
65: args: -dm_plex_filename ${wPETSC_DIR}/share/petsc/datafiles/meshes/quads-q2.msh
67: TEST*/