1d8606c27SBarry Smith! 2d8606c27SBarry Smith! This program demonstrates use of MatCreateSubMatrices() from Fortran 3d8606c27SBarry Smith! 4d8606c27SBarry Smith program main 5d8606c27SBarry Smith#include <petsc/finclude/petscmat.h> 6d8606c27SBarry Smith use petscmat 7d8606c27SBarry Smith implicit none 8d8606c27SBarry Smith 9*ce78bad3SBarry Smith Mat A 10*ce78bad3SBarry Smith Mat, pointer :: B(:) 11d8606c27SBarry Smith PetscErrorCode ierr 12d8606c27SBarry Smith PetscInt nis,zero(1) 13d8606c27SBarry Smith PetscViewer v 14d8606c27SBarry Smith IS isrow 15d8606c27SBarry Smith PetscMPIInt rank 16d8606c27SBarry Smith 17d8606c27SBarry Smith PetscCallA(PetscInitialize(ierr)) 18d8606c27SBarry Smith PetscCallMPIA(MPI_Comm_rank(PETSC_COMM_WORLD,rank,ierr)) 19d8606c27SBarry Smith 20d8606c27SBarry Smith#if defined(PETSC_USE_64BIT_INDICES) 21d8606c27SBarry Smith PetscCallA(PetscViewerBinaryOpen(PETSC_COMM_WORLD,'${PETSC_DIR}/share/petsc/datafiles/matrices/' // 'ns-real-int64-float64',FILE_MODE_READ,v,ierr)) 22d8606c27SBarry Smith#else 23d8606c27SBarry Smith PetscCallA(PetscViewerBinaryOpen(PETSC_COMM_WORLD,'${PETSC_DIR}/share/petsc/datafiles/matrices/' // 'ns-real-int32-float64',FILE_MODE_READ,v,ierr)) 24d8606c27SBarry Smith#endif 25d8606c27SBarry Smith 26d8606c27SBarry Smith PetscCallA(MatCreate(PETSC_COMM_WORLD,A,ierr)) 27d8606c27SBarry Smith PetscCallA(MatSetType(A, MATAIJ,ierr)) 28d8606c27SBarry Smith PetscCallA(MatLoad(A,v,ierr)) 29d8606c27SBarry Smith 30d8606c27SBarry Smith nis = 1 31d8606c27SBarry Smith zero(1) = 0 32d8606c27SBarry Smith if (rank .eq. 1) then 33d8606c27SBarry Smith nis = 0 ! test nis = 0 34d8606c27SBarry Smith endif 35d8606c27SBarry Smith PetscCallA(ISCreateGeneral(PETSC_COMM_SELF,nis,zero,PETSC_COPY_VALUES,isrow,ierr)) 36d8606c27SBarry Smith 37*ce78bad3SBarry Smith PetscCallA(MatCreateSubmatrices(A,nis,[isrow],[isrow],MAT_INITIAL_MATRIX,B,ierr)) 38d8606c27SBarry Smith 39d8606c27SBarry Smith if (rank .eq. 0) then 40d8606c27SBarry Smith PetscCallA(MatView(B(1),PETSC_VIEWER_STDOUT_SELF,ierr)) 41d8606c27SBarry Smith endif 42d8606c27SBarry Smith 43*ce78bad3SBarry Smith PetscCallA(MatCreateSubmatrices(A,nis,[isrow],[isrow],MAT_REUSE_MATRIX,B,ierr)) 44d8606c27SBarry Smith 45d8606c27SBarry Smith if (rank .eq. 0) then 46d8606c27SBarry Smith PetscCallA(MatView(B(1),PETSC_VIEWER_STDOUT_SELF,ierr)) 47d8606c27SBarry Smith endif 48d8606c27SBarry Smith 49d8606c27SBarry Smith PetscCallA(ISDestroy(isrow,ierr)) 50d8606c27SBarry Smith PetscCallA(MatDestroy(A,ierr)) 51d8606c27SBarry Smith PetscCallA(MatDestroySubMatrices(nis,B,ierr)) 52d8606c27SBarry Smith PetscCallA(PetscViewerDestroy(v,ierr)) 53d8606c27SBarry Smith 54d8606c27SBarry Smith PetscCallA(PetscFinalize(ierr)) 55d8606c27SBarry Smith end 56d8606c27SBarry Smith 57d8606c27SBarry Smith!/*TEST 58d8606c27SBarry Smith! 59d8606c27SBarry Smith! test: 60d8606c27SBarry Smith! requires: double !complex 61d8606c27SBarry Smith! 62d8606c27SBarry Smith!TEST*/ 63