[petsc-users] Error in VecAssemeblyBegin after VecView
Johannes.Huber at unibas.ch
Johannes.Huber at unibas.ch
Thu Jan 5 02:39:13 CST 2012
Hi,
great, it works now.
When I take a look to the valgrind output, I see a few lines about
unaddressable bytes. Is this a reason to concern?
BTW: I also see memory leaks from getpwuid. Does anybody know about a
patch for this?
Many thanks,
Hannes
Quoting Satish Balay <balay at mcs.anl.gov>:
> 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.
>> >
>> >
>>
>>
>
>
----------------------------------------------------------------
This message was sent using IMP, the Internet Messaging Program.
More information about the petsc-users
mailing list