a problem with error of "An error occurred in MPI_Comm_rank after MPI was finalized"

Yaakoub El Khamra yelkhamra at gmail.com
Sun Oct 11 22:06:48 CDT 2009


you need to set types for matrices. You also want to check the errors
from the petsc functions. The function is CHKERRQ you also might want
to do a CHKMEMQ.


Regards
Yaakoub El Khamra




On Sun, Oct 11, 2009 at 9:59 PM, Yin Feng <yfeng1 at tigers.lsu.edu> wrote:
> The completed code is:
>
> void PETSc(double mat[],double vec[],double sol[],long N,double tol) {
>
> Vec            x,b;
>
> Mat            A;
>
> KSP            ksp;
>
> PC             pc;
>
> PetscInt       i,j,col[N];
>
> PetscScalar    value[N];
>
> PetscScalar    val;
>
> PetscInitialize(PETSC_NULL,PETSC_NULL,PETSC_NULL,PETSC_NULL);
>
> VecCreate(PETSC_COMM_WORLD,&x);
>
> VecSetSizes(x,PETSC_DECIDE,N);
>
> VecSetFromOptions(x);
>
> VecDuplicate(x,&b);
>
> MatCreate(PETSC_COMM_WORLD,&A);
>
> MatSetSizes(A,PETSC_DECIDE,PETSC_DECIDE,N,N);
>
> MatSetFromOptions(A);
>
> for (i=0; i<N; i++) {
>
> for (j=0;j<N;j++) {
>
> value[j]=mat[i*N+j];
>
> col[j]=j;
>
> }
>
> MatSetValues(A,1,&i,N,col,value,INSERT_VALUES);
>
> }
>
> MatAssemblyBegin(A,MAT_FINAL_ASSEMBLY);
>
> MatAssemblyEnd(A,MAT_FINAL_ASSEMBLY);
>
>
>
> for (i=0; i<N; i++) {
>
> val=vec[i];
>
> VecSetValues(b,1,&i,&val,INSERT_VALUES);
>
> val=sol[i];
>
> VecSetValues(x,1,&i,&val,INSERT_VALUES);
>
> }
>
> VecAssemblyBegin(b);
>
> VecAssemblyEnd(b);
>
> KSPCreate(PETSC_COMM_WORLD,&ksp);
>
> KSPSetOperators(ksp,A,A,DIFFERENT_NONZERO_PATTERN);
>
> KSPGetPC(ksp,&pc);
>
>         KSPSetType(ksp, KSPGMRES);
>
>         PCSetType(pc,  PCBJACOBI);
>
>  KSPSetTolerances(ksp,tol,PETSC_DEFAULT,PETSC_DEFAULT,PETSC_DEFAULT);
>
>   KSPSetFromOptions(ksp);
>
>   KSPSolve(ksp,b,x);
>
>   for (i=0;i<N;i++) {
>
>       VecGetValues(x,1,&i,&sol[i]);
>
>   }
>
>
>
>   VecDestroy(x);
>
>   VecDestroy(b);
>
>   MatDestroy(A);
>
>   KSPDestroy(ksp);
>
>   PetscFinalize();
>
> }
>
> Once this function is call in a loop, it reports error.
> On Sun, Oct 11, 2009 at 9:38 PM, Yin Feng <yfeng1 at tigers.lsu.edu> wrote:
>>
>> I put PETSc solver in one function and use another function to call that.
>> This problem only appears when I put the function with PETSc solver in a
>> loop,
>> it works well at first step, and reports error "An error occurred in
>> MPI_Comm_rank after MPI was finalized"
>> at second time. The program is designed to support only one processor
>> like:
>>
>> Vec            x,b;
>>
>> Mat            A;
>>
>> KSP            ksp;
>>
>> PC             pc;
>>
>> PetscInt       i,j,col[N];
>>
>> PetscScalar    value[N];
>>
>> PetscScalar    val;
>>
>> PetscInitialize(PETSC_NULL,PETSC_NULL,PETSC_NULL,PETSC_NULL);
>>
>> VecCreate(PETSC_COMM_WORLD,&x);
>>
>> VecSetSizes(x,PETSC_DECIDE,N);
>>
>> VecSetFromOptions(x);
>>
>> VecDuplicate(x,&b);
>>
>> MatCreate(PETSC_COMM_WORLD,&A);
>>
>> MatSetSizes(A,PETSC_DECIDE,PETSC_DECIDE,N,N);
>>
>> MatSetFromOptions(A);
>>
>>         ........
>>
>>         ........
>>
>> KSPCreate(PETSC_COMM_WORLD,&ksp);
>>
>> KSPSetOperators(ksp,A,A,DIFFERENT_NONZERO_PATTERN);
>>
>> KSPGetPC(ksp,&pc);
>>
>>         ................
>>         ...............
>>
>>
>>  KSPSetTolerances(ksp,tol,PETSC_DEFAULT,PETSC_DEFAULT,PETSC_DEFAULT);
>>
>>         KSPSetFromOptions(ksp);
>>
>>         KSPSolve(ksp,b,x);
>>
>>         VecDestroy(x);
>>
>>         VecDestroy(b);
>>
>>         MatDestroy(A);
>>
>>         KSPDestroy(ksp);
>>
>>         PetscFinalize();
>>
>> Any one has ideal about this?
>>
>> The detailed error description is:
>>
>> An error occurred in MPI_Comm_rank
>>
>> *** after MPI was finalized
>>
>> *** MPI_ERRORS_ARE_FATAL (goodbye)
>>
>> Abort before MPI_INIT completed successfully; not able to guarantee that
>> all other processes were killed!
>>
>> Thank you so much in advance!
>
>


More information about the petsc-users mailing list