xref: /petsc/src/dm/tests/ex35.c (revision 5f80ce2ab25dff0f4601e710601cbbcecf323266)
1c4762a1bSJed Brown 
2c4762a1bSJed Brown static char help[] = "MatLoad test for loading matrices that are created by DMCreateMatrix() and\n\
3c4762a1bSJed Brown                       stored in binary via MatView_MPI_DA.MatView_MPI_DA stores the matrix\n\
4c4762a1bSJed Brown                       in natural ordering. Hence MatLoad() has to read the matrix first in\n\
5c4762a1bSJed Brown                       natural ordering and then permute it back to the application ordering.This\n\
6c4762a1bSJed Brown                       example is used for testing the subroutine MatLoad_MPI_DA\n\n";
7c4762a1bSJed Brown 
8c4762a1bSJed Brown #include <petscdm.h>
9c4762a1bSJed Brown #include <petscdmda.h>
10c4762a1bSJed Brown 
11c4762a1bSJed Brown int main(int argc,char **argv)
12c4762a1bSJed Brown {
13c4762a1bSJed Brown   PetscInt       X = 10,Y = 8,Z=8;
14c4762a1bSJed Brown   PetscErrorCode ierr;
15c4762a1bSJed Brown   DM             da;
16c4762a1bSJed Brown   PetscViewer    viewer;
17c4762a1bSJed Brown   Mat            A;
18c4762a1bSJed Brown 
19c4762a1bSJed Brown   ierr = PetscInitialize(&argc,&argv,(char*)0,help);if (ierr) return ierr;
20*5f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscViewerBinaryOpen(PETSC_COMM_WORLD,"temp.dat",FILE_MODE_WRITE,&viewer));
21c4762a1bSJed Brown 
22c4762a1bSJed Brown   /* Read options */
23*5f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscOptionsGetInt(NULL,NULL,"-X",&X,NULL));
24*5f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscOptionsGetInt(NULL,NULL,"-Y",&Y,NULL));
25*5f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscOptionsGetInt(NULL,NULL,"-Z",&Z,NULL));
26c4762a1bSJed Brown 
27c4762a1bSJed Brown   /* Create distributed array and get vectors */
28*5f80ce2aSJacob Faibussowitsch   CHKERRQ(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));
29*5f80ce2aSJacob Faibussowitsch   CHKERRQ(DMSetFromOptions(da));
30*5f80ce2aSJacob Faibussowitsch   CHKERRQ(DMSetUp(da));
31*5f80ce2aSJacob Faibussowitsch   CHKERRQ(DMSetMatType(da,MATMPIAIJ));
32*5f80ce2aSJacob Faibussowitsch   CHKERRQ(DMCreateMatrix(da,&A));
33*5f80ce2aSJacob Faibussowitsch   CHKERRQ(MatShift(A,X));
34*5f80ce2aSJacob Faibussowitsch   CHKERRQ(MatView(A,viewer));
35*5f80ce2aSJacob Faibussowitsch   CHKERRQ(MatDestroy(&A));
36*5f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscViewerDestroy(&viewer));
37c4762a1bSJed Brown 
38*5f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscViewerBinaryOpen(PETSC_COMM_WORLD,"temp.dat",FILE_MODE_READ,&viewer));
39*5f80ce2aSJacob Faibussowitsch   CHKERRQ(DMCreateMatrix(da,&A));
40*5f80ce2aSJacob Faibussowitsch   CHKERRQ(MatLoad(A,viewer));
41c4762a1bSJed Brown 
42c4762a1bSJed Brown   /* Free memory */
43*5f80ce2aSJacob Faibussowitsch   CHKERRQ(MatDestroy(&A));
44*5f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscViewerDestroy(&viewer));
45*5f80ce2aSJacob Faibussowitsch   CHKERRQ(DMDestroy(&da));
46c4762a1bSJed Brown   ierr = PetscFinalize();
47c4762a1bSJed Brown   return ierr;
48c4762a1bSJed Brown }
49