<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css" style="display:none"><!--P{margin-top:0;margin-bottom:0;} p
        {margin-top:0;
        margin-bottom:0}--></style>
</head>
<body dir="ltr" style="font-size:12pt;color:#000000;background-color:#FFFFFF;font-family:Calibri,Arial,Helvetica,sans-serif;">
<p>Hello,</p>
<p><br>
</p>
<p>I am trying to determine how the rows and columns of my PETSc Mat are being mapped to different MPI processes.  I call MatGetLocalToGlobalMapping, but the ISLocalToGlobalMapping obtained for both the rows and columns is null, and I receive the following
 error message when I call ISLocalToGlobalMappingGetSize:</p>
<p><br>
</p>
<p>[1]PETSC ERROR: --------------------- Error Message --------------------------------------------------------------<br>
[1]PETSC ERROR: Null argument, when expecting valid pointer<br>
[1]PETSC ERROR: Null Object: Parameter # 1<br>
[1]PETSC ERROR: See http://www.mcs.anl.gov/petsc/documentation/faq.html for trouble shooting.<br>
[1]PETSC ERROR: Petsc Release Version 3.6.0, Jun, 09, 2015<br>
[1]PETSC ERROR: ./AnasaziTest.exe on a arch-linux2-cxx-debug named hardin.srn.sandia.gov by amklinv Mon Jul 27 10:25:35 2015<br>
[1]PETSC ERROR: Configure options --with-blas-lib=/home/amklinv/lapack-3.5.0/librefblas.a --with-lapack-lib=/home/amklinv/lapack-3.5.0/liblapack.a --with-mpi-dir=/projects/install/rhel6-x86_64/sems/compiler/gcc/4.7.2/openmpi/1.6.5 --prefix=/home/amklinv/PETSc/petsc_install
 --with-shared-libraries=0 --with-cxx-dialect=C++11 --with-c++-support --with-clanguage=cxx --download-superlu_dist --download-superlu --download-hypre --download-metis --download-parmetis<br>
[1]PETSC ERROR: #1 ISLocalToGlobalMappingGetSize() line 55 in /home/amklinv/PETSc/petsc-3.6.0/src/vec/is/utils/isltog.c<br>
[1]PETSC ERROR: #2 Tpetra_PETScAIJRowGraph() line 247 in Tpetra_PETScAIJRowGraph.hpp<br>
[2]PETSC ERROR: --------------------- Error Message --------------------------------------------------------------</p>
<p><br>
</p>
<p>Does this mean I set up the matrix incorrectly, or is there a different function I should be calling instead?<br>
</p>
<p><br>
</p>
<p>The relevant pieces of source code are below (although I would be happy to provide additional information if it would prove useful).</p>
<p><br>
</p>
<p>Thank you,</p>
<p>Alicia Klinvex</p>
<p><br>
</p>
<p><br>
</p>
<p><br>
</p>
<p>  Mat            A;        /* PETSc matrix */<br>
<br>
  PetscInitialize(&argc,&args,(char *)0,help);<br>
<br>
  ierr = MatCreate(PETSC_COMM_WORLD,&A);CHKERRQ(ierr);<br>
  ierr = MatSetSizes(A,PETSC_DECIDE,PETSC_DECIDE,m*n,m*n);CHKERRQ(ierr);<br>
  ierr = MatSetType(A, MATAIJ);CHKERRQ(ierr);<br>
  ierr = MatSetFromOptions(A);CHKERRQ(ierr);<br>
  ierr = MatMPIAIJSetPreallocation(A,5,PETSC_NULL,5,PETSC_NULL);CHKERRQ(ierr);<br>
  ierr = MatSetUp(A);CHKERRQ(ierr);<br>
  PetscObjectGetComm( (PetscObject)A, &comm);<br>
  ierr = MPI_Comm_rank(comm,&rank);CHKERRQ(ierr);<br>
  if (!rank) printf("Matrix has %d (%dx%d) rows\n",m*n,m,n);<br>
<br>
  ierr = MatGetOwnershipRange(A,&Istart,&Iend);CHKERRQ(ierr);<br>
<br>
  for (Ii=Istart; Ii<Iend; Ii++) { <br>
    v = -1.0; i = Ii/n; j = Ii - i*n;  <br>
    if (i>0)   {J = Ii - n; ierr = MatSetValues(A,1,&Ii,1,&J,&v,INSERT_VALUES);CHKERRQ(ierr);}<br>
    if (i<m-1) {J = Ii + n; ierr = MatSetValues(A,1,&Ii,1,&J,&v,INSERT_VALUES);CHKERRQ(ierr);}<br>
    if (j>0)   {J = Ii - 1; ierr = MatSetValues(A,1,&Ii,1,&J,&v,INSERT_VALUES);CHKERRQ(ierr);}<br>
    if (j<n-1) {J = Ii + 1; ierr = MatSetValues(A,1,&Ii,1,&J,&v,INSERT_VALUES);CHKERRQ(ierr);}<br>
    v = 4.0; ierr = MatSetValues(A,1,&Ii,1,&Ii,&v,INSERT_VALUES);CHKERRQ(ierr);<br>
  }<br>
<br>
  ierr = MatAssemblyBegin(A,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr);<br>
  ierr = MatAssemblyEnd(A,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr);</p>
<p><br>
</p>
<p>...<br>
</p>
<p> </p>
<p> ISLocalToGlobalMapping PETScRowOwnership, PETScColOwnership;<br>
 <br>
  ierr = MatGetLocalToGlobalMapping(A, &PETScRowOwnership, &PETScColOwnership); CHKERRV(ierr);<br>
  ierr = ISLocalToGlobalMappingGetSize(PETScRowOwnership, &PETScLocalCols); CHKERRV(ierr);<br>
</p>
</body>
</html>