I know the function called CHKERRQ, but what does CHKMEMQ mean?<br><br><div class="gmail_quote">On Sun, Oct 11, 2009 at 10:06 PM, Yaakoub El Khamra <span dir="ltr">&lt;<a href="mailto:yelkhamra@gmail.com">yelkhamra@gmail.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">you need to set types for matrices. You also want to check the errors<br>
from the petsc functions. The function is CHKERRQ you also might want<br>
to do a CHKMEMQ.<br>
<br>
<br>
Regards<br>
<font color="#888888">Yaakoub El Khamra<br>
</font><div><div></div><div class="h5"><br>
<br>
<br>
<br>
On Sun, Oct 11, 2009 at 9:59 PM, Yin Feng &lt;<a href="mailto:yfeng1@tigers.lsu.edu">yfeng1@tigers.lsu.edu</a>&gt; wrote:<br>
&gt; The completed code is:<br>
&gt;<br>
&gt; void PETSc(double mat[],double vec[],double sol[],long N,double tol) {<br>
&gt;<br>
&gt; Vec            x,b;<br>
&gt;<br>
&gt; Mat            A;<br>
&gt;<br>
&gt; KSP            ksp;<br>
&gt;<br>
&gt; PC             pc;<br>
&gt;<br>
&gt; PetscInt       i,j,col[N];<br>
&gt;<br>
&gt; PetscScalar    value[N];<br>
&gt;<br>
&gt; PetscScalar    val;<br>
&gt;<br>
&gt; PetscInitialize(PETSC_NULL,PETSC_NULL,PETSC_NULL,PETSC_NULL);<br>
&gt;<br>
&gt; VecCreate(PETSC_COMM_WORLD,&amp;x);<br>
&gt;<br>
&gt; VecSetSizes(x,PETSC_DECIDE,N);<br>
&gt;<br>
&gt; VecSetFromOptions(x);<br>
&gt;<br>
&gt; VecDuplicate(x,&amp;b);<br>
&gt;<br>
&gt; MatCreate(PETSC_COMM_WORLD,&amp;A);<br>
&gt;<br>
&gt; MatSetSizes(A,PETSC_DECIDE,PETSC_DECIDE,N,N);<br>
&gt;<br>
&gt; MatSetFromOptions(A);<br>
&gt;<br>
&gt; for (i=0; i&lt;N; i++) {<br>
&gt;<br>
&gt; for (j=0;j&lt;N;j++) {<br>
&gt;<br>
&gt; value[j]=mat[i*N+j];<br>
&gt;<br>
&gt; col[j]=j;<br>
&gt;<br>
&gt; }<br>
&gt;<br>
&gt; MatSetValues(A,1,&amp;i,N,col,value,INSERT_VALUES);<br>
&gt;<br>
&gt; }<br>
&gt;<br>
&gt; MatAssemblyBegin(A,MAT_FINAL_ASSEMBLY);<br>
&gt;<br>
&gt; MatAssemblyEnd(A,MAT_FINAL_ASSEMBLY);<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; for (i=0; i&lt;N; i++) {<br>
&gt;<br>
&gt; val=vec[i];<br>
&gt;<br>
&gt; VecSetValues(b,1,&amp;i,&amp;val,INSERT_VALUES);<br>
&gt;<br>
&gt; val=sol[i];<br>
&gt;<br>
&gt; VecSetValues(x,1,&amp;i,&amp;val,INSERT_VALUES);<br>
&gt;<br>
&gt; }<br>
&gt;<br>
&gt; VecAssemblyBegin(b);<br>
&gt;<br>
&gt; VecAssemblyEnd(b);<br>
&gt;<br>
&gt; KSPCreate(PETSC_COMM_WORLD,&amp;ksp);<br>
&gt;<br>
&gt; KSPSetOperators(ksp,A,A,DIFFERENT_NONZERO_PATTERN);<br>
&gt;<br>
&gt; KSPGetPC(ksp,&amp;pc);<br>
&gt;<br>
&gt;         KSPSetType(ksp, KSPGMRES);<br>
&gt;<br>
&gt;         PCSetType(pc,  PCBJACOBI);<br>
&gt;<br>
&gt;  KSPSetTolerances(ksp,tol,PETSC_DEFAULT,PETSC_DEFAULT,PETSC_DEFAULT);<br>
&gt;<br>
&gt;   KSPSetFromOptions(ksp);<br>
&gt;<br>
&gt;   KSPSolve(ksp,b,x);<br>
&gt;<br>
&gt;   for (i=0;i&lt;N;i++) {<br>
&gt;<br>
&gt;       VecGetValues(x,1,&amp;i,&amp;sol[i]);<br>
&gt;<br>
&gt;   }<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;   VecDestroy(x);<br>
&gt;<br>
&gt;   VecDestroy(b);<br>
&gt;<br>
&gt;   MatDestroy(A);<br>
&gt;<br>
&gt;   KSPDestroy(ksp);<br>
&gt;<br>
&gt;   PetscFinalize();<br>
&gt;<br>
&gt; }<br>
&gt;<br>
&gt; Once this function is call in a loop, it reports error.<br>
&gt; On Sun, Oct 11, 2009 at 9:38 PM, Yin Feng &lt;<a href="mailto:yfeng1@tigers.lsu.edu">yfeng1@tigers.lsu.edu</a>&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt; I put PETSc solver in one function and use another function to call that.<br>
&gt;&gt; This problem only appears when I put the function with PETSc solver in a<br>
&gt;&gt; loop,<br>
&gt;&gt; it works well at first step, and reports error &quot;An error occurred in<br>
&gt;&gt; MPI_Comm_rank after MPI was finalized&quot;<br>
&gt;&gt; at second time. The program is designed to support only one processor<br>
&gt;&gt; like:<br>
&gt;&gt;<br>
&gt;&gt; Vec            x,b;<br>
&gt;&gt;<br>
&gt;&gt; Mat            A;<br>
&gt;&gt;<br>
&gt;&gt; KSP            ksp;<br>
&gt;&gt;<br>
&gt;&gt; PC             pc;<br>
&gt;&gt;<br>
&gt;&gt; PetscInt       i,j,col[N];<br>
&gt;&gt;<br>
&gt;&gt; PetscScalar    value[N];<br>
&gt;&gt;<br>
&gt;&gt; PetscScalar    val;<br>
&gt;&gt;<br>
&gt;&gt; PetscInitialize(PETSC_NULL,PETSC_NULL,PETSC_NULL,PETSC_NULL);<br>
&gt;&gt;<br>
&gt;&gt; VecCreate(PETSC_COMM_WORLD,&amp;x);<br>
&gt;&gt;<br>
&gt;&gt; VecSetSizes(x,PETSC_DECIDE,N);<br>
&gt;&gt;<br>
&gt;&gt; VecSetFromOptions(x);<br>
&gt;&gt;<br>
&gt;&gt; VecDuplicate(x,&amp;b);<br>
&gt;&gt;<br>
&gt;&gt; MatCreate(PETSC_COMM_WORLD,&amp;A);<br>
&gt;&gt;<br>
&gt;&gt; MatSetSizes(A,PETSC_DECIDE,PETSC_DECIDE,N,N);<br>
&gt;&gt;<br>
&gt;&gt; MatSetFromOptions(A);<br>
&gt;&gt;<br>
&gt;&gt;         ........<br>
&gt;&gt;<br>
&gt;&gt;         ........<br>
&gt;&gt;<br>
&gt;&gt; KSPCreate(PETSC_COMM_WORLD,&amp;ksp);<br>
&gt;&gt;<br>
&gt;&gt; KSPSetOperators(ksp,A,A,DIFFERENT_NONZERO_PATTERN);<br>
&gt;&gt;<br>
&gt;&gt; KSPGetPC(ksp,&amp;pc);<br>
&gt;&gt;<br>
&gt;&gt;         ................<br>
&gt;&gt;         ...............<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;  KSPSetTolerances(ksp,tol,PETSC_DEFAULT,PETSC_DEFAULT,PETSC_DEFAULT);<br>
&gt;&gt;<br>
&gt;&gt;         KSPSetFromOptions(ksp);<br>
&gt;&gt;<br>
&gt;&gt;         KSPSolve(ksp,b,x);<br>
&gt;&gt;<br>
&gt;&gt;         VecDestroy(x);<br>
&gt;&gt;<br>
&gt;&gt;         VecDestroy(b);<br>
&gt;&gt;<br>
&gt;&gt;         MatDestroy(A);<br>
&gt;&gt;<br>
&gt;&gt;         KSPDestroy(ksp);<br>
&gt;&gt;<br>
&gt;&gt;         PetscFinalize();<br>
&gt;&gt;<br>
&gt;&gt; Any one has ideal about this?<br>
&gt;&gt;<br>
&gt;&gt; The detailed error description is:<br>
&gt;&gt;<br>
&gt;&gt; An error occurred in MPI_Comm_rank<br>
&gt;&gt;<br>
&gt;&gt; *** after MPI was finalized<br>
&gt;&gt;<br>
&gt;&gt; *** MPI_ERRORS_ARE_FATAL (goodbye)<br>
&gt;&gt;<br>
&gt;&gt; Abort before MPI_INIT completed successfully; not able to guarantee that<br>
&gt;&gt; all other processes were killed!<br>
&gt;&gt;<br>
&gt;&gt; Thank you so much in advance!<br>
&gt;<br>
&gt;<br>
</div></div></blockquote></div><br>