<html><head><meta http-equiv="Content-Type" content="text/html; charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><div class=""><br class=""></div>  You only need to provide one of the options. <div class=""><br class=""></div><div class="">   The docs are slightly misleading.The flags only tells the matrix what to do with new nonzero locations, preventing new ones. The Mat actually tracks if new non-zeros locations are actually entered independent of the flags. So, for example even if you did not supply any new flags AND your code did not insert new locations then the structure would be reused.</div><div class=""><br class=""></div><div class="">   Barry<br class=""><div><br class=""><blockquote type="cite" class=""><div class="">On Oct 13, 2020, at 7:47 AM, Thibaut Appel <<a href="mailto:t.appel17@imperial.ac.uk" class="">t.appel17@imperial.ac.uk</a>> wrote:</div><br class="Apple-interchange-newline"><div class="">
  

    <meta http-equiv="content-type" content="text/html; charset=UTF-8" class="">
  
  <div class=""><p class="">Hi there, just a quick question:</p><p class="">It seems MAT_NEW_NONZERO_LOCATION_ERR set to PETSC_TRUE has kind
      of the same purpose as MAT_NEW_NONZERO_LOCATIONS set to
      PETSC_FALSE, the difference being if an additional entry is there,
      the former produces an error whereas in the latter it is simply
      ignored.</p><p class="">However the manual states:</p><p class="">'If one wishes to repeatedly assemble matrices that retain the
      same nonzero pattern (such as within a nonlinear
      or time-dependent problem), the option
      MatSetOption(MatA,<b class="">MAT_NEW_NONZERO_LOCATIONS,PETSC_FALSE</b>);
      should be specified after the first matrix has been fully
      assembled. This option ensures that certain data
      structures and communication information will be reused (instead
      of regenerated) during successive steps,
      thereby increasing efficiency'</p><p class="">If I only declare:</p><p class="">    CALL
      MatSetOption(MatA,MAT_NEW_NONZERO_LOCATION_ERR,PETSC_TRUE,ierr)</p><p class="">Would the data structures still be reused in later matrix
      assemblies?<br class="">
    </p><p class="">Or does it rather make sense to use conjointly:</p><p class="">    CALL
      MatSetOption(MatA,MAT_NEW_NONZERO_LOCATION_ERR,PETSC_TRUE,ierr)<br class="">
          CALL
      MatSetOption(MatA,MAT_NEW_NONZERO_LOCATIONS,PETSC_FALSE,ierr)<br class="">
    </p><p class="">Thank you,<br class="">
    </p><p class=""><br class="">
    </p><p class="">Thibaut<br class="">
    </p>
  </div>

</div></blockquote></div><br class=""></div></body></html>