<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><div class="">This seems a problem related with your code, I suggest you to run valgrind.</div>Which version of PETSc are you using?<div class=""><div><br class=""></div><div><br class=""><blockquote type="cite" class=""><div class="">On Jun 14, 2019, at 3:12 PM, José Lorenzo <<a href="mailto:joslorgom@gmail.com" class="">joslorgom@gmail.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class=""><div class="">Following the PETSC examples, I was trying something like:</div><div class=""><br class=""></div><div class=""> call ISLocalToGlobalMappingCreate(PETSC_COMM_WORLD, 1, nidx, idx_global, PETSC_COPY_VALUES, ltog, ierr)<br class=""><br class=""> call MatCreateIS(PETSC_COMM_WORLD, 1_ip, proedg(rank), proedg(rank), PETSC_DETERMINE, PETSC_DETERMINE, ltog, ltog, An, ierr)</div><div class=""><br class=""></div><div class=""> call MatISSetPreallocation(An, d_nz, PETSC_NULL_INTEGER, o_nz, PETSC_NULL_INTEGER, ierr)</div><div class=""><br class=""></div><div class="">with idx_global storing the global indices of both local and ghost edges, and proedg(rank) the number of edges at the current processor. <br class=""></div><div class=""><br class=""></div><div class="">The program crashes in the Preallocation subroutine:</div><div class=""><br class=""></div><div class="">[0]PETSC ERROR: --------------------- Error Message --------------------------------------------------------------<br class="">[0]PETSC ERROR: Argument out of range<br class="">[0]PETSC ERROR: nnz cannot be less than 0: local row 4 value -7493980938351671286<br class="">[0]PETSC ERROR: See <a href="http://www.mcs.anl.gov/petsc/documentation/faq.html" class="">http://www.mcs.anl.gov/petsc/documentation/faq.html</a> for trouble shooting.</div><div class="">[0]PETSC ERROR: #1 MatSeqAIJSetPreallocation_SeqAIJ() line 3670 in PETSC_DIR/src/mat/impls/aij/seq/aij.c<br class="">[0]PETSC ERROR: #2 MatSeqAIJSetPreallocation() line 3646 in PETSC_DIR/src/mat/impls/aij/seq/aij.c</div><div class="">[0]PETSC ERROR: #3 MatISSetPreallocation_IS() line 1795 in PETSC_DIR/src/mat/impls/is/matis.c</div><div class=""><br class=""></div><div class="">And with your suggestion I get the same error during the preallocation step.</div><div class=""><br class=""></div><div class="">Thank you.<br class=""></div><div class=""><br class=""></div></div><br class=""><div class="gmail_quote"><div dir="ltr" class="gmail_attr">El vie., 14 jun. 2019 a las 14:24, Stefano Zampini (<<a href="mailto:stefano.zampini@gmail.com" class="">stefano.zampini@gmail.com</a>>) escribió:<br class=""></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div style="overflow-wrap: break-word;" class="">Jose,<div class=""><br class=""></div><div class="">The local size of the matrix (the one you use in MatSetSizes) tells Petsc what is the size of the local portion of the vectors involved in matrix vector products.<div class="">It has nothing to do with the size of the local Neumann problem needed by MatIS. These are inferred from the local to global mapping of the degrees of freedom</div><div class="">In your case, the l2g object needs to map all the dofs that corresponds to the local mesh to their global dof numbering (you can take a look here <a href="https://epubs.siam.org/doi/abs/10.1137/15M1025785" target="_blank" class="">https://epubs.siam.org/doi/abs/10.1137/15M1025785</a>)</div><div class=""><br class=""></div><div class="">MatCreate(comm,&A)</div><div class="">MatSetSizes(A,PETSC_DECIDE,PETSC_DECIDE,N,N)<br class=""><div class="">MatSetType(A,MATIS)</div><div class="">MatSetLocalToGlobalMapping(A,l2g,l2g)// this creates the local Neumann matrices</div><div class=""><br class=""></div><div class="">For n = 1: number_of_local_elements</div><div class=""> Construct element matrix</div><div class=""> // you have two alternitives</div><div class=""> MatSetValuesLocal(A, // using local ordering of dofs</div><div class=""> //or MatSetValues(A, // using global ordering of dofs</div><div class="">end</div><div class=""><br class=""><blockquote type="cite" class=""><div class="">On Jun 14, 2019, at 5:09 AM, José Lorenzo via petsc-users <<a href="mailto:petsc-users@mcs.anl.gov" target="_blank" class="">petsc-users@mcs.anl.gov</a>> wrote:</div><br class="gmail-m_-875568732586015957Apple-interchange-newline"><div class=""><div dir="ltr" class=""><p class="">I am working with Nedelec Finite Elements and using ghost vectors to
store the ghost values of the solution in the edges that do not belong
to current processor.<br class="">
</p><p class="">Since I have a large contrast in material properties I would like to
try the PCBDDC preconditioner in PETSC. Apparently, my matrix needs to
be of type MatIS, but I don't get to understand how MatCreateIS would
work in my particular case, although I did have a look at mat/ex3.c and
ksp/ex59.c</p><p class="">I set the local size m to the number of edges in current processor,
but I do not know whether I should include the number of ghost edges.
And for the local size n should I use the total number of DOFs or
proceed as with m? <br class="">
</p><p class=""><br class="">
</p><p class="">Thanks,</p><p class="">Jose</p>
</div>
</div></blockquote></div><br class=""></div></div></div></blockquote></div>
</div></blockquote></div><br class=""></div></body></html>