static char help[] = "An example \n\n"; #include typedef struct { PetscReal x; PetscInt id; } testStruct; int main(int argc, char **argv) { DM dm, dmDist = NULL; Vec u; PetscSection section; PetscViewer viewer; PetscInt dim = 2, numFields, numBC, i; PetscInt numComp[3]; PetscInt numDof[12]; PetscInt bcField[1]; IS bcPointIS[1]; PetscBool interpolate = PETSC_TRUE; PetscErrorCode ierr; ierr = PetscInitialize(&argc, &argv, NULL,help);if (ierr) return ierr; /* Create a mesh */ ierr = DMPlexCreateBoxMesh(PETSC_COMM_WORLD, dim, 2, interpolate, &dm);CHKERRQ(ierr); { PetscInt c, cStart, cEnd, cEndInterior; Vec testVec; PetscScalar *testScalar; DM dmTest; PetscSection coordSection, sectionTest; Vec coordinates; DMGetDimension(dm, &dim); DMGetCoordinateSection(dm, &coordSection); DMGetCoordinatesLocal(dm, &coordinates); DMPlexGetHeightStratum(dm, 0, &cStart, &cEnd); DMPlexGetHybridBounds(dm, &cEndInterior, NULL, NULL, NULL); DMClone(dm, &dmTest); DMSetCoordinateSection(dmTest, PETSC_DETERMINE, coordSection); DMSetCoordinatesLocal(dmTest, coordinates); PetscSectionCreate(PetscObjectComm((PetscObject) dm), §ionTest); PetscSectionSetChart(sectionTest, cStart, cEnd); for (c = cStart; c < cEnd; ++c) { PetscSectionSetDof(sectionTest, c, 2); } PetscSectionSetUp(sectionTest); DMSetDefaultSection(dmTest, sectionTest); PetscSectionDestroy(§ionTest); DMCreateLocalVector(dmTest, &testVec); if (cEndInterior < 0) { cEndInterior = cEnd; } VecGetArray(testVec, &testScalar); for (c = cStart; c < cEndInterior; ++c) { testStruct *testData; DMPlexPointLocalRef(dmTest, c, testScalar, &testData); testData->x = 2.0; testData->id = 1; } VecRestoreArray(testVec, &testScalar); VecView(testVec,PETSC_VIEWER_STDOUT_WORLD); } ierr = DMDestroy(&dm);CHKERRQ(ierr); ierr = PetscFinalize(); return ierr; }