[petsc-users] Error in VecAssemeblyBegin after VecView
Johannes.Huber at unibas.ch
Johannes.Huber at unibas.ch
Wed Jan 4 11:59:22 CST 2012
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