<div dir="ltr"><div>I have a 3x6 matrix, and I want to set it to (just as an example):</div><div><br></div><div>0 0 0 1 1 1</div><div>0 0 0 1 1 1</div><div>0 0 0 1 1 1<br><br>From what I can tell, according to the documentation the MPIAIJ sparsity of this matrix is:</div><div><br></div><div>d_nnz = [0, 0, 0]</div><div>o_nnz = [3, 3, 3]</div><div><br></div><div>However, when I do this, I get the following error:</div><div><br></div><div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">[0]PETSC ERROR: --------------------- Error Message --------------------------------------------------------------                                                                           <br>[0]PETSC ERROR: Argument out of range<br>[0]PETSC ERROR: New nonzero at (0,3) caused a malloc<br>Use MatSetOption(A, MAT_NEW_NONZERO_ALLOCATION_ERR, PETSC_FALSE) to turn off this check<br>[0]PETSC ERROR: See <a href="http://www.mcs.anl.gov/petsc/documentation/faq.html">http://www.mcs.anl.gov/petsc/documentation/faq.html</a> for trouble shooting.<br>[0]PETSC ERROR: Petsc Release Version 3.7.5, unknown <br>[0]PETSC ERROR: ./ex3 on a arch-linux2-c-opt Tue Feb 14 04:23:56 2017<br>[0]PETSC ERROR: Configure options --with-debugging=0 --COPTFLAGS="-O3 -march=native" --CXXOPTFLAGS="-O3 -march=native" --FOPTFLAGS="-O3 -march=native"                           <br>[0]PETSC ERROR: #1 MatSetValues_MPIAIJ() line 582 in petsc/src/mat/impls/aij/mpi/mpiaij.c<br>[0]PETSC ERROR: #2 MatSetValues() line 1190 in petsc/src/mat/interface/matrix.c                    <br>[0]PETSC ERROR: #3 main() line 36 in ex3.c<br>[0]PETSC ERROR: No PETSc Option Table entries<br>[0]PETSC ERROR: ----------------End of Error Message -------send entire error message to petsc-maint@mcs.anl.gov----------</blockquote><div><br></div><div>Here's a working test code:</div><div><br></div><div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">#include <petsc.h><br>#include <mpi.h><br>int main(int argc, char** argv)<br>{<br>  PetscErrorCode err;<br>  err = PetscInitialize(&argc, &argv, NULL, "help");<br>  CHKERRQ(err);<br>  // create a sparse AIJ matrix distributed across MPI<br>  PetscInt global_width = 6;<br>  PetscInt global_height = 3;<br>  Mat A;<br>  err = MatCreate(MPI_COMM_WORLD, &A);<br>  CHKERRQ(err);<br>  err = MatSetType(A, MATMPIAIJ);<br>  CHKERRQ(err);<br>  // setup pre-allocation for matrix space<br>  {<br>    err =<br>      MatSetSizes(A, global_height, PETSC_DECIDE, global_height, global_width);<br>    CHKERRQ(err);<br>    PetscInt d_nnz[] = {0, 0, 0};<br>    PetscInt o_nnz[] = {3, 3, 3};<br>    err = MatMPIAIJSetPreallocation(A, 0, d_nnz, 0, o_nnz);<br>    CHKERRQ(err);<br>  }<br>  err = MatSetUp(A);<br>  CHKERRQ(err);<br>  // set values inside the matrix<br>  for (PetscInt row = 0; row < global_height; ++row)<br>  {<br>    for (PetscInt col = global_height; col < global_width; ++col)<br>    {<br>      err = MatSetValue(A, row, col, 1, INSERT_VALUES);<br>      CHKERRQ(err);<br>    }<br>  }<br>  err = MatAssemblyBegin(A, MAT_FINAL_ASSEMBLY);<br>  CHKERRQ(err);<br>  err = MatAssemblyEnd(A, MAT_FINAL_ASSEMBLY);<br>  CHKERRQ(err);<br>  err = MatView(A, PETSC_VIEWER_STDOUT_WORLD);<br>  CHKERRQ(err);<br>  // free memory<br>  err = MatDestroy(&A);<br>  CHKERRQ(err);<br>  // cleanup any internal PETSc data at end of program<br>  err = PetscFinalize();<br>  CHKERRQ(err);<br>}</blockquote></div><div><br></div><div>Am I mis-understanding what the d_nnz and o_nnz parameter are supposed to mean?</div>-- <br><div class="gmail_signature"><div dir="ltr">Andrew Ho</div></div></div></div>