xref: /petsc/src/dm/tests/ex35.c (revision 732aec7a18f2199fb53bb9a2f3aef439a834ce31)
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