Actual source code: ex11f.F90

      1: ! Test MatCreateMPIAdj() with NULL argument 'values'

      3: program main
      4: #include <petsc/finclude/petscmat.h>
      5:   use petscmat
      6:   implicit none

      8:   Mat                   :: mesh, dual
      9:   MatPartitioning       :: part
     10:   IS                    :: is
     11:   PetscInt, parameter    :: Nvertices = 6, ncells = 2, two = 2
     12:   PetscInt              :: ii(3), jj(6)
     13:   PetscMPIInt           :: sz, rnk
     14:   PetscErrorCode        :: ierr

     16:   PetscCallA(PetscInitialize(ierr))

     18:   PetscCallMPIA(MPI_Comm_size(PETSC_COMM_WORLD, sz, ierr))
     19:   PetscCheckA(sz == 2, PETSC_COMM_WORLD, PETSC_ERR_WRONG_MPI_SIZE, 'This example is for exactly two processes')
     20:   PetscCallMPIA(MPI_Comm_rank(PETSC_COMM_WORLD, rnk, ierr))
     21:   ii(1) = 0
     22:   ii(2) = 3
     23:   ii(3) = 6
     24:   if (rnk == 0) then
     25:     jj(1) = 0
     26:     jj(2) = 1
     27:     jj(3) = 2
     28:     jj(4) = 1
     29:     jj(5) = 2
     30:     jj(6) = 3
     31:   else
     32:     jj(1) = 1
     33:     jj(2) = 4
     34:     jj(3) = 5
     35:     jj(4) = 1
     36:     jj(5) = 3
     37:     jj(6) = 5
     38:   end if

     40:   PetscCallA(MatCreateMPIAdj(PETSC_COMM_WORLD, ncells, Nvertices, ii, jj, PETSC_NULL_INTEGER_ARRAY, mesh, ierr))
     41:   PetscCallA(MatMeshToCellGraph(mesh, two, dual, ierr))
     42:   PetscCallA(MatView(dual, PETSC_VIEWER_STDOUT_WORLD, ierr))

     44:   PetscCallA(MatPartitioningCreate(PETSC_COMM_WORLD, part, ierr))
     45:   PetscCallA(MatPartitioningSetAdjacency(part, dual, ierr))
     46:   PetscCallA(MatPartitioningSetFromOptions(part, ierr))
     47:   PetscCallA(MatPartitioningApply(part, is, ierr))
     48:   PetscCallA(ISView(is, PETSC_VIEWER_STDOUT_WORLD, ierr))
     49:   PetscCallA(ISDestroy(is, ierr))
     50:   PetscCallA(MatPartitioningDestroy(part, ierr))

     52:   PetscCallA(MatDestroy(mesh, ierr))
     53:   PetscCallA(MatDestroy(dual, ierr))
     54:   PetscCallA(PetscFinalize(ierr))

     56: end program

     58: !/*TEST
     59: !
     60: !   build:
     61: !     requires: parmetis
     62: !
     63: !   test:
     64: !      nsize: 2
     65: !
     66: !TEST*/