On Tue, Mar 6, 2012 at 2:13 AM, Klaij, Christiaan <span dir="ltr">&lt;<a href="mailto:C.Klaij@marin.nl">C.Klaij@marin.nl</a>&gt;</span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
In a larger code I&#39;m getting a segmentation fault when setting a null space<br>
with KSPSetNullSpace. After some trying I can reproduce the problem with<br>
the small code below. It happens when calling VecSum on a nested vec.<br></blockquote><div><br></div><div>Runs for me:</div><div><br></div><div><div>Vector Object:</div><div>  type=nest, rows=2 </div><div>  VecNest  structure: </div>
<div>  (0) : type=mpi, rows=24 </div><div>    Vector Object:     1 MPI processes</div><div>      type: mpi</div><div>    Process [0]</div><div>    0</div><div>    0</div><div>    0</div><div>    0</div><div>    0</div><div>
    0</div><div>    0</div><div>    0</div><div>    0</div><div>    0</div><div>    0</div><div>    0</div><div>    0</div><div>    0</div><div>    0</div><div>    0</div><div>    0</div><div>    0</div><div>    0</div><div>
    0</div><div>    0</div><div>    0</div><div>    0</div><div>    0</div><div>  (1) : type=mpi, rows=12 </div><div>    Vector Object:     1 MPI processes</div><div>      type: mpi</div><div>    Process [0]</div><div>    0</div>
<div>    0</div><div>    0</div><div>    0</div><div>    0</div><div>    0</div><div>    0</div><div>    0</div><div>    0</div><div>    0</div><div>    0</div><div>    0</div></div><div><br></div><div>and it was valgrind clean. Are you running on multiple processes?</div>
<div><br></div><div>   Matt</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
/*  test program to find VecSum segmentation fault */<br>
<br>
#include &lt;petscksp.h&gt;<br>
<br>
class vecsumsegv {<br>
public:<br>
  PetscErrorCode ierr;<br>
  PetscInt       nx, ny;<br>
  Vec            x, subx[2];<br>
  IS             isg[2];<br>
  vecsumsegv(PetscInt m, PetscInt n);<br>
private:<br>
  PetscErrorCode setupVectors();<br>
  PetscErrorCode setupIndexSets();<br>
  PetscErrorCode setupVecBlock0();<br>
  PetscErrorCode setupVecBlock1();<br>
};<br>
<br>
vecsumsegv::vecsumsegv(PetscInt m, PetscInt n) {<br>
  nx=m;<br>
  ny=n;<br>
  ierr = setupVectors();<br>
  ierr = setupIndexSets();<br>
  ierr = VecCreateNest(PETSC_COMM_WORLD,2,isg,subx,&amp;x); // nested vec<br>
  ierr = VecView(x,(PetscViewer)PETSC_VIEWER_DEFAULT);<br>
  // this causes the segv:<br>
  PetscScalar val;<br>
  ierr = VecSum(x,&amp;val);<br>
}<br>
<br>
PetscErrorCode vecsumsegv::setupVectors() {<br>
  // the two vectors<br>
  ierr = setupVecBlock0(); CHKERRQ(ierr);<br>
  ierr = setupVecBlock1(); CHKERRQ(ierr);<br>
  return 0;<br>
}<br>
<br>
PetscErrorCode vecsumsegv::setupVecBlock0() {<br>
  // 2N vector corresponding to block 0<br>
  ierr = VecCreate(PETSC_COMM_WORLD,&amp;subx[0]); CHKERRQ(ierr);<br>
  ierr = VecSetSizes(subx[0],PETSC_DECIDE,2*nx*ny); CHKERRQ(ierr);<br>
  ierr = VecSetType(subx[0],VECMPI); CHKERRQ(ierr);<br>
  return 0;<br>
}<br>
<br>
PetscErrorCode vecsumsegv::setupVecBlock1() {<br>
  // N vector corresponding to block 1<br>
  ierr = VecCreate(PETSC_COMM_WORLD,&amp;subx[1]); CHKERRQ(ierr);<br>
  ierr = VecSetSizes(subx[1],PETSC_DECIDE,nx*ny); CHKERRQ(ierr);<br>
  ierr = VecSetType(subx[1],VECMPI); CHKERRQ(ierr);<br>
  return 0;<br>
}<br>
<br>
PetscErrorCode vecsumsegv::setupIndexSets() {<br>
  PetscInt rank,m0,m1;<br>
  ierr = MPI_Comm_rank(PETSC_COMM_WORLD,&amp;rank); CHKERRQ(ierr);<br>
  ierr = VecGetLocalSize(subx[0],&amp;m0); CHKERRQ(ierr);<br>
  ierr = VecGetLocalSize(subx[1],&amp;m1); CHKERRQ(ierr);<br>
  // first index set<br>
  PetscInt *idx0=new PetscInt[m0];<br>
  for (int i=0; i&lt;m0; i++) { idx0[i]=i+rank*(m0+m1); }<br>
  ierr = ISCreateGeneral(PETSC_COMM_WORLD,m0,idx0,PETSC_COPY_VALUES,&amp;isg[0]); CHKERRQ(ierr);<br>
  delete[] idx0;<br>
  //  ISView(isg[0],PETSC_VIEWER_STDOUT_WORLD);<br>
  // second index set<br>
  PetscInt *idx1=new PetscInt[m1];<br>
  for (int i=0; i&lt;m1; i++) { idx1[i]=i+(rank+1)*m0+rank*m1; }<br>
  ierr = ISCreateGeneral(PETSC_COMM_WORLD,m1,idx1,PETSC_COPY_VALUES,&amp;isg[1]); CHKERRQ(ierr);<br>
  delete[] idx1;<br>
  //  ISView(isg[1],PETSC_VIEWER_STDOUT_WORLD);<br>
  return 0;<br>
}<br>
<br>
int main(int argc, char **argv) {<br>
  PetscErrorCode ierr;<br>
  PetscReal      val;<br>
  ierr = PetscInitialize(&amp;argc, &amp;argv, PETSC_NULL, PETSC_NULL); CHKERRQ(ierr);<br>
  vecsumsegv tryme(3,4);<br>
  ierr = PetscFinalize(); CHKERRQ(ierr);<br>
  return 0;<br>
}<br>
<br>
<br>
[0]PETSC ERROR: ------------------------------------------------------------------------<br>
[0]PETSC ERROR: Caught signal number 11 SEGV: Segmentation Violation, probably memory access out of range<br>
[0]PETSC ERROR: Try option -start_in_debugger or -on_error_attach_debugger<br>
[0]PETSC ERROR: or see <a href="http://www.mcs.anl.gov/petsc/petsc-as/documentation/faq.html#valgrind[0]PETSC" target="_blank">http://www.mcs.anl.gov/petsc/petsc-as/documentation/faq.html#valgrind[0]PETSC</a> ERROR: or try <a href="http://valgrind.org" target="_blank">http://valgrind.org</a> on GNU/linux and Apple Mac OS X to find memory corruption errors<br>

