[petsc-users] Error in VecAssemeblyBegin after VecView
Satish Balay
balay at mcs.anl.gov
Wed Jan 4 16:21:38 CST 2012
The fix is here.
http://petsc.cs.iit.edu/petsc/releases/petsc-3.2/rev/cd89aa6b51bc
You can download the 'raw' patch [from the 'raw' link above] - save it
as 'patchfile' - and apply with:
patch -Np1 < patchfile
Satish
On Wed, 4 Jan 2012, Barry Smith wrote:
>
> Hannes,
>
> Thanks for reporting the problem. It is a bug in our handling of PETSC_VIEWER_ASCII_MATLAB in parallel. I have fixed the repository copy in both petsc-3.2 and petsc-dev It will be fixed in the next patch release of 3.2 or Satish can send you the patch file; just ask for it at petsc-maint at mcs.anl.gov
>
> Barry
>
>
> > Hannes
>
> On Jan 4, 2012, at 11:59 AM, Johannes.Huber at unibas.ch wrote:
>
> > Hi all,
> > thanks a lot for you help.
> > I tracked the problem down to a minimal program and found, that it looks like I'm doing something wrong when using the matlab format. Here is the minimal program:
> > #include <petscvec.h>
> > static char help[] = "Matlab output.\n\n";
> > int main (int argc, char** argv)
> > {
> > PetscInitialize(&argc,&argv,(char*)0,help);
> > Vec b;
> > PetscInt ierr;
> > int r;
> > MPI_Comm_rank(PETSC_COMM_WORLD,&r);
> > ierr=VecCreate(PETSC_COMM_WORLD,&b); CHKERRQ(ierr);
> > ierr=VecSetSizes(b,10,PETSC_DECIDE); CHKERRQ(ierr);
> > ierr=VecSetFromOptions(b); CHKERRQ(ierr);
> > ierr=VecZeroEntries(b); CHKERRQ(ierr);
> > ierr=VecAssemblyBegin(b); CHKERRQ(ierr);
> > ierr=VecAssemblyEnd(b); CHKERRQ(ierr);
> >
> > PetscViewer File;
> > ierr=PetscViewerASCIIOpen(PETSC_COMM_WORLD,"Test.m",&File); CHKERRQ(ierr);
> > ierr=PetscViewerSetFormat(File,PETSC_VIEWER_ASCII_MATLAB); CHKERRQ(ierr); // crash
> > //ierr=PetscViewerSetFormat(File,PETSC_VIEWER_ASCII_INDEX); CHKERRQ(ierr); //works
> > //ierr=PetscViewerSetFormat(File,PETSC_VIEWER_ASCII_DENSE); CHKERRQ(ierr); //works
> > ierr=VecView(b,File); CHKERRQ(ierr);
> > ierr=PetscViewerDestroy(&File); CHKERRQ(ierr);
> >
> > printf("[%d]: %d\n",r,__LINE__);
> > VecAssemblyBegin(b);
> > printf("[%d]: %d\n",r,__LINE__);
> > VecAssemblyEnd(b);
> > ierr=VecDestroy(&b); CHKERRQ(ierr);
> > MPI_Barrier(PETSC_COMM_WORLD);
> > PetscFinalize();
> > return 0;
> > }
> > Does anybody know, what's wrong with this?
> >
> > Thanks a lot,
> > Hannes
> >
> > Quoting Barry Smith <bsmith at mcs.anl.gov>:
> >
> >>
> >> On Jan 3, 2012, at 6:59 AM, Jed Brown wrote:
> >>
> >>> On Tue, Jan 3, 2012 at 06:41, <Johannes.Huber at unibas.ch> wrote:
> >>> The first assembly works well, and I would agree, if the first assmebly crashed. However, it's the second assembly call and in between those two calls, all I'm doing is viewing the vector.
> >>>
> >>> Use a debugger to set a breakpoint in VecSetValues(); maybe starting after your first assemble. Also try Valgrind, it could be memory corruption.
> >>
> >> http://www.mcs.anl.gov/petsc/documentation/faq.html#valgrind
> >>
> >>
> >>>
> >>> You can also break in the first VecAssemblyBegin and do
> >>>
> >>> (gdb) p &vec->stash.insertmode
> >>> $1 = (InsertMode *) 0xADDRESS
> >>> (gdb) wat *$1
> >>> Hardware watchpoint 3: *$1
> >>> (gdb) c
> >>> ... breaks when insertmode is modified for any reason.
> >>
> >>
> >
> >
> >
> > ----------------------------------------------------------------
> > This message was sent using IMP, the Internet Messaging Program.
> >
> >
>
>
More information about the petsc-users
mailing list