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