1c4762a1bSJed Brown static char help[] = "MatLoad test for loading matrices that are created by DMCreateMatrix() and\n\
2c4762a1bSJed Brown stored in binary via MatView_MPI_DA.MatView_MPI_DA stores the matrix\n\
3c4762a1bSJed Brown in natural ordering. Hence MatLoad() has to read the matrix first in\n\
4c4762a1bSJed Brown natural ordering and then permute it back to the application ordering.This\n\
5c4762a1bSJed Brown example is used for testing the subroutine MatLoad_MPI_DA\n\n";
6c4762a1bSJed Brown
7c4762a1bSJed Brown #include <petscdm.h>
8c4762a1bSJed Brown #include <petscdmda.h>
9c4762a1bSJed Brown
main(int argc,char ** argv)10d71ae5a4SJacob Faibussowitsch int main(int argc, char **argv)
11d71ae5a4SJacob Faibussowitsch {
12c4762a1bSJed Brown PetscInt X = 10, Y = 8, Z = 8;
13c4762a1bSJed Brown DM da;
14c4762a1bSJed Brown PetscViewer viewer;
15c4762a1bSJed Brown Mat A;
16c4762a1bSJed Brown
17327415f7SBarry Smith PetscFunctionBeginUser;
18*c8025a54SPierre Jolivet PetscCall(PetscInitialize(&argc, &argv, NULL, help));
199566063dSJacob Faibussowitsch PetscCall(PetscViewerBinaryOpen(PETSC_COMM_WORLD, "temp.dat", FILE_MODE_WRITE, &viewer));
20c4762a1bSJed Brown
21c4762a1bSJed Brown /* Read options */
229566063dSJacob Faibussowitsch PetscCall(PetscOptionsGetInt(NULL, NULL, "-X", &X, NULL));
239566063dSJacob Faibussowitsch PetscCall(PetscOptionsGetInt(NULL, NULL, "-Y", &Y, NULL));
249566063dSJacob Faibussowitsch PetscCall(PetscOptionsGetInt(NULL, NULL, "-Z", &Z, NULL));
25c4762a1bSJed Brown
26c4762a1bSJed Brown /* Create distributed array and get vectors */
279566063dSJacob Faibussowitsch PetscCall(DMDACreate3d(PETSC_COMM_WORLD, DM_BOUNDARY_NONE, DM_BOUNDARY_NONE, DM_BOUNDARY_NONE, DMDA_STENCIL_STAR, X, Y, Z, PETSC_DECIDE, PETSC_DECIDE, PETSC_DECIDE, 1, 1, NULL, NULL, NULL, &da));
289566063dSJacob Faibussowitsch PetscCall(DMSetFromOptions(da));
299566063dSJacob Faibussowitsch PetscCall(DMSetUp(da));
309566063dSJacob Faibussowitsch PetscCall(DMSetMatType(da, MATMPIAIJ));
319566063dSJacob Faibussowitsch PetscCall(DMCreateMatrix(da, &A));
329566063dSJacob Faibussowitsch PetscCall(MatShift(A, X));
339566063dSJacob Faibussowitsch PetscCall(MatView(A, viewer));
349566063dSJacob Faibussowitsch PetscCall(MatDestroy(&A));
359566063dSJacob Faibussowitsch PetscCall(PetscViewerDestroy(&viewer));
36c4762a1bSJed Brown
379566063dSJacob Faibussowitsch PetscCall(PetscViewerBinaryOpen(PETSC_COMM_WORLD, "temp.dat", FILE_MODE_READ, &viewer));
389566063dSJacob Faibussowitsch PetscCall(DMCreateMatrix(da, &A));
399566063dSJacob Faibussowitsch PetscCall(MatLoad(A, viewer));
40c4762a1bSJed Brown
41c4762a1bSJed Brown /* Free memory */
429566063dSJacob Faibussowitsch PetscCall(MatDestroy(&A));
439566063dSJacob Faibussowitsch PetscCall(PetscViewerDestroy(&viewer));
449566063dSJacob Faibussowitsch PetscCall(DMDestroy(&da));
459566063dSJacob Faibussowitsch PetscCall(PetscFinalize());
46b122ec5aSJacob Faibussowitsch return 0;
47c4762a1bSJed Brown }
48