thank you very much, Aldo.<br><br><div><span class="gmail_quote">On 1/23/08, <b class="gmail_sendername">Aldo Bonfiglioli</b> &lt;<a href="mailto:aldo.bonfiglioli@unibas.it">aldo.bonfiglioli@unibas.it</a>&gt; wrote:</span>
<blockquote class="gmail_quote" style="margin-top: 0; margin-right: 0; margin-bottom: 0; margin-left: 0; margin-left: 0.80ex; border-left-color: #cccccc; border-left-width: 1px; border-left-style: solid; padding-left: 1ex">
&gt; thank you for your reply. Do you have any method to generate an ascii<br>&gt; file of the huge sparse matrix? thanks<br><br><br>I have been using HYPRE calls (from PETSc) to accomplish this.<br>Each processor will write his own&nbsp;&nbsp;portion of the global matrix
<br>in his own file.<br>The enclosed file should explain how.<br><br>Regards,<br>Aldo<br><br>--<br>Dr. Aldo Bonfiglioli<br><a href="http://Dip.to">Dip.to</a> di Ingegneria e Fisica dell&#39;Ambiente (DIFA)<br>Universita&#39; della Basilicata
<br>V.le dell&#39;Ateneo lucano, 10 85100 Potenza ITALY<br>tel:+39.0971.205203 fax:+39.0971.205160<br><br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SUBROUTINE PrintMat(A,RHS,X,cols,values,maxcols,ITER,JOB)<br>C<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IMPLICIT NONE<br>C<br>CC#define HYPER_PARCSR 5555
<br>C<br>C<br>C<br>C<br>C&nbsp;&nbsp;&nbsp;&nbsp; $Id: printmat.F,v 1.3 2006/11/10 08:31:31 abonfi Exp abonfi $<br>C<br>#include &quot;include/finclude/petsc.h&quot;<br>#include &quot;include/finclude/petscvec.h&quot;<br>#include &quot;include/finclude/petscmat.h&quot;
<br>#include &quot;include/finclude/petscksp.h&quot;<br>#include &quot;include/finclude/petscpc.h&quot;<br>#include &quot;include/finclude/petscis.h&quot;<br>#include &quot;include/finclude/petscviewer.h&quot;<br>C#include &quot;
HYPRE.h&quot;<br>C#include &quot;IJ_mv.h&quot;<br><br>C<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Mat A<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Vec RHS,X<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;INTEGER ITER,JOB<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;INTEGER rstart,rend,ncols,i,k<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;INTEGER HYPRE_PARCSR<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parameter(HYPRE_PARCSR=5555)
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;INTEGER maxcols<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;integer cols(maxcols)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;double precision values(maxcols)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;double&nbsp;&nbsp;precision info(MAT_INFO_SIZE)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;INTEGER nz_a<br>C<br>C<br>C<br>C<br>C&nbsp;&nbsp;&nbsp;&nbsp; .. Parameters ..<br>C&nbsp;&nbsp;&nbsp;&nbsp; ..
<br>C&nbsp;&nbsp;&nbsp;&nbsp; .. Scalar Arguments ..<br>C&nbsp;&nbsp;&nbsp;&nbsp; ..<br>C&nbsp;&nbsp;&nbsp;&nbsp; .. Arrays in Common ..<br>C&nbsp;&nbsp;&nbsp;&nbsp; ..<br>C&nbsp;&nbsp;&nbsp;&nbsp; .. Local Scalars ..<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;INTEGER IFAIL,MY_PE<br>C&nbsp;&nbsp;&nbsp;&nbsp; ..<br>C&nbsp;&nbsp;&nbsp;&nbsp; .. Local Arrays ..<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PetscViewer MyOpenMindedViewer
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;INTEGER*8 ij<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CHARACTER* 6 matfile,rhsfile,solfile<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PetscScalar x_array(1)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PetscOffset i_x<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PetscInt n<br>!&nbsp;&nbsp;&nbsp;&nbsp; PetscErrorCode IFAIL<br><br>C&nbsp;&nbsp;&nbsp;&nbsp; ..<br>C&nbsp;&nbsp;&nbsp;&nbsp; .. External Functions ..
<br>C&nbsp;&nbsp;&nbsp;&nbsp; ..<br>C&nbsp;&nbsp;&nbsp;&nbsp; .. External Subroutines ..<br>C&nbsp;&nbsp;&nbsp;&nbsp; ..<br>C<br>C&nbsp;&nbsp;&nbsp;&nbsp; .. Intrinsic Functions ..<br>C&nbsp;&nbsp;&nbsp;&nbsp; ..<br>C&nbsp;&nbsp;&nbsp;&nbsp; .. Common blocks ..<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;COMMON /MPICOM/MY_PE<br>C&nbsp;&nbsp;&nbsp;&nbsp; ..<br>C&nbsp;&nbsp;&nbsp;&nbsp; .. Equivalences ..<br>C&nbsp;&nbsp;&nbsp;&nbsp; ..
<br>C&nbsp;&nbsp;&nbsp;&nbsp; .. Data statements ..<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DATA matfile,rhsfile,solfile/&quot;matXXX&quot;,&quot;rhsXXX&quot;,&quot;solXXX&quot;/<br>C&nbsp;&nbsp;&nbsp;&nbsp; ..<br>C&nbsp;&nbsp;&nbsp;&nbsp; Executable statements<br>C<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IF(JOB.EQ.0)THEN<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; call MatGetInfo(A,MAT_LOCAL,info,IFAIL)
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; nz_a = info(MAT_INFO_NZ_ALLOCATED)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; maxcols = info(MAT_INFO_COLUMNS_LOCAL)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CALL VecGetLocalSize(rhs,n,IFAIL)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; maxcols = max(maxcols,n)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; write(6,*)&#39;PE # &#39;,MY_PE,nz_a,maxcols,n
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RETURN<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ENDIF<br>C<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IF( ITER. NE. 3 )RETURN<br>C<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WRITE(matfile(4:6),FMT=&quot;(I3.3)&quot;)0<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WRITE(rhsfile(4:6),FMT=&quot;(I3.3)&quot;)0<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WRITE(solfile(4:6),FMT=&quot;(
I3.3)&quot;)0<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CALL MatGetOwnershipRange(A,rstart,rend,IFAIL)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CALL HYPRE_IJMatrixCreate(PETSC_COMM_WORLD,rstart,rend-1,rstart,<br>&nbsp;&nbsp;&nbsp;&nbsp; &amp;rend-1,ij,IFAIL)<br>!&nbsp;&nbsp;&nbsp;&nbsp; write(6,*)&#39;HYPRE_IJMatrixCreate has returned ifail = &#39;,ifail
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CALL HYPRE_IJMatrixSetObjectType(ij,HYPRE_PARCSR,IFAIL)<br>!&nbsp;&nbsp;&nbsp;&nbsp; write(6,*)&#39;HYPRE_IJMatrixSetObjectType has returned ifail = &#39;,<br>!&nbsp;&nbsp;&nbsp;&nbsp;&amp;ifail<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CALL&nbsp;&nbsp;HYPRE_IJMatrixInitialize(ij,IFAIL)<br>!&nbsp;&nbsp;&nbsp;&nbsp; write(6,*)&#39;HYPRE_IJMatrixInitialize has returned ifail = &#39;,
<br>!&nbsp;&nbsp;&nbsp;&nbsp;&amp;ifail<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;do i= rstart, rend-1<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CALL MatGetRow(A,i,ncols,cols,values,IFAIL)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(ncols.GT.maxcols)STOP &#39;Must increase maxcols&#39;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CALL HYPRE_IJMatrixSetValues(ij,1,ncols,i,cols,values,IFAIL)
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CALL MatRestoreRow(A,i,ncols,cols,values,IFAIL)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;enddo<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CALL HYPRE_IJMatrixAssemble(ij,IFAIL)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CALL HYPRE_IJMatrixPrint(ij,matfile,IFAIL)<br>!&nbsp;&nbsp;&nbsp;&nbsp; write(6,*)&#39;HYPRE_IJMatrixPrint has returned ifail = &#39;,
<br>!&nbsp;&nbsp;&nbsp;&nbsp;&amp;ifail<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CALL HYPRE_IJMatrixDestroy(ij,IFAIL)<br>!&nbsp;&nbsp;&nbsp;&nbsp; write(6,*)&#39;HYPRE_IJMatrixDestroy has returned ifail = &#39;,<br>!&nbsp;&nbsp;&nbsp;&nbsp;&amp;ifail<br>C<br>C&nbsp;&nbsp;&nbsp;&nbsp; now dump rhs<br>C<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CALL VecGetOwnerShipRange(rhs,rstart,rend,IFAIL)
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CALL HYPRE_IJVectorCreate(PETSC_COMM_WORLD,rstart,rend-1,<br>&nbsp;&nbsp;&nbsp;&nbsp; &amp;ij,IFAIL)<br>!&nbsp;&nbsp;&nbsp;&nbsp; write(6,*)&#39;HYPRE_IJVectorCreate has returned ifail = &#39;,<br>!&nbsp;&nbsp;&nbsp;&nbsp;&amp;ifail<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CALL HYPRE_IJVectorSetObjectType(ij,HYPRE_PARCSR,IFAIL)
<br>!&nbsp;&nbsp;&nbsp;&nbsp; write(6,*)&#39;HYPRE_IJSetObjectType has returned ifail = &#39;,<br>!&nbsp;&nbsp;&nbsp;&nbsp;&amp;ifail<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CALL HYPRE_IJVectorInitialize(ij,IFAIL)<br>!&nbsp;&nbsp;&nbsp;&nbsp; write(6,*)&#39;HYPRE_IJVectorInitialize has returned ifail = &#39;,<br>
!&nbsp;&nbsp;&nbsp;&nbsp;&amp;ifail<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CALL VecGetLocalSize(rhs,n,IFAIL)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(n.GT.maxcols)STOP &#39;Must increase maxcols&#39;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CALL VecGetArray(rhs,x_array,i_x,IFAIL)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k = 0<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;do i = rstart,rend-1<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; k = k + 1
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cols(k) = i<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;enddo<br>!&nbsp;&nbsp;&nbsp;&nbsp; write(6,*)rend-rstart,n<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CALL HYPRE_IJVectorSetValues(ij,n,cols,x_array(i_x + 1),IFAIL)<br>!&nbsp;&nbsp;&nbsp;&nbsp; write(6,*)&#39;HYPRE_IJVectorSetValues has returned ifail = &#39;,<br>
!&nbsp;&nbsp;&nbsp;&nbsp;&amp;ifail<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CALL HYPRE_IJVectorAssemble(ij,IFAIL)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CALL VecRestoreArray(rhs,x_array,i_x,IFAIL)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CALL HYPRE_IJVectorPrint(ij,rhsfile,IFAIL)<br>!&nbsp;&nbsp;&nbsp;&nbsp; write(6,*)&#39;HYPRE_IJVectorPrint has returned ifail = &#39;,
<br>!&nbsp;&nbsp;&nbsp;&nbsp;&amp;ifail<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CALL HYPRE_IJVectorDestroy(ij,IFAIL)<br>c<br>c&nbsp;&nbsp;&nbsp;&nbsp; dump solution<br>c<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CALL VecGetOwnerShipRange(x,rstart,rend,IFAIL)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CALL HYPRE_IJVectorCreate(PETSC_COMM_WORLD,rstart,rend-1,
<br>&nbsp;&nbsp;&nbsp;&nbsp; &amp;ij,IFAIL)<br>!&nbsp;&nbsp;&nbsp;&nbsp; write(6,*)&#39;HYPRE_IJVectorCreate has returned ifail = &#39;,<br>!&nbsp;&nbsp;&nbsp;&nbsp;&amp;ifail<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CALL HYPRE_IJVectorSetObjectType(ij,HYPRE_PARCSR,IFAIL)<br>!&nbsp;&nbsp;&nbsp;&nbsp; write(6,*)&#39;HYPRE_IJSetObjectType has returned ifail = &#39;,
<br>!&nbsp;&nbsp;&nbsp;&nbsp;&amp;ifail<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CALL HYPRE_IJVectorInitialize(ij,IFAIL)<br>!&nbsp;&nbsp;&nbsp;&nbsp; write(6,*)&#39;HYPRE_IJVectorInitialize has returned ifail = &#39;,<br>!&nbsp;&nbsp;&nbsp;&nbsp;&amp;ifail<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CALL VecGetLocalSize(x,n,IFAIL)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(n.GT.maxcols
)STOP &#39;Must increase maxcols&#39;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CALL VecGetArray(x,x_array,i_x,IFAIL)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k = 0<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;do i = rstart,rend-1<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; k = k + 1<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cols(k) = i<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;enddo<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CALL HYPRE_IJVectorSetValues(ij,n,cols,x_array(i_x + 1),IFAIL)
<br>!&nbsp;&nbsp;&nbsp;&nbsp; write(6,*)&#39;HYPRE_IJVectorSetValues has returned ifail = &#39;,<br>!&nbsp;&nbsp;&nbsp;&nbsp;&amp;ifail<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CALL VecRestoreArray(x,x_array,i_x,IFAIL)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CALL HYPRE_IJVectorAssemble(ij,IFAIL)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CALL HYPRE_IJVectorPrint(ij,solfile,IFAIL)
<br>!&nbsp;&nbsp;&nbsp;&nbsp; write(6,*)&#39;HYPRE_IJVectorPrint has returned ifail = &#39;,<br>!&nbsp;&nbsp;&nbsp;&nbsp;&amp;ifail<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CALL HYPRE_IJVectorDestroy(ij,IFAIL)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RETURN<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;END<br><br></blockquote></div><br>