1 static char help[] = "Tests MatLoad() for dense matrix with uneven dimensions set in program\n\n"; 2 3 #include <petscmat.h> 4 5 int main(int argc,char **args) 6 { 7 Mat A; 8 PetscViewer fd; 9 PetscMPIInt rank; 10 PetscScalar *Av; 11 PetscInt i; 12 13 PetscFunctionBeginUser; 14 PetscCall(PetscInitialize(&argc,&args,(char*)0,help)); 15 PetscCallMPI(MPI_Comm_rank(PETSC_COMM_WORLD,&rank)); 16 17 PetscCall(MatCreateDense(PETSC_COMM_WORLD,6,6,12,12,NULL,&A)); 18 PetscCall(MatDenseGetArray(A,&Av)); 19 for (i=0; i<6*12; i++) Av[i] = (PetscScalar) i; 20 PetscCall(MatDenseRestoreArray(A,&Av)); 21 22 /* Load matrices */ 23 PetscCall(PetscViewerBinaryOpen(PETSC_COMM_WORLD,"ex191matrix",FILE_MODE_WRITE,&fd)); 24 PetscCall(PetscViewerPushFormat(fd,PETSC_VIEWER_NATIVE)); 25 PetscCall(MatView(A,fd)); 26 PetscCall(MatDestroy(&A)); 27 PetscCall(PetscViewerPopFormat(fd)); 28 PetscCall(PetscViewerDestroy(&fd)); 29 30 PetscCall(MatCreate(PETSC_COMM_WORLD,&A)); 31 PetscCall(MatSetType(A,MATDENSE)); 32 if (rank == 0) { 33 PetscCall(MatSetSizes(A, 4, PETSC_DETERMINE, PETSC_DETERMINE,PETSC_DETERMINE)); 34 } else { 35 PetscCall(MatSetSizes(A, 8, PETSC_DETERMINE, PETSC_DETERMINE,PETSC_DETERMINE)); 36 } 37 PetscCall(PetscViewerBinaryOpen(PETSC_COMM_WORLD,"ex191matrix",FILE_MODE_READ,&fd)); 38 PetscCall(MatLoad(A,fd)); 39 PetscCall(PetscViewerDestroy(&fd)); 40 PetscCall(MatView(A,PETSC_VIEWER_STDOUT_WORLD)); 41 PetscCall(PetscViewerPushFormat(PETSC_VIEWER_STDOUT_WORLD,PETSC_VIEWER_ASCII_INFO_DETAIL)); 42 PetscCall(MatView(A,PETSC_VIEWER_STDOUT_WORLD)); 43 PetscCall(PetscViewerPopFormat(PETSC_VIEWER_STDOUT_WORLD)); 44 PetscCall(MatDestroy(&A)); 45 PetscCall(PetscFinalize()); 46 return 0; 47 } 48 49 /*TEST 50 51 test: 52 nsize: 2 53 filter: grep -v alloced 54 55 TEST*/ 56