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