PetscSF Object: 4 MPI processes
  type: basic
  [0] Number of roots=3, leaves=2, remote ranks=2
  [0] 0 <- (3,1)
  [0] 1 <- (1,0)
  [1] Number of roots=2, leaves=3, remote ranks=2
  [1] 0 <- (0,1)
  [1] 1 <- (2,0)
  [1] 2 <- (0,2)
  [2] Number of roots=2, leaves=3, remote ranks=3
  [2] 0 <- (1,1)
  [2] 1 <- (3,0)
  [2] 2 <- (0,2)
  [3] Number of roots=2, leaves=3, remote ranks=2
  [3] 0 <- (2,1)
  [3] 1 <- (0,0)
  [3] 2 <- (0,2)
  [0] Roots referenced by my leaves, by rank
  [0] 1: 1 edges
  [0]    1 <- 0
  [0] 3: 1 edges
  [0]    0 <- 1
  [1] Roots referenced by my leaves, by rank
  [1] 0: 2 edges
  [1]    0 <- 1
  [1]    2 <- 2
  [1] 2: 1 edges
  [1]    1 <- 0
  [2] Roots referenced by my leaves, by rank
  [2] 0: 1 edges
  [2]    2 <- 2
  [2] 1: 1 edges
  [2]    0 <- 1
  [2] 3: 1 edges
  [2]    1 <- 0
  [3] Roots referenced by my leaves, by rank
  [3] 0: 2 edges
  [3]    1 <- 0
  [3]    2 <- 2
  [3] 2: 1 edges
  [3]    0 <- 1
  MultiSF sort=rank-order
## Bcast Rootdata
[0] 0: 100 101 102
[1] 0: 200 201
[2] 0: 300 301
[3] 0: 400 401
## Bcast Leafdata
[0] 0: 401 200
[1] 0: 101 300 102
[2] 0: 201 400 102
[3] 0: 301 100 102
## Bcast Rootdata in type of char
   0:    A    B    C
   1:    D    E
   2:    G    H
   3:    J    K
## Bcast Leafdata in type of char
   0:    K    D
   1:    B    G    C
   2:    E    J    C
   3:    H    A    C
## Pre-Reduce Rootdata
[0] 0: 100 101 102
[1] 0: 200 201
[2] 0: 300 301
[3] 0: 400 401
## Reduce Leafdata
[0] 0: 1000 1010
[1] 0: 2000 2010 2020
[2] 0: 3000 3010 3020
[3] 0: 4000 4010 4020
## Reduce Rootdata
[0] 0: 4110 2101 9162
[1] 0: 1210 3201
[2] 0: 2310 4301
[3] 0: 3410 1401
## Pre-Reduce Rootdata in type of signed char
   0:   10   11   12
   1:   20   21
   2:   30   31
   3:   40   41
## Reduce Leafdata in type of signed char
   0:   50   60
   1:  100  110  120
   2: -106  -96  -86
   3:  -56  -46  -36
## Reduce Rootdata in type of signed char
   0:  -36  111   10
   1:   80  -85
   2: -116  -25
   3:  -56   91
## Pre-Reduce Rootdata in type of unsigned char
   0:   10   11   12
   1:   20   21
   2:   30   31
   3:   40   41
## Reduce Leafdata in type of unsigned char
   0:   50   60
   1:  100  110  120
   2:  150  160  170
   3:  200  210  220
## Reduce Rootdata in type of unsigned char
   0:  220  111   10
   1:   80  171
   2:  140  231
   3:  200   91
## Root degrees
[0] 0: 1 1 3
[1] 0: 1 1
[2] 0: 1 1
[3] 0: 1 1
## Gathered data at multi-roots from leaves
[0] 0: 4001 2000 2002 3002 4002
[1] 0: 1001 3000
[2] 0: 2001 4000
[3] 0: 3001 1000
## Data at multi-roots, to scatter to leaves
[0] 0: 1000 1100 1200 1201 1202
[1] 0: 2000 2100
[2] 0: 3000 3100
[3] 0: 4000 4100
## Scattered data at leaves
[0] 0: 4100 2000
[1] 0: 1100 3000 1200
[2] 0: 2100 4000 1201
[3] 0: 3100 1000 1202
## Embedded PetscSF
PetscSF Object: 4 MPI processes
  type: basic
  [0] Number of roots=3, leaves=1, remote ranks=1
  [0] 0 <- (3,1)
  [1] Number of roots=2, leaves=2, remote ranks=1
  [1] 0 <- (0,1)
  [1] 2 <- (0,2)
  [2] Number of roots=2, leaves=2, remote ranks=2
  [2] 2 <- (0,2)
  [2] 0 <- (1,1)
  [3] Number of roots=2, leaves=2, remote ranks=2
  [3] 2 <- (0,2)
  [3] 0 <- (2,1)
  [0] Roots referenced by my leaves, by rank
  [0] 3: 1 edges
  [0]    0 <- 1
  [1] Roots referenced by my leaves, by rank
  [1] 0: 2 edges
  [1]    0 <- 1
  [1]    2 <- 2
  [2] Roots referenced by my leaves, by rank
  [2] 0: 1 edges
  [2]    2 <- 2
  [2] 1: 1 edges
  [2]    0 <- 1
  [3] Roots referenced by my leaves, by rank
  [3] 0: 1 edges
  [3]    2 <- 2
  [3] 2: 1 edges
  [3]    0 <- 1
  MultiSF sort=rank-order
## Multi-SF
PetscSF Object: 4 MPI processes
  type: basic
  [0] Number of roots=5, leaves=2, remote ranks=2
  [0] 0 <- (3,1)
  [0] 1 <- (1,0)
  [1] Number of roots=2, leaves=3, remote ranks=2
  [1] 0 <- (0,1)
  [1] 1 <- (2,0)
  [1] 2 <- (0,2)
  [2] Number of roots=2, leaves=3, remote ranks=3
  [2] 0 <- (1,1)
  [2] 1 <- (3,0)
  [2] 2 <- (0,3)
  [3] Number of roots=2, leaves=3, remote ranks=2
  [3] 0 <- (2,1)
  [3] 1 <- (0,0)
  [3] 2 <- (0,4)
  MultiSF sort=rank-order
## Multi-SF roots indices in original SF roots numbering
[0] 0: 0 1 2 2 2
[1] 0: 0 1
[2] 0: 0 1
[3] 0: 0 1
## Inverse of Multi-SF
PetscSF Object: 4 MPI processes
  type: basic
  [0] Number of roots=2, leaves=5, remote ranks=3
  [0] 0 <- (3,1)
  [0] 1 <- (1,0)
  [0] 2 <- (1,2)
  [0] 3 <- (2,2)
  [0] 4 <- (3,2)
  [1] Number of roots=3, leaves=2, remote ranks=2
  [1] 0 <- (0,1)
  [1] 1 <- (2,0)
  [2] Number of roots=3, leaves=2, remote ranks=2
  [2] 0 <- (1,1)
  [2] 1 <- (3,0)
  [3] Number of roots=3, leaves=2, remote ranks=2
  [3] 0 <- (2,1)
  [3] 1 <- (0,0)
  MultiSF sort=rank-order
## Inverse of Multi-SF, original numbering
  [0] Number of roots=2, leaves=5, remote ranks=3
  [0] 0 <- (3,1)
  [0] 1 <- (1,0)
  [0] 2 <- (1,2)
  [0] 2 <- (2,2)
  [0] 2 <- (3,2)
  [1] Number of roots=3, leaves=2, remote ranks=2
  [1] 0 <- (0,1)
  [1] 1 <- (2,0)
  [2] Number of roots=3, leaves=2, remote ranks=2
  [2] 0 <- (1,1)
  [2] 1 <- (3,0)
  [3] Number of roots=3, leaves=2, remote ranks=2
  [3] 0 <- (2,1)
  [3] 1 <- (0,0)
