xref: /petsc/src/mat/tutorials/ex11f.F90 (revision c080761bfe1cff46c829144de5ba80844362b4d0)
1*c080761bSJose E. Roman! Test MatCreateMPIAdj() with NULL argument 'values'
2*c080761bSJose E. Roman
3*c080761bSJose E. Romanprogram main
4*c080761bSJose E. Roman#include <petsc/finclude/petscmat.h>
5*c080761bSJose E. Romanuse petscmat
6*c080761bSJose E. Romanimplicit none
7*c080761bSJose E. Roman
8*c080761bSJose E. Roman  Mat                   :: mesh,dual
9*c080761bSJose E. Roman  MatPartitioning       :: part
10*c080761bSJose E. Roman  IS                    :: is
11*c080761bSJose E. Roman  PetscInt,parameter    :: Nvertices=6,ncells=2,two=2
12*c080761bSJose E. Roman  PetscInt              :: ii(3),jj(6)
13*c080761bSJose E. Roman  PetscMPIInt           :: sz,rnk
14*c080761bSJose E. Roman  PetscErrorCode        :: ierr
15*c080761bSJose E. Roman
16*c080761bSJose E. Roman  PetscCallA(PetscInitialize(ierr))
17*c080761bSJose E. Roman
18*c080761bSJose E. Roman  PetscCallMPIA(MPI_Comm_size(PETSC_COMM_WORLD,sz,ierr))
19*c080761bSJose E. Roman  PetscCheckA(sz.eq.2,PETSC_COMM_WORLD,PETSC_ERR_WRONG_MPI_SIZE,'This example is for exactly two processes')
20*c080761bSJose E. Roman  PetscCallMPIA(MPI_Comm_rank(PETSC_COMM_WORLD,rnk,ierr))
21*c080761bSJose E. Roman  ii(1) = 0
22*c080761bSJose E. Roman  ii(2) = 3
23*c080761bSJose E. Roman  ii(3) = 6
24*c080761bSJose E. Roman  if (rnk.eq.0) then
25*c080761bSJose E. Roman    jj(1) = 0
26*c080761bSJose E. Roman    jj(2) = 1
27*c080761bSJose E. Roman    jj(3) = 2
28*c080761bSJose E. Roman    jj(4) = 1
29*c080761bSJose E. Roman    jj(5) = 2
30*c080761bSJose E. Roman    jj(6) = 3
31*c080761bSJose E. Roman  else
32*c080761bSJose E. Roman    jj(1) = 1
33*c080761bSJose E. Roman    jj(2) = 4
34*c080761bSJose E. Roman    jj(3) = 5
35*c080761bSJose E. Roman    jj(4) = 1
36*c080761bSJose E. Roman    jj(5) = 3
37*c080761bSJose E. Roman    jj(6) = 5
38*c080761bSJose E. Roman  endif
39*c080761bSJose E. Roman
40*c080761bSJose E. Roman  PetscCallA(MatCreateMPIAdj(PETSC_COMM_WORLD,ncells,Nvertices,ii,jj,PETSC_NULL_INTEGER_ARRAY,mesh,ierr))
41*c080761bSJose E. Roman  PetscCallA(MatMeshToCellGraph(mesh,two,dual,ierr))
42*c080761bSJose E. Roman  PetscCallA(MatView(dual,PETSC_VIEWER_STDOUT_WORLD,ierr))
43*c080761bSJose E. Roman
44*c080761bSJose E. Roman  PetscCallA(MatPartitioningCreate(PETSC_COMM_WORLD,part,ierr))
45*c080761bSJose E. Roman  PetscCallA(MatPartitioningSetAdjacency(part,dual,ierr))
46*c080761bSJose E. Roman  PetscCallA(MatPartitioningSetFromOptions(part,ierr))
47*c080761bSJose E. Roman  PetscCallA(MatPartitioningApply(part,is,ierr))
48*c080761bSJose E. Roman  PetscCallA(ISView(is,PETSC_VIEWER_STDOUT_WORLD,ierr))
49*c080761bSJose E. Roman  PetscCallA(ISDestroy(is,ierr))
50*c080761bSJose E. Roman  PetscCallA(MatPartitioningDestroy(part,ierr))
51*c080761bSJose E. Roman
52*c080761bSJose E. Roman  PetscCallA(MatDestroy(mesh,ierr))
53*c080761bSJose E. Roman  PetscCallA(MatDestroy(dual,ierr))
54*c080761bSJose E. Roman  PetscCallA(PetscFinalize(ierr))
55*c080761bSJose E. Roman
56*c080761bSJose E. Romanend program
57*c080761bSJose E. Roman
58*c080761bSJose E. Roman!/*TEST
59*c080761bSJose E. Roman!
60*c080761bSJose E. Roman!   build:
61*c080761bSJose E. Roman!     requires: parmetis
62*c080761bSJose E. Roman!
63*c080761bSJose E. Roman!   test:
64*c080761bSJose E. Roman!      nsize: 2
65*c080761bSJose E. Roman!
66*c080761bSJose E. Roman!TEST*/
67