[0]PETSC ERROR: likely location of problem given in stack below<br>
[0]PETSC ERROR: ---------------------  Stack Frames ------------------------------------<br>
[0]PETSC ERROR: Note: The EXACT line numbers in the stack are not available,<br>
[0]PETSC ERROR:       INSTEAD the line number of the start of the function<br>
[0]PETSC ERROR:       is given.<br>
[0]PETSC ERROR: [0] VecSum line 1301 /home/CKlaij/ReFRESCO/Libraries/build/petsc-3.2-p5/src/vec/vec/utils/vinv.c<br>
[0]PETSC ERROR: --------------------- Error Message ------------------------------------<br>
[0]PETSC ERROR: Signal received!<br>
[0]PETSC ERROR: ------------------------------------------------------------------------<br>
[0]PETSC ERROR: Petsc Release Version 3.2.0, Patch 5, Sat Oct 29 13:45:54 CDT 2011<br>
[0]PETSC ERROR: See docs/changes/index.html for recent updates.<br>
[0]PETSC ERROR: See docs/faq.html for hints about trouble shooting.<br>
[0]PETSC ERROR: See docs/index.html for manual pages.<br>
[0]PETSC ERROR: ------------------------------------------------------------------------<br>
[0]PETSC ERROR: ./vecsumsegv on a linux_64b named lin0133 by cklaij Tue Mar  6 08:55:25 2012<br>
[0]PETSC ERROR: Libraries linked from /home/CKlaij/ReFRESCO/Libraries/build/petsc-3.2-p5/linux_64bit_debug/lib<br>
[0]PETSC ERROR: Configure run at Thu Mar  1 10:59:35 2012<br>
[0]PETSC ERROR: Configure options --with-mpi-dir=/opt/refresco/64bit_intelv11.1_openmpi/openmpi-1.4.5 --with-clanguage=c++ --with-x=1 --with-debugging=1 --with-hypre-include=/opt/refresco/64bit_intelv11.1_openmpi/hypre-2.7.0b/include --with-hypre-lib=/opt/refresco/64bit_intelv11.1_openmpi/hypre-2.7.0b/lib/libHYPRE.a --with-ml-include=/opt/refresco/64bit_intelv11.1_openmpi/ml-6.2/include --with-ml-lib=/opt/refresco/64bit_intelv11.1_openmpi/ml-6.2/lib/libml.a --with-blas-lapack-dir=/opt/intel/mkl<br>

[0]PETSC ERROR: ------------------------------------------------------------------------<br>
[0]PETSC ERROR: User provided function() line 0 in unknown directory unknown file<br>
--------------------------------------------------------------------------<br>
MPI_ABORT was invoked on rank 0 in communicator MPI_COMM_WORLD<br>
with errorcode 59.<br>
<br>
NOTE: invoking MPI_ABORT causes Open MPI to kill all MPI processes.<br>
You may or may not see output from other processes, depending on<br>
exactly when Open MPI kills them.<br>
--------------------------------------------------------------------------<br>
--------------------------------------------------------------------------<br>
mpiexec has exited due to process rank 0 with PID 565 on<br>
node lin0133 exiting without calling &quot;finalize&quot;. This may<br>
have caused other processes in the application to be<br>
terminated by signals sent by mpiexec (as reported here).<br>
--------------------------------------------------------------------------<br>
<br>
<br>
dr. ir. Christiaan Klaij<br>
CFD Researcher<br>
Research &amp; Development<br>
E mailto:<a href="mailto:C.Klaij@marin.nl">C.Klaij@marin.nl</a><br>
T <a href="tel:%2B31%20317%2049%2033%2044" value="+31317493344">+31 317 49 33 44</a><br>
<br>
MARIN<br>
2, Haagsteeg, P.O. Box 28, 6700 AA Wageningen, The Netherlands<br>
T <a href="tel:%2B31%20317%2049%2039%2011" value="+31317493911">+31 317 49 39 11</a>, F <a href="tel:%2B31%20317%2049%2032%2045" value="+31317493245">+31 317 49 32 45</a>, I <a href="http://www.marin.nl" target="_blank">www.marin.nl</a><br>

<br>
</blockquote></div><br><br clear="all"><div><br></div>-- <br>What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.<br>
-- Norbert Wiener<br>