<div dir="ltr"><font color="#000000">I modified <a href="http://www.mcs.anl.gov/petsc/petsc-current/src/mat/examples/tutorials/ex11.c.html">ex11.c: Tests MatMeshToDual()</a> in order to partition the unstructured grid provided in Petsc <a href="http://www.mcs.anl.gov/petsc/petsc-current/docs/manual.pdf">documentation</a>, page 71. The resulting code is as follows but <i>MatView()</i> does not print entries of matrix, <i>dual</i> whereas in the original example it does. Why?</font><div><span style="color:rgb(102,102,102)"><br></span></div><div><div><font color="#000000">static char help[] = "Tests MatMeshToDual()\n\n";</font></div><div><font color="#000000"><br></font></div><div><font color="#000000">/*T</font></div><div><font color="#000000">Concepts: Mat^mesh partitioning</font></div><div><font color="#000000">Processors: n</font></div><div><font color="#000000">T*/</font></div><div><font color="#000000"><br></font></div><div><font color="#000000">/*</font></div><div><font color="#000000">   Include "petscmat.h" so that we can use matrices.</font></div><div><font color="#000000">   automatically includes:</font></div><div><font color="#000000">   petscsys.h       - base PETSc routines   petscvec.h    - vectors</font></div><div><font color="#000000">   petscmat.h    - matrices</font></div><div><font color="#000000">   petscis.h     - index sets            petscviewer.h - viewers</font></div><div><font color="#000000">   */</font></div><div><font color="#000000">#include <petscmat.h></font></div><div><font color="#000000"><br></font></div><div><font color="#000000">#undef __FUNCT__</font></div><div><font color="#000000">#define __FUNCT__ "main"</font></div><div><font color="#000000">int main(int argc,char **args)</font></div><div><font color="#000000">{</font></div><div><font color="#000000">    Mat             mesh,dual;</font></div><div><font color="#000000">    PetscErrorCode  ierr;</font></div><div><font color="#000000">    PetscInt        Nvertices = 4;       /* total number of vertices */</font></div><div><font color="#000000">    PetscInt        ncells    = 2;       /* number cells on this process */</font></div><div><font color="#000000">    PetscInt        *ii,*jj;</font></div><div><font color="#000000">    PetscMPIInt     size,rank;</font></div><div><font color="#000000">    MatPartitioning part;</font></div><div><font color="#000000">    IS              is;</font></div><div><font color="#000000"><br></font></div><div><font color="#000000">    PetscInitialize(&argc,&args,(char*)0,help);</font></div><div><font color="#000000">    ierr = MPI_Comm_size(MPI_COMM_WORLD,&size);CHKERRQ(ierr);</font></div><div><font color="#000000">    if (size != 2) SETERRQ(PETSC_COMM_WORLD,PETSC_ERR_SUP,"This example is for exactly two processes");</font></div><div><font color="#000000">    ierr = MPI_Comm_rank(MPI_COMM_WORLD,&rank);CHKERRQ(ierr);</font></div><div><font color="#000000"><br></font></div><div><font color="#000000">    ierr  = PetscMalloc1(3,&ii);CHKERRQ(ierr);</font></div><div><font color="#000000">    ierr  = PetscMalloc1(3,&jj);CHKERRQ(ierr);</font></div><div><font color="#000000">    if (rank == 0) {</font></div><div><font color="#000000">        ii[0] = 0; ii[1] = 2; ii[2] = 3;</font></div><div><font color="#000000">        jj[0] = 2; jj[1] = 3; jj[2] = 3;</font></div><div><font color="#000000">    } else {</font></div><div><font color="#000000">        ii[0] = 0; ii[1] = 1; ii[2] = 3;</font></div><div><font color="#000000">        jj[0] = 0; jj[1] = 0; jj[2] = 1;</font></div><div><font color="#000000">    }</font></div><div><font color="#000000">    ierr = MatCreateMPIAdj(MPI_COMM_WORLD,ncells,Nvertices,ii,jj,NULL,&mesh);CHKERRQ(ierr);</font></div><div><font color="#000000">    ierr = MatMeshToCellGraph(mesh,2,&dual);CHKERRQ(ierr);</font></div><div><font color="#000000">    ierr = MatView(dual,PETSC_VIEWER_STDOUT_WORLD);CHKERRQ(ierr);</font></div><div><font color="#000000"><br></font></div><div><font color="#000000">    ierr = MatPartitioningCreate(MPI_COMM_WORLD,&part);CHKERRQ(ierr);</font></div><div><font color="#000000">    ierr = MatPartitioningSetAdjacency(part,dual);CHKERRQ(ierr);</font></div><div><font color="#000000">    ierr = MatPartitioningSetFromOptions(part);CHKERRQ(ierr);</font></div><div><font color="#000000">    ierr = MatPartitioningApply(part,&is);CHKERRQ(ierr);</font></div><div><font color="#000000">    ierr = ISView(is,PETSC_VIEWER_STDOUT_WORLD);CHKERRQ(ierr);</font></div><div><font color="#000000">    ierr = ISDestroy(&is);CHKERRQ(ierr);</font></div><div><font color="#000000">    ierr = MatPartitioningDestroy(&part);CHKERRQ(ierr);</font></div><div><font color="#000000"><br></font></div><div><font color="#000000">    ierr = MatDestroy(&mesh);CHKERRQ(ierr);</font></div><div><font color="#000000">    ierr = MatDestroy(&dual);CHKERRQ(ierr);</font></div><div><font color="#000000">    ierr = PetscFinalize();</font></div><div><font color="#000000">    return 0;</font></div><div><font color="#000000">}</font></div></div></div>