<div dir="ltr">Hello everyone again,<div><br></div><div>I was making an index mistake in for loop. I corrected it and my problem solved.</div><div><br></div><div>Thank you,</div><div><br></div><div>Eda</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">Eda Oktay <<a href="mailto:eda.oktay@metu.edu.tr">eda.oktay@metu.edu.tr</a>>, 17 Haz 2019 Pzt, 10:28 tarihinde şunu yazdı:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div>Hello everyone,<br></div><div><br></div><div>I am trying to permute a matrix by using a sorted eigenvector in order to partition the matrix. I sorted the vector and got the index set idx. I am using 2 processors and I have to divide the vector into 2 according to the sign of elements (first negative signed ones, then positive signed ones) first, so I wrote the code below (if-else part). After sorting and dividing them, I need to permute the matrix with these index sets.</div><div><br></div><div>However, in last line (MatPermute), I got the following error:</div><div><br></div><div>[0]PETSC ERROR: --------------------- Error Message --------------------------------------------------------------<br>[0]PETSC ERROR: Argument out of range<br>[0]PETSC ERROR: Index 13 is out of range<br>[0]PETSC ERROR: See <a href="http://www.mcs.anl.gov/petsc/documentation/faq.html" target="_blank">http://www.mcs.anl.gov/petsc/documentation/faq.html</a> for trouble shooting.<br>[0]PETSC ERROR: Petsc Release Version 3.11.1, Apr, 12, 2019 <br>[0]PETSC ERROR: ./son_without_parmetis on a arch-linux2-c-debug named <a href="http://5470.wls.metu.edu.tr" target="_blank">5470.wls.metu.edu.tr</a> by edaoktay Mon Jun 17 10:11:54 2019<br>[0]PETSC ERROR: Configure options --download-mpich --download-openblas --download-slepc --download-metis --download-parmetis --download-chaco --with-X=1<br>[0]PETSC ERROR: #1 PetscLayoutFindOwner() line 249 in /home/edaoktay/petsc-3.11.1/include/petscis.h<br>[0]PETSC ERROR: #2 PetscSFSetGraphLayout() line 545 in /home/edaoktay/petsc-3.11.1/src/vec/is/utils/pmap.c<br>[0]PETSC ERROR: #3 MatPermute_MPIAIJ() line 1622 in /home/edaoktay/petsc-3.11.1/src/mat/impls/aij/mpi/mpiaij.c<br>[0]PETSC ERROR: #4 MatPermute() line 5095 in /home/edaoktay/petsc-3.11.1/src/mat/interface/matrix.c<br>[0]PETSC ERROR: #5 main() line 354 in /home/edaoktay/petsc-3.11.1/arch-linux2-c-debug/share/slepc/examples/src/eda/son_without_parmetis.c<br>[0]PETSC ERROR: PETSc Option Table entries:<br>[0]PETSC ERROR: -f /home/edaoktay/petsc-3.11.1/share/petsc/datafiles/matrices/binary_files/LFAT5_binary<br>[0]PETSC ERROR: -weighted<br>[0]PETSC ERROR: ----------------End of Error Message -------send entire error message to petsc-maint@mcs.anl.gov----------<br></div><div><br></div><div>I also found out that when I look at the submatrix Ais, I got different sized matrix. For example, I used 14*14 matrix, I get the vector of length 14 but then idx is divided into 5 and 7 elements so Ais is of size 12. 2 of the positive signed elements are not counted and I didn't understand why.</div><div><br></div><div>I also checked the if-else part and I found out that this portion of the code is ran by processor 0.  Can be this the problem for different sized Ais? And how can I fix that problem?</div><div><br></div><div>Thanks,</div><div><br></div><div>Eda </div><div><br></div><div><br></div>PetscMPIInt rank,size;<br>  MPI_Comm_rank(PETSC_COMM_WORLD, &rank);<br>  MPI_Comm_size(PETSC_COMM_WORLD, &size);<br><br>  PetscInt kk;                                                                  <br>  for (i=0;i<siz;i++){<br>      if (avr[i] < 0){<br>          ++kk;<br>      }<br>  }<br>  <br>  PetscInt *idxx;<br>  IS iskk;<br>  PetscInt sizeofidxx;<br>  if (rank == 0){                                                               <br>      PetscMalloc1(kk,&idxx);<br>      j = 0;<br>      for (i=0; i<kk; i++){<br>          idxx[j] = idx[i];<br>          j++;<br>      }<br>  } else{<br>      PetscMalloc1(siz-kk,&idxx);<br>      j = 0;<br>      for (i=siz-kk-2 ;i<siz; i++){<br>          idxx[j] = idx[i];<br>          j++;<br>      }<br>  }<br>  <br>  sizeofidxx = j;<br>  ISCreateGeneral(PETSC_COMM_WORLD,sizeofidxx,idxx,PETSC_COPY_VALUES,&is);<br>  ISView(is,PETSC_VIEWER_STDOUT_WORLD);<br><br>  /*Permute matrix L (spy(A(p1,p1)))*/<br>  <br>  Mat Ais;<br>  MatCreateSubMatrix(A,is,is,MAT_INITIAL_MATRIX,&Ais);<br>  ierr =ISSetPermutation(is);CHKERRQ(ierr); <br><br>    /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<br>                    Create Partitioning <br>     - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */<br>    PetscInt mA,nA,mL,nL;<br>    MatGetSize(Ais,&mA,&nA);<br>    MatGetLocalSize(Ais,&mL,&nL);<br>    PetscPrintf(PETSC_COMM_WORLD," Size of Ais: %D,%D\n",mA,nA);<br>    PetscPrintf(PETSC_COMM_WORLD," Size of local Ais: %D,%D\n",mL,nL);<br>    <br>  ierr = MatPermute(Ais,is,is,&PL);CHKERRQ(ierr); <br></div>
</blockquote></div>