<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<div dir="ltr">
<div dir="ltr">Thibaut :<br>
</div>
<div>Sorry, I did not explain it clearly. You call </div>
<div>MatSetOption(A,MAT_NEW_NONZERO_LOCATION_ERR,PETSC_TRUE);<br>
</div>
<div>AFTER matrix is assembled. Then no more new zero is allowed to add/insert. For example, I add following in</div>
<div>petsc/src/ksp/ksp/examples/tutorials/ex1.c:<br>
</div>
<div><br>
   ierr = MatAssemblyBegin(A,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr);<br>
   ierr = MatAssemblyEnd(A,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr);<br>
<br>
+  ierr = MatSetOption(A,MAT_NEW_NONZERO_LOCATION_ERR,PETSC_TRUE);CHKERRQ(ierr);<br>
+  i    = 0; col[0] = 2; <br>
+  ierr = MatSetValues(A,1,&i,2,col,value,INSERT_VALUES);CHKERRQ(ierr);<br>
+  ierr = MatAssemblyBegin(A,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr);<br>
+  ierr = MatAssemblyEnd(A,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr);<br>
+<br>
</div>
<div>Then the code crashes with</div>
<div>0]PETSC ERROR: Argument out of range<br>
[0]PETSC ERROR: Inserting a new nonzero at (0,2) in the matrix.<br>
</div>
<div><br>
</div>
<div>Adding entries to the tridiagonal works. </div>
<div>Hong</div>
<div class="gmail_quote">
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div bgcolor="#FFFFFF">
<p>Well, try and create a small SEQAIJ/MPIAIJ matrix and preallocate memory for the diagonal.<br>
</p>
<p>When I try to call MatSetValues to fill the diagonal, on the first row I get <br>
</p>
<p>[0]PETSC ERROR: Argument out of range<br>
[0]PETSC ERROR: Inserting a new nonzero at (0,0) in the matrix</p>
<p>Which is within my preallocated non-zero structure.</p>
<p>This is why I'm confused.<br>
</p>
<p>Thibaut</p>
<p><br>
</p>
<div>On 08/10/2019 15:31, Zhang, Hong wrote:<br>
</div>
<blockquote type="cite">
<div dir="ltr">
<div dir="ltr">Thibaut:<br>
</div>
<div class="gmail_quote">
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
Hi,<br>
<br>
Just out of curiosity, I'm a bit confused by the parameter option <br>
MAT_NEW_NONZERO_LOCATION_ERR.<br>
<br>
It triggers an error if you try to insert/add a value in the non-zero <br>
structure, regardless of the matrix preallocation status. In what case </blockquote>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
would such an option be useful?<br>
</blockquote>
<div> </div>
<div> It triggers an error if you try to insert/add a NEW value outside of your preallocated non-zero structure.</div>
<div>Hong</div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
</blockquote>
</div>
</div>
</blockquote>
</div>
</blockquote>
</div>
</div>
</body>
</html>