1d8606c27SBarry Smith! 2d8606c27SBarry Smith! 3d8606c27SBarry Smith! This program tests storage of PETSc Dense matrix. 4d8606c27SBarry Smith! It Creates a Dense matrix, and stores it into a file, 5d8606c27SBarry Smith! and then reads it back in as a SeqDense and MPIDense 6d8606c27SBarry Smith! matrix, and prints out the contents. 7d8606c27SBarry Smith! 8d8606c27SBarry Smith program main 9d8606c27SBarry Smith#include <petsc/finclude/petscmat.h> 10d8606c27SBarry Smith use petscmat 11d8606c27SBarry Smith implicit none 12d8606c27SBarry Smith 13d8606c27SBarry Smith PetscErrorCode ierr 14d8606c27SBarry Smith PetscInt row,col,ten 15d8606c27SBarry Smith PetscMPIInt rank 16d8606c27SBarry Smith PetscScalar v 17d8606c27SBarry Smith Mat A 18d8606c27SBarry Smith PetscViewer view 19d8606c27SBarry Smith 20d8606c27SBarry Smith PetscCallA(PetscInitialize(ierr)) 21d8606c27SBarry Smith 22d8606c27SBarry Smith PetscCallMPIA(MPI_Comm_rank(PETSC_COMM_WORLD,rank,ierr)) 23d8606c27SBarry Smith! 24d8606c27SBarry Smith! Proc-0 Create a seq-dense matrix and write it to a file 25d8606c27SBarry Smith! 26d8606c27SBarry Smith if (rank .eq. 0) then 27d8606c27SBarry Smith ten = 10 28*5d83a8b1SBarry Smith PetscCallA(MatCreateSeqDense(PETSC_COMM_SELF,ten,ten,PETSC_NULL_SCALAR_ARRAY,A,ierr)) 29d8606c27SBarry Smith v = 1.0 30d8606c27SBarry Smith do row=0,9 31d8606c27SBarry Smith do col=0,9 32d8606c27SBarry Smith PetscCallA(MatSetValue(A,row,col,v,INSERT_VALUES,ierr)) 33d8606c27SBarry Smith v = v + 1.0 34d8606c27SBarry Smith enddo 35d8606c27SBarry Smith enddo 36d8606c27SBarry Smith 37d8606c27SBarry Smith PetscCallA(MatAssemblyBegin(A,MAT_FINAL_ASSEMBLY,ierr)) 38d8606c27SBarry Smith PetscCallA(MatAssemblyEnd(A,MAT_FINAL_ASSEMBLY,ierr)) 39d8606c27SBarry Smith 40d8606c27SBarry Smith PetscCallA(PetscObjectSetName(A,'Original Matrix',ierr)) 41d8606c27SBarry Smith PetscCallA(MatView(A,PETSC_VIEWER_STDOUT_SELF,ierr)) 42d8606c27SBarry Smith! 43d8606c27SBarry Smith! Now Write this matrix to a binary file 44d8606c27SBarry Smith! 45d8606c27SBarry Smith PetscCallA(PetscViewerBinaryOpen(PETSC_COMM_SELF,'dense.mat',FILE_MODE_WRITE,view,ierr)) 46d8606c27SBarry Smith PetscCallA(MatView(A,view,ierr)) 47d8606c27SBarry Smith PetscCallA(PetscViewerDestroy(view,ierr)) 48d8606c27SBarry Smith PetscCallA(MatDestroy(A,ierr)) 49d8606c27SBarry Smith! 50d8606c27SBarry Smith! Read this matrix into a SeqDense matrix 51d8606c27SBarry Smith 52d8606c27SBarry Smith PetscCallA(PetscViewerBinaryOpen(PETSC_COMM_SELF,'dense.mat',FILE_MODE_READ,view,ierr)) 53d8606c27SBarry Smith PetscCallA(MatCreate(PETSC_COMM_SELF,A,ierr)) 54d8606c27SBarry Smith PetscCallA(MatSetType(A, MATSEQDENSE,ierr)) 55d8606c27SBarry Smith PetscCallA(MatLoad(A,view,ierr)) 56d8606c27SBarry Smith 57d8606c27SBarry Smith PetscCallA(PetscObjectSetName(A,'SeqDense Matrix read in from file',ierr)) 58d8606c27SBarry Smith PetscCallA(MatView(A,PETSC_VIEWER_STDOUT_SELF,ierr)) 59d8606c27SBarry Smith PetscCallA(MatDestroy(A,ierr)) 60d8606c27SBarry Smith PetscCallA(PetscViewerDestroy(view,ierr)) 61d8606c27SBarry Smith endif 62d8606c27SBarry Smith 63d8606c27SBarry Smith! 64d8606c27SBarry Smith! Use a barrier, so that the procs do not try opening the file before 65d8606c27SBarry Smith! it is created. 66d8606c27SBarry Smith! 67d8606c27SBarry Smith PetscCallMPIA(MPI_Barrier(PETSC_COMM_WORLD,ierr)) 68d8606c27SBarry Smith 69d8606c27SBarry Smith PetscCallA(PetscViewerBinaryOpen(PETSC_COMM_WORLD,'dense.mat',FILE_MODE_READ,view,ierr)) 70d8606c27SBarry Smith PetscCallA(MatCreate(PETSC_COMM_WORLD,A,ierr)) 71d8606c27SBarry Smith PetscCallA(MatSetType(A, MATMPIDENSE,ierr)) 72d8606c27SBarry Smith PetscCallA(MatLoad(A,view,ierr)) 73d8606c27SBarry Smith 74d8606c27SBarry Smith PetscCallA(PetscObjectSetName(A, 'MPIDense Matrix read in from file',ierr)) 75d8606c27SBarry Smith PetscCallA(MatView(A,PETSC_VIEWER_STDOUT_WORLD,ierr)) 76d8606c27SBarry Smith PetscCallA(MatDestroy(A,ierr)) 77d8606c27SBarry Smith PetscCallA(PetscViewerDestroy(view,ierr)) 78d8606c27SBarry Smith PetscCallA(PetscFinalize(ierr)) 79d8606c27SBarry Smith end 80d8606c27SBarry Smith 81d8606c27SBarry Smith!/*TEST 82d8606c27SBarry Smith! 83d8606c27SBarry Smith! test: 84d8606c27SBarry Smith! nsize: 2 85d8606c27SBarry Smith! output_file: output/ex63_1.out 86d8606c27SBarry Smith! 87d8606c27SBarry Smith!TEST*/ 88