Hello,<div>I am trying to parallelize the ASM preconditioner while solving a linear system. For more detail, I have printed relevant parts of code in the following:</div><div><br></div><div><br></div><div><div><i>static char help[]=&quot;Reading in a matrix\n&quot;;</i></div>
<div><i><br></i></div><div><i> #include&lt;stdio.h&gt;</i></div><div><i><br></i></div><div><i> #include&lt;math.h&gt;</i></div><div><i><br></i></div><div><i> #include&lt;stdlib.h&gt;</i></div><div><i><br></i></div><div><i> #include &quot;petscvec.h&quot; /* This enables us to use vectors. */</i></div>
<div><i><br></i></div><div><i> #include &quot;petscmat.h&quot; /* This enables us to use Matrices. It includes the</i></div><div><i> petscvec header file*/</i></div><div><i><br></i></div><div><i> #include &quot;petscksp.h&quot; /* Now we can solve linear systems. Solvers used are</i></div>
<div><i> KSP. */</i></div><div><i><br></i></div><div><i> extern PetscErrorCode MyKSPMonitor(KSP,PetscInt,PetscReal,void*);</i></div><div><i><br></i></div><div><i> int main(int argc, char **argv)</i></div><div><i><br></i></div>
<div><i> {</i></div><div><i><br></i></div><div><i> /* Declaration of Matrix A and some vectors x*/</i></div><div><i><br></i></div><div><i> Vec  w, ypcq, mean_tmp, x, PzyTvec;</i></div><div><i> Mat Ym, Y, Mean, Ypcq, YpcqT, Pzz, InnProd, Para, Pzy, PzyT,PzzT,K, KT, PK, PzzTMP, Pmat, XYmat, KY;</i></div>
<div><i><br></i></div><div><i> FILE *fp, *fp1, *fp2, *fp3;</i></div><div><i><br></i></div><div><i> PetscInt index,i,j,k, ns=16, nw=100, tindex_f=120, col,tind, mz, nz, its;</i></div><div><i>/* </i></div><div><i>printf(&quot;Enter number of sensors (ns):\n&quot;);</i></div>
<div><i>scanf(&quot;%d&quot;,&amp;ns);</i></div><div><i><br></i></div><div><i>printf(&quot;Enter number of time steps (tindex_f):\n&quot;);</i></div><div><i>scanf(&quot;%d&quot;,&amp;tindex_f);</i></div><div><i>*/</i></div>
<div><i> PetscMPIInt<span class="Apple-tab-span" style="white-space:pre">        </span>size;</i></div><div><i><br></i></div><div><i> PC pc;</i></div><div><i> KSP ksp;</i></div><div><i> PetscReal<span class="Apple-tab-span" style="white-space:pre">        </span>norm, tol=1.e-14;</i></div>
<div><i> PetscBool<span class="Apple-tab-span" style="white-space:pre">        </span>nonzeroguess = PETSC_FALSE;</i></div><div><i> PetscViewer<span class="Apple-tab-span" style="white-space:pre">        </span>mviewer;</i></div><div><i><br>
</i></div><div><i><br></i></div><div><i> PetscScalar scalar,rhsy[ns*tindex_f*nw],rhsym[ns*tindex_f], rhsw[nw], Ymat[tindex_f*ns][nw], tmp, rhsp[2*nw], xvec[ns*tindex_f], pmat[4], xymat[2], rnorm;</i></div><div><i><br></i></div>
<div><i> PetscErrorCode ierr;</i></div><div><i><br></i></div><div><i> /* This part is needed for the help flag supplied at run-time*/</i></div><div><i><br></i></div><div><i> ierr = PetscInitialize(&amp;argc,&amp;argv,(char*)0,help);CHKERRQ(ierr);</i></div>
<div><i> </i></div><div><i> ierr = MPI_Comm_size(PETSC_COMM_WORLD, &amp;size);CHKERRQ(ierr);</i></div><div><i> //if (size != 1) SETERRQ(PETSC_COMM_WORLD,1,&quot;This is a uniprocessor example&quot;);</i></div><div><i>PetscPrintf(PETSC_COMM_WORLD,&quot;size is: %D\n&quot;,size);</i></div>
<div><i>int nstindex_f=ns*tindex_f;</i></div><div><i>ierr = PetscOptionsGetInt(PETSC_NULL,&quot;-n&quot;,&amp;nstindex_f,PETSC_NULL);CHKERRQ(ierr);</i></div><div><i><br></i></div><div><i>.</i></div><div><i>.</i></div><div>
<i>.</i></div><div><i><br></i></div><div><i><br></i></div><div><i>//<span class="Apple-tab-span" style="white-space:pre">        </span>Solution for K:</i></div><div><i>//<span class="Apple-tab-span" style="white-space:pre">        </span>--------------</i></div>
<div><i><br></i></div><div><i><span class="Apple-tab-span" style="white-space:pre">        </span>   ierr = MPI_Comm_size(PETSC_COMM_WORLD, &amp;size);CHKERRQ(ierr);</i></div><div><i><span class="Apple-tab-span" style="white-space:pre">        </span>   ierr = PetscOptionsGetInt(PETSC_NULL,&quot;-n&quot;,&amp;nstindex_f,PETSC_NULL);CHKERRQ(ierr);</i></div>
<div><i><span class="Apple-tab-span" style="white-space:pre">        </span>   ierr = PetscOptionsGetBool(PETSC_NULL,&quot;-nonzero_guess&quot;,&amp;nonzeroguess,PETSC_NULL); CHKERRQ(ierr);</i></div><div><i><br></i></div><div><i><br>
</i></div><div><i>//<span class="Apple-tab-span" style="white-space:pre">        </span>KSPMonitorSet(ksp,MyKSPMonitor,PETSC_NULL,0);</i></div><div><i><br></i></div><div><i><br></i></div><div><i><span class="Apple-tab-span" style="white-space:pre">        </span>   ierr = VecCreate(PETSC_COMM_WORLD,&amp;x);CHKERRQ(ierr);</i></div>
<div><i><span class="Apple-tab-span" style="white-space:pre">        </span>   ierr = PetscObjectSetName((PetscObject) x, &quot;Solution&quot;);CHKERRQ(ierr);</i></div><div><i><span class="Apple-tab-span" style="white-space:pre">        </span>   ierr = VecSetSizes(x,PETSC_DECIDE,ns*tindex_f);CHKERRQ(ierr);</i></div>
<div><i><span class="Apple-tab-span" style="white-space:pre">        </span>   ierr = VecSetFromOptions(x);CHKERRQ(ierr);</i></div><div><i><span class="Apple-tab-span" style="white-space:pre">        </span>   ierr = KSPCreate(PETSC_COMM_WORLD,&amp;ksp);CHKERRQ(ierr);</i></div>
<div><i><span class="Apple-tab-span" style="white-space:pre">        </span>   </i></div><div><i><br></i></div><div><i>//<span class="Apple-tab-span" style="white-space:pre">                </span>ierr = KSPMonitorSet(ksp,PetscInt n,PetscReal rnorm, void *);<span class="Apple-tab-span" style="white-space:pre">        </span></i></div>
<div><i>//<span class="Apple-tab-span" style="white-space:pre">                </span>ierr = monitor(ksp,Int it,PetscReal rnorm,);</i></div><div><i><span class="Apple-tab-span" style="white-space:pre">        </span>   </i></div><div><i><br></i></div>
<div><i><span class="Apple-tab-span" style="white-space:pre">        </span>   ierr = MatTranspose(Pzz,MAT_INITIAL_MATRIX,&amp;PzzT);</i></div><div><i><span class="Apple-tab-span" style="white-space:pre">        </span>   MatAssemblyBegin(PzzT,MAT_FINAL_ASSEMBLY);</i></div>
<div><i><span class="Apple-tab-span" style="white-space:pre">        </span>   MatAssemblyEnd(PzzT,MAT_FINAL_ASSEMBLY);</i></div><div><i><span class="Apple-tab-span" style="white-space:pre">        </span>   ierr = KSPSetOperators(ksp,PzzT,PzzT,DIFFERENT_NONZERO_PATTERN);CHKERRQ(ierr);</i></div>
<div><i><br></i></div><div><i><span class="Apple-tab-span" style="white-space:pre">        </span>   ierr = KSPGetPC(ksp,&amp;pc);CHKERRQ(ierr);</i></div><div><i><span class="Apple-tab-span" style="white-space:pre">        </span>   ierr = PCSetType(pc,PCASM);CHKERRQ(ierr);</i></div>
<div><i><span class="Apple-tab-span" style="white-space:pre">        </span>   ierr = KSPSetTolerances(ksp,1e-6,PETSC_DEFAULT,PETSC_DEFAULT,1e+9);CHKERRQ(ierr);</i></div><div><i><span class="Apple-tab-span" style="white-space:pre">        </span>   ierr = KSPSetFromOptions(ksp);CHKERRQ(ierr);</i></div>
<div><i><span class="Apple-tab-span" style="white-space:pre">        </span>   if (nonzeroguess)</i></div><div><i><span class="Apple-tab-span" style="white-space:pre">        </span>   {</i></div><div><i>        <span class="Apple-tab-span" style="white-space:pre">        </span>PetscScalar p = 0.5;</i></div>
<div><i><span class="Apple-tab-span" style="white-space:pre">        </span>        ierr = VecSet(x,p);CHKERRQ(ierr);</i></div><div><i><span class="Apple-tab-span" style="white-space:pre">        </span>        ierr = KSPSetInitialGuessNonzero(ksp,PETSC_TRUE);CHKERRQ(ierr);</i></div>
<div><i><span class="Apple-tab-span" style="white-space:pre">        </span>   }</i></div><div><i><span class="Apple-tab-span" style="white-space:pre">        </span>   ierr = MatTranspose(Pzy,MAT_INITIAL_MATRIX,&amp;PzyT);</i></div><div>
<i><span class="Apple-tab-span" style="white-space:pre">        </span>   MatAssemblyBegin(PzyT,MAT_FINAL_ASSEMBLY);</i></div><div><i><span class="Apple-tab-span" style="white-space:pre">        </span>   MatAssemblyEnd(PzyT,MAT_FINAL_ASSEMBLY);</i></div>
<div><i><span class="Apple-tab-span" style="white-space:pre">        </span>   ierr = MatCreate(PETSC_COMM_WORLD,&amp;KT);CHKERRQ(ierr);</i></div><div><i><span class="Apple-tab-span" style="white-space:pre">        </span>   ierr = MatSetSizes(KT,PETSC_DECIDE,PETSC_DECIDE,ns*tindex_f,2);CHKERRQ(ierr);</i></div>
<div><i><span class="Apple-tab-span" style="white-space:pre">        </span>   ierr = MatSetFromOptions(KT);CHKERRQ(ierr);</i></div><div><i><span class="Apple-tab-span" style="white-space:pre">        </span>   int ctr=0;</i></div><div>
<i><span class="Apple-tab-span" style="white-space:pre">        </span>   for (ctr=0; ctr&lt;2; ctr++)</i></div><div><i><span class="Apple-tab-span" style="white-space:pre">        </span>   {</i></div><div><i><span class="Apple-tab-span" style="white-space:pre">                </span>   ierr = VecCreate(PETSC_COMM_WORLD,&amp;PzyTvec);</i></div>
<div><i><span class="Apple-tab-span" style="white-space:pre">                </span>   ierr = VecSetSizes(PzyTvec,PETSC_DECIDE,ns*tindex_f);</i></div><div><i><span class="Apple-tab-span" style="white-space:pre">                </span>   ierr = VecSetFromOptions(PzyTvec);</i></div>
<div><i><span class="Apple-tab-span" style="white-space:pre">                </span>   ierr = MatGetColumnVector(PzyT,PzyTvec,ctr);</i></div><div><i><br></i></div><div><i><span class="Apple-tab-span" style="white-space:pre">                </span>   ierr = KSPSolve(ksp,PzyTvec,x);CHKERRQ(ierr);</i></div>
<div><i><span class="Apple-tab-span" style="white-space:pre">                </span>   ierr = KSPGetIterationNumber(ksp,&amp;its);CHKERRQ(ierr);</i></div><div><i>   <span class="Apple-tab-span" style="white-space:pre">                </span>   ierr = KSPGetResidualNorm(ksp,&amp; norm);<span class="Apple-tab-span" style="white-space:pre">                </span>   </i></div>
<div><i><span class="Apple-tab-span" style="white-space:pre">                </span>   printf(&quot;residual norm is=%e\n&quot;,norm);</i></div><div><i>  <span class="Apple-tab-span" style="white-space:pre">                </span>   printf(&quot;iteration number is=%d\n&quot;,its);</i></div>
<div><i><span class="Apple-tab-span" style="white-space:pre">                </span>   ierr = KSPView(ksp,PETSC_VIEWER_STDOUT_WORLD);CHKERRQ(ierr);</i></div><div><i><span class="Apple-tab-span" style="white-space:pre">                </span>   </i></div>
<div><i>//<span class="Apple-tab-span" style="white-space:pre">                </span>printf(&quot;%d\n&quot;, ctr);</i></div><div><i><span class="Apple-tab-span" style="white-space:pre">                </span>   for (i=0; i&lt;ns*tindex_f; i++)</i></div>
<div><i><span class="Apple-tab-span" style="white-space:pre">                </span>   {</i></div><div><i><span class="Apple-tab-span" style="white-space:pre">                        </span>   ierr = VecGetValues(x,1,&amp;i,&amp;xvec[i]);</i></div><div><i><span class="Apple-tab-span" style="white-space:pre">                        </span>   ierr = MatSetValues(KT,1,&amp;i,1,&amp;ctr,&amp;xvec[i],INSERT_VALUES);</i></div>
<div><i><span class="Apple-tab-span" style="white-space:pre">                </span>   }</i></div><div><i><span class="Apple-tab-span" style="white-space:pre">        </span>   }</i></div><div><i><span class="Apple-tab-span" style="white-space:pre">        </span>   MatAssemblyBegin(KT,MAT_FINAL_ASSEMBLY);</i></div>
<div><i><span class="Apple-tab-span" style="white-space:pre">        </span>   MatAssemblyEnd(KT,MAT_FINAL_ASSEMBLY);</i></div><div><i><span class="Apple-tab-span" style="white-space:pre">        </span>   MatTranspose(KT,MAT_INITIAL_MATRIX,&amp;K);</i></div>
<div><i><span class="Apple-tab-span" style="white-space:pre">        </span>   MatAssemblyBegin(K,MAT_FINAL_ASSEMBLY);</i></div><div><i><span class="Apple-tab-span" style="white-space:pre">        </span>   MatAssemblyEnd(K,MAT_FINAL_ASSEMBLY);</i></div>
<div><i><br></i></div><div><i><span class="Apple-tab-span" style="white-space:pre">        </span>   MatPtAP(Pzz,KT,MAT_INITIAL_MATRIX,1.0,&amp;PK);</i></div><div><i>//MatCopy(Pzz,PzzTMP,SAME_NONZERO_PATTERN);</i></div><div><i>           ierr = MatAXPY(Pmat,-1,PK,DIFFERENT_NONZERO_PATTERN);</i></div>
<div><i><span class="Apple-tab-span" style="white-space:pre">        </span>   MatView(Pmat,PETSC_VIEWER_STDOUT_WORLD);</i></div><div><i><br></i></div><div><i>           ierr = MatAXPY(Ym,-1,Mean,DIFFERENT_NONZERO_PATTERN);</i></div>
<div><i><span class="Apple-tab-span" style="white-space:pre">        </span>   MatAssemblyBegin(Ym,MAT_FINAL_ASSEMBLY);</i></div><div><i>           MatAssemblyEnd(Ym,MAT_FINAL_ASSEMBLY);</i></div><div><i><br></i></div><div><i><span class="Apple-tab-span" style="white-space:pre">        </span>   ierr = MatMatMult(K,Ym,MAT_INITIAL_MATRIX,PETSC_DEFAULT,&amp;KY);</i></div>
<div><i><span class="Apple-tab-span" style="white-space:pre">        </span>   ierr = MatAssemblyBegin(KY,MAT_FINAL_ASSEMBLY);</i></div><div><i><span class="Apple-tab-span" style="white-space:pre">        </span>   ierr = MatAssemblyEnd(KY,MAT_FINAL_ASSEMBLY);</i></div>
<div><i>   <span class="Apple-tab-span" style="white-space:pre">        </span>   ierr = MatAXPY(XYmat,1,KY,DIFFERENT_NONZERO_PATTERN);</i></div><div><i><span class="Apple-tab-span" style="white-space:pre">        </span>   MatView(XYmat,PETSC_VIEWER_STDOUT_WORLD);</i></div>
<div><i><br></i></div><div><i>ierr = MatDestroy(&amp;Mean);</i></div><div><i><br></i></div><div><i>ierr=PetscFinalize();CHKERRQ(ierr);</i></div><div><i><br></i></div><div><i> return 0;</i></div><div><i><br></i></div><div>
<i> }</i></div></div><div><i><br></i></div><div><br></div><div><br></div><div>I am using the following commands to compile and run the code:</div><div><br></div><div><div><i>mpicc pcasm.c -o pcasm -l petsc</i></div></div>
<div><i>mpiexec -np 2 ./pcasm</i></div><div><br></div><div>But when I run the code I get the following error message which I don&#39;t know what it means.</div><div><br></div><div><br></div><div><div>[0]PETSC ERROR: --------------------- Error Message ------------------------------------</div>
<div>[0]PETSC ERROR: Floating point exception!</div><div>[0]PETSC ERROR: Infinite or not-a-number generated in norm!</div><div>[0]PETSC ERROR: ------------------------------------------------------------------------</div>
<div>[0]PETSC ERROR: Petsc Release Version 3.2.0, Patch 3, Fri Sep 30 10:28:33 CDT 2011</div><div>[0]PETSC ERROR: See docs/changes/index.html for recent updates.</div><div>[0]PETSC ERROR: See docs/faq.html for hints about trouble shooting.</div>
<div>[0]PETSC ERROR: See docs/index.html for manual pages.</div><div>[0]PETSC ERROR: ------------------------------------------------------------------------</div><div>[0]PETSC ERROR: ./pcasm on a linux-imp named <a href="http://k07n14.ccr.buffalo.edu">k07n14.ccr.buffalo.edu</a> by rm93 Wed Dec 21 15:05:33 2011</div>
<div>[0]PETSC ERROR: Libraries linked from /util/petsc/petsc-3.2-p3/linux-impi-mkl/lib</div><div>[0]PETSC ERROR: Configure run at Fri Oct 21 08:36:23 2011</div><div>[0]PETSC ERROR: Configure options --CC=/util/intel/impi/<a href="http://4.0.3.008/intel64/bin/mpiicc">4.0.3.008/intel64/bin/mpiicc</a> --FC=/util/intel/impi/<a href="http://4.0.3.008/intel64/bin/mpiifort">4.0.3.008/intel64/bin/mpiifort</a> --CXX=/util/intel/impi/<a href="http://4.0.3.008/intel64/bin/mpiicpc">4.0.3.008/intel64/bin/mpiicpc</a> --with-blas-lapack-dir=/util/intel/composer_xe_2011_sp1/mkl/lib/intel64 --download-hypre=1 --with-debugging=0 -PETSC_ARCH=linux-impi-mkl --with-shared-libraries=1</div>
<div>[0]PETSC ERROR: ------------------------------------------------------------------------</div><div>[0]PETSC ERROR: VecNorm() line 167 in src/vec/vec/interface/rvector.c</div><div>[0]PETSC ERROR: VecNormalize() line 261 in src/vec/vec/interface/rvector.c</div>
<div>[0]PETSC ERROR: GMREScycle() line 128 in src/ksp/ksp/impls/gmres/gmres.c</div><div>[0]PETSC ERROR: KSPSolve_GMRES() line 231 in src/ksp/ksp/impls/gmres/gmres.c</div><div>[0]PETSC ERROR: KSPSolve() line 423 in src/ksp/ksp/interface/itfunc.c</div>
<div>[0]PETSC ERROR: main() line 487 in &quot;unknowndirectory/&quot;pcasm.c</div><div>application called MPI_Abort(MPI_COMM_WORLD, 72) - process 0</div><div>rank 0 in job 2  k07n14.ccr.buffalo.edu_51735   caused collective abort of all ranks</div>
<div>  exit status of rank 0: return code 72</div></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div>Could anyone help me on this problem? Thanks in advance for any help.</div>
<div><div><br></div><div><br></div><div><br></div></div>