<div dir="ltr">Barry,<div>Thank you very much.</div><div>I will install and try the updated version.</div><div><br></div><div>Regards</div><div><br></div><div>Cong Li</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Aug 7, 2015 at 8:47 AM, Barry Smith <span dir="ltr"><<a href="mailto:bsmith@mcs.anl.gov" target="_blank">bsmith@mcs.anl.gov</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
  Cong Li,<br>
<br>
    I have updated PETSc to support the use of MatMatMult() per your needs. You will need to switch to the master development branch <a href="http://www.mcs.anl.gov/petsc/developers/index.html" rel="noreferrer" target="_blank">http://www.mcs.anl.gov/petsc/developers/index.html</a> of PETSc so install that first.<br>
<br>
   I found a number of bugs in your code that I needed to fix to get it to run successfully on 1 and 2 processes to correctly load the matrices and do everything else it was doing <br>with the MatMatMult() (note I do not think it generates the right numbers but at least it doesn't crash and does successfully do the MatMatMult(). I've attached the fixed files.<br>
<br>
  Barry<br>
<br>
<br>
> On Aug 6, 2015, at 12:27 AM, Cong Li <<a href="mailto:solvercorleone@gmail.com">solvercorleone@gmail.com</a>> wrote:<br>
><br>
> Barry,<br>
><br>
> Exactly. And thanks for the explaination.<br>
><br>
> Cong Li<br>
><br>
> On Thu, Aug 6, 2015 at 1:29 PM, Barry Smith <<a href="mailto:bsmith@mcs.anl.gov">bsmith@mcs.anl.gov</a>> wrote:<br>
><br>
> > On Aug 5, 2015, at 10:23 PM, Hong <<a href="mailto:hzhang@mcs.anl.gov">hzhang@mcs.anl.gov</a>> wrote:<br>
> ><br>
> > Cong,<br>
> ><br>
> > Can you write out math equations for mpk_monomial (),<br>
> > list input and output parameters.<br>
> ><br>
> > Note:<br>
> > 1. MatDuplicate() does not need to be followed by MatAssemblyBegin/End<br>
> > 2. MatMatMult(A,Km(stepIdx-1),MAT_REUSE_MATRIX,..) must be called after<br>
> >     MatMatMult(A,Km(stepIdx-1),MAT_INITIAL_MATRIX,..)<br>
><br>
>   Hong, we want to reuse the space in the Km(stepIdx-1) from which it was created which means that MAT_INITIAL_MATRIX cannot be used. Since the result is always dense it is not the difficult case when a symbolic computation needs to be done initially so, at least in theory, he should not have to use MAT_INITIAL_MATRIX the first time through.<br>
><br>
>   Barry<br>
><br>
> ><br>
> > Hong<br>
> ><br>
> ><br>
> > On Wed, Aug 5, 2015 at 8:56 PM, Cong Li <<a href="mailto:solvercorleone@gmail.com">solvercorleone@gmail.com</a>> wrote:<br>
> > The entire source code files are attached.<br>
> ><br>
> > Also I copy and paste the here in this email<br>
> ><br>
> > thanks<br>
> ><br>
> > program test<br>
> ><br>
> >   implicit none<br>
> ><br>
> > #include <finclude/petscsys.h><br>
> > #include <finclude/petscvec.h><br>
> > #include <finclude/petscmat.h><br>
> > #include <finclude/petscviewer.h><br>
> ><br>
> ><br>
> >   PetscViewer    :: view<br>
> >   ! sparse matrix<br>
> >   Mat            :: A<br>
> >   ! distributed dense matrix of size n x m<br>
> >   Mat            :: B, X, R, QDlt, AQDlt<br>
> >   ! distributed dense matrix of size n x (m x k)<br>
> >   Mat            :: Q, K, AQ_p, AQ<br>
> >   ! local dense matrix (every process keep the identical copies), (m x k) x (m x k)<br>
> >   Mat            :: AConjPara, QtAQ, QtAQ_p, Dlt<br>
> ><br>
> >   PetscInt       :: nDim, mDim, rhsNDim,rhsMDim,ierr, maxIter, iter, step_k,bsize<br>
> >   PetscInt       :: ownRowS,ownRowE<br>
> >   PetscScalar, allocatable :: XInit(:,:)<br>
> >   PetscInt       :: XInitI, XInitJ<br>
> >   PetscScalar    :: v=1.0<br>
> >   PetscBool      :: flg<br>
> >   PetscMPIInt    :: size, rank<br>
> ><br>
> >   character(128) ::  fin, rhsfin<br>
> ><br>
> ><br>
> >   call PetscInitialize(PETSC_NULL_CHARACTER,ierr)<br>
> >   call MPI_Comm_size(PETSC_COMM_WORLD,size,ierr)<br>
> >   call MPI_Comm_rank(PETSC_COMM_WORLD,rank,ierr)<br>
> ><br>
> >   ! read binary matrix file<br>
> >   call PetscOptionsGetString(PETSC_NULL_CHARACTER,'-f',fin,flg,ierr)<br>
> >   call PetscOptionsGetString(PETSC_NULL_CHARACTER,'-r',rhsfin,flg,ierr)<br>
> ><br>
> >   call PetscOptionsGetInt(PETSC_NULL_CHARACTER,'-i',maxIter,flg,ierr)<br>
> >   call PetscOptionsGetInt(PETSC_NULL_CHARACTER,'-k',step_k,flg,ierr)<br>
> >   call PetscOptionsGetInt(PETSC_NULL_CHARACTER,'-w',bsize,flg,ierr)<br>
> ><br>
> ><br>
> >   call PetscViewerBinaryOpen(PETSC_COMM_WORLD,fin,FILE_MODE_READ,view,ierr)<br>
> >   call MatCreate(PETSC_COMM_WORLD,A,ierr)<br>
> >   call MatSetType(A,MATAIJ,ierr)<br>
> >   call MatLoad(A,view,ierr)<br>
> >   call PetscViewerDestroy(view,ierr)<br>
> >   ! for the time being, assume mDim == nDim is true<br>
> >   call MatGetSize(A, nDim, mDim, ierr)<br>
> ><br>
> >   if (rank == 0) then<br>
> >     print*,'Mat Size = ', nDim, mDim<br>
> >   end if<br>
> ><br>
> >   call MatAssemblyBegin(A, MAT_FINAL_ASSEMBLY, ierr)<br>
> >   call MatAssemblyEnd(A, MAT_FINAL_ASSEMBLY, ierr)<br>
> >   call MatGetOwnershipRange(A,ownRowS,ownRowE, ierr)<br>
> ><br>
> >   ! create right-and-side matrix<br>
> >   ! for the time being, choose row-wise decomposition<br>
> >   ! for the time being, assume nDim%size = 0<br>
> >   call MatCreateDense(PETSC_COMM_WORLD, (ownRowE - ownRowS), &<br>
> >                       bsize, nDim, bsize,PETSC_NULL_SCALAR, B, ierr)<br>
> >   call PetscViewerBinaryOpen(PETSC_COMM_WORLD,rhsfin,FILE_MODE_READ,view, ierr)<br>
> >   call MatLoad(B,view,ierr)<br>
> >   call PetscViewerDestroy(view,ierr)<br>
> >   call MatGetSize(B, rhsMDim, rhsNDim, ierr)<br>
> >   if (rank == 0) then<br>
> >     print*,'MRHS Size actually are:', rhsMDim, rhsNDim<br>
> >     print*,'MRHS Size should be:', nDim, bsize<br>
> >   end if<br>
> >   call MatAssemblyBegin(B, MAT_FINAL_ASSEMBLY, ierr)<br>
> >   call MatAssemblyEnd(B, MAT_FINAL_ASSEMBLY, ierr)<br>
> ><br>
> >   ! inintial value guses X<br>
> >   allocate(XInit(nDim,bsize))<br>
> >   do XInitI=1, nDim<br>
> >     do XInitJ=1, bsize<br>
> >       XInit(XInitI,XInitJ) = 1.0<br>
> >     end do<br>
> >   end do<br>
> ><br>
> >   call MatCreateDense(PETSC_COMM_WORLD, (ownRowE - ownRowS), &<br>
> >                       bsize, nDim, bsize,XInit, X, ierr)<br>
> ><br>
> >   call MatAssemblyBegin(X, MAT_FINAL_ASSEMBLY, ierr)<br>
> >   call MatAssemblyEnd  (X, MAT_FINAL_ASSEMBLY, ierr)<br>
> ><br>
> ><br>
> >   !  B, X, R, QDlt, AQDlt<br>
> >   call MatDuplicate(B, MAT_DO_NOT_COPY_VALUES, R, ierr)<br>
> >   call MatAssemblyBegin(R, MAT_FINAL_ASSEMBLY, ierr)<br>
> >   call MatAssemblyEnd  (R, MAT_FINAL_ASSEMBLY, ierr)<br>
> ><br>
> >   call MatDuplicate(B, MAT_DO_NOT_COPY_VALUES, QDlt, ierr)<br>
> >   call MatAssemblyBegin(QDlt, MAT_FINAL_ASSEMBLY, ierr)<br>
> >   call MatAssemblyEnd  (QDlt, MAT_FINAL_ASSEMBLY, ierr)<br>
> ><br>
> >   call MatDuplicate(B, MAT_DO_NOT_COPY_VALUES, AQDlt, ierr)<br>
> >   call MatAssemblyBegin(AQDlt, MAT_FINAL_ASSEMBLY, ierr)<br>
> >   call MatAssemblyEnd  (AQDlt, MAT_FINAL_ASSEMBLY, ierr)<br>
> ><br>
> > ! Q, K, AQ_p, AQ of size n x (m x k)<br>
> >   call MatCreateDense(PETSC_COMM_WORLD, (ownRowE - ownRowS), &<br>
> >                       (bsize*step_k), nDim, (bsize*step_k),PETSC_NULL_SCALAR, Q, ierr)<br>
> >   call MatAssemblyBegin(Q, MAT_FINAL_ASSEMBLY, ierr)<br>
> >   call MatAssemblyEnd(Q, MAT_FINAL_ASSEMBLY, ierr)<br>
> ><br>
> >   call MatDuplicate(Q, MAT_DO_NOT_COPY_VALUES, K, ierr)<br>
> >   call MatAssemblyBegin(K, MAT_FINAL_ASSEMBLY, ierr)<br>
> >   call MatAssemblyEnd(K, MAT_FINAL_ASSEMBLY, ierr)<br>
> ><br>
> >   call MatDuplicate(Q, MAT_DO_NOT_COPY_VALUES, AQ_p, ierr)<br>
> >   call MatAssemblyBegin(AQ_p, MAT_FINAL_ASSEMBLY, ierr)<br>
> >   call MatAssemblyEnd(AQ_p, MAT_FINAL_ASSEMBLY, ierr)<br>
> ><br>
> >   call MatDuplicate(Q, MAT_DO_NOT_COPY_VALUES, AQ, ierr)<br>
> >   call MatAssemblyBegin(AQ, MAT_FINAL_ASSEMBLY, ierr)<br>
> >   call MatAssemblyEnd(AQ, MAT_FINAL_ASSEMBLY, ierr)<br>
> ><br>
> > ! QtAQ, QtAQ_p, Dlt of size (m x k) x (m x k)<br>
> >   call MatCreateSeqDense(PETSC_COMM_SELF,(bsize*step_k),(bsize*step_k),&<br>
> >                          PETSC_NULL_SCALAR, QtAQ, ierr)<br>
> >   call MatAssemblyBegin(QtAQ, MAT_FINAL_ASSEMBLY, ierr)<br>
> >   call MatAssemblyEnd  (QtAQ, MAT_FINAL_ASSEMBLY, ierr)<br>
> ><br>
> >   call MatDuplicate(QtAQ, MAT_DO_NOT_COPY_VALUES, QtAQ_p    , ierr)<br>
> >   call MatAssemblyBegin(QtAQ_p, MAT_FINAL_ASSEMBLY, ierr)<br>
> >   call MatAssemblyEnd  (QtAQ_p, MAT_FINAL_ASSEMBLY, ierr)<br>
> ><br>
> >   call MatDuplicate(QtAQ, MAT_DO_NOT_COPY_VALUES, Dlt       , ierr)<br>
> >   call MatAssemblyBegin(Dlt, MAT_FINAL_ASSEMBLY, ierr)<br>
> >   call MatAssemblyEnd  (Dlt, MAT_FINAL_ASSEMBLY, ierr)<br>
> ><br>
> >   call MatDuplicate(QtAQ, MAT_DO_NOT_COPY_VALUES, AConjPara , ierr)<br>
> >   call MatAssemblyBegin(AConjPara, MAT_FINAL_ASSEMBLY, ierr)<br>
> >   call MatAssemblyEnd  (AConjPara, MAT_FINAL_ASSEMBLY, ierr)<br>
> ><br>
> > ! calculation for R<br>
> ><br>
> > ! call matrix powers kernel<br>
> >   call mpk_monomial (K, A, R, step_k, rank,size)<br>
> ><br>
> > ! destory matrices<br>
> >   deallocate(XInit)<br>
> ><br>
> >   call MatDestroy(B, ierr)<br>
> >   call MatDestroy(X, ierr)<br>
> >   call MatDestroy(R, ierr)<br>
> >   call MatDestroy(QDlt, ierr)<br>
> >   call MatDestroy(AQDlt, ierr)<br>
> >   call MatDestroy(Q, ierr)<br>
> >   call MatDestroy(K, ierr)<br>
> >   call MatDestroy(AQ_p, ierr)<br>
> >   call MatDestroy(AQ, ierr)<br>
> >   call MatDestroy(QtAQ, ierr)<br>
> >   call MatDestroy(QtAQ_p, ierr)<br>
> >   call MatDestroy(Dlt, ierr)<br>
> ><br>
> ><br>
> >   call PetscFinalize(ierr)<br>
> ><br>
> >   stop<br>
> ><br>
> > end program test<br>
> ><br>
> ><br>
> > subroutine mpk_monomial (K, A, R, step_k, rank, sizeMPI)<br>
> >       implicit none<br>
> ><br>
> > #include <finclude/petscsys.h><br>
> > #include <finclude/petscvec.h><br>
> > #include <finclude/petscmat.h><br>
> > #include <finclude/petscviewer.h><br>
> ><br>
> >       Mat            :: K, Km(step_k)<br>
> >       Mat            :: A, R<br>
> >       PetscMPIInt    :: sizeMPI, rank<br>
> >       PetscInt       :: nDim, bsize, step_k, local_RRow, local_RCol, genIdx<br>
> >       PetscInt       :: ierr<br>
> >       PetscInt       :: stepIdx, blockShift, localRsize<br>
> >   PetscScalar    :: KArray(1), RArray(1), PetscScalarSize<br>
> >   PetscOffset    :: KArrayOffset, RArrayOffset<br>
> ><br>
> >       call MatGetSize(R, nDim, bsize, ierr)<br>
> >       if (rank == 0) then<br>
> >         print*,'Mat Size = ', nDim, bsize<br>
> >       end if<br>
> ><br>
> >   call MatGetArray(K,KArray,KArrayOffset,ierr)<br>
> ><br>
> >   call MatGetLocalSize(R,local_RRow,local_RCol)<br>
> > !   print *, "local_RRow,local_RCol", local_RRow,local_RCol<br>
> ><br>
> >   ! get arry from R to add values to K(1)<br>
> >   call MatGetArray(R,RArray,RArrayOffset,ierr)<br>
> ><br>
> >   call MatCreateDense(PETSC_COMM_WORLD,  PETSC_DECIDE, &<br>
> >                         PETSC_DECIDE , nDim, bsize,KArray(KArrayOffset + 1), Km(1), ierr)<br>
> ><br>
> ><br>
> > !   call PetscMemmove(KArray(KArrayOffset + 1),RArray(RArrayOffset + 1) &<br>
> > !                  ,local_RRow * local_RCol * STORAGE_SIZE(PetscScalarSize), ierr)<br>
> ><br>
> >   localRsize = local_RRow * local_RCol<br>
> >   do genIdx= 1, localRsize<br>
> >     KArray(KArrayOffset + genIdx) = RArray(RArrayOffset + genIdx)<br>
> >   end do<br>
> ><br>
> ><br>
> >   call MatRestoreArray(R,RArray,RArrayOffset,ierr)<br>
> ><br>
> >   call MatAssemblyBegin(Km(1), MAT_FINAL_ASSEMBLY, ierr)<br>
> >   call MatAssemblyEnd  (Km(1), MAT_FINAL_ASSEMBLY, ierr)<br>
> ><br>
> >   do stepIdx= 2, step_k<br>
> ><br>
> >     blockShift = KArrayOffset + (stepIdx-1) * (local_RRow * local_RCol)<br>
> ><br>
> >     call MatCreateDense(PETSC_COMM_WORLD,  PETSC_DECIDE, &<br>
> >                         PETSC_DECIDE , nDim, bsize,KArray(blockShift+1), Km(stepIdx), ierr)<br>
> >     call MatAssemblyBegin(Km(stepIdx), MAT_FINAL_ASSEMBLY, ierr)<br>
> >     call MatAssemblyEnd  (Km(stepIdx), MAT_FINAL_ASSEMBLY, ierr)<br>
> ><br>
> >   end do<br>
> ><br>
> >   call MatRestoreArray(K,KArray,KArrayOffset,ierr)<br>
> ><br>
> > !   do stepIdx= 2, step_k<br>
> >   do stepIdx= 2,2<br>
> ><br>
> >     call MatMatMult(A,Km(stepIdx-1),MAT_REUSE_MATRIX,PETSC_DEFAULT_INTEGER,Km(stepIdx), ierr)<br>
> > !     call MatMatMult(A,Km(stepIdx-1),MAT_INITIAL_MATRIX,PETSC_DEFAULT_INTEGER,Km(stepIdx), ierr)<br>
> >   end do<br>
> ><br>
> > !   call MatView(K,PETSC_VIEWER_STDOUT_WORLD,ierr)<br>
> ><br>
> > end subroutine mpk_monomial<br>
> ><br>
> ><br>
> ><br>
> > Cong Li<br>
> ><br>
> > On Thu, Aug 6, 2015 at 3:30 AM, Barry Smith <<a href="mailto:bsmith@mcs.anl.gov">bsmith@mcs.anl.gov</a>> wrote:<br>
> ><br>
> >    Send the entire code so that we can compile it and run it ourselves to see what is going wrong.<br>
> ><br>
> >   Barry<br>
> ><br>
> > > On Aug 5, 2015, at 4:42 AM, Cong Li <<a href="mailto:solvercorleone@gmail.com">solvercorleone@gmail.com</a>> wrote:<br>
> > ><br>
> > > Hi<br>
> > ><br>
> > > I tried the method you suggested. However, I got the error message.<br>
> > > My code and message are below.<br>
> > ><br>
> > > K is the big matrix containing column matrices.<br>
> > ><br>
> > > code:<br>
> > ><br>
> > > call MatGetArray(K,KArray,KArrayOffset,ierr)<br>
> > ><br>
> > > call MatGetLocalSize(R,local_RRow,local_RCol)<br>
> > ><br>
> > > call MatGetArray(R,RArray,RArrayOffset,ierr)<br>
> > ><br>
> > > call MatCreateDense(PETSC_COMM_WORLD,  PETSC_DECIDE, &<br>
> > >                         PETSC_DECIDE , nDim, bsize,KArray(KArrayOffset + 1), Km(1), ierr)<br>
> > ><br>
> > >   localRsize = local_RRow * local_RCol<br>
> > >   do genIdx= 1, localRsize<br>
> > >     KArray(KArrayOffset + genIdx) = RArray(RArrayOffset + genIdx)<br>
> > >   end do<br>
> > ><br>
> > >   call MatRestoreArray(R,RArray,RArrayOffset,ierr)<br>
> > ><br>
> > >   call MatAssemblyBegin(Km(1), MAT_FINAL_ASSEMBLY, ierr)<br>
> > >   call MatAssemblyEnd  (Km(1), MAT_FINAL_ASSEMBLY, ierr)<br>
> > ><br>
> > >   do stepIdx= 2, step_k<br>
> > ><br>
> > >     blockShift = KArrayOffset + (stepIdx-1) * (local_RRow * local_RCol)<br>
> > ><br>
> > >     call MatCreateDense(PETSC_COMM_WORLD,  PETSC_DECIDE, &<br>
> > >                         PETSC_DECIDE , nDim, bsize,KArray(blockShift+1), Km(stepIdx), ierr)<br>
> > >     call MatAssemblyBegin(Km(stepIdx), MAT_FINAL_ASSEMBLY, ierr)<br>
> > >     call MatAssemblyEnd  (Km(stepIdx), MAT_FINAL_ASSEMBLY, ierr)<br>
> > >   end do<br>
> > ><br>
> > >   call MatRestoreArray(K,KArray,KArrayOffset,ierr)<br>
> > ><br>
> > >    do stepIdx= 2, step_k<br>
> > ><br>
> > >     call MatMatMult(A,Km(stepIdx-1),MAT_REUSE_MATRIX,PETSC_DEFAULT_INTEGER,Km(stepIdx), ierr)<br>
> > >   end do<br>
> > ><br>
> > ><br>
> > > And I got the error message as below:<br>
> > ><br>
> > ><br>
> > > [0]PETSC ERROR: ------------------------------------------------------------------------<br>
> > > [0]PETSC ERROR: Caught signal number 11 SEGV: Segmentation Violation, probably memory access out of range<br>
> > > [0]PETSC ERROR: Try option -start_in_debugger or -on_error_attach_debugger<br>
> > > [0]PETSC ERROR: or see <a href="http://www.mcs.anl.gov/petsc/documentation/faq.html#valgrind[0]PETSC" rel="noreferrer" target="_blank">http://www.mcs.anl.gov/petsc/documentation/faq.html#valgrind[0]PETSC</a> ERROR: or try <a href="http://valgrind.org" rel="noreferrer" target="_blank">http://valgrind.org</a> on GNU/linux and Apple Mac OS X to find memory corruption errors<br>
> > > [0]PETSC ERROR: configure using --with-debugging=yes, recompile, link, and run<br>
> > > [0]PETSC ERROR: to get more information on the crash.<br>
> > > [0]PETSC ERROR: --------------------- Error Message ------------------------------------<br>
> > > [0]PETSC ERROR: Signal received!<br>
> > > [0]PETSC ERROR: ------------------------------------------------------------------------<br>
> > > [0]PETSC ERROR: Petsc Release Version 3.3.0, Patch 7, Sat May 11 22:15:24 CDT 2013<br>
> > > [0]PETSC ERROR: See docs/changes/index.html for recent updates.<br>
> > > [0]PETSC ERROR: See docs/faq.html for hints about trouble shooting.<br>
> > > [0]PETSC ERROR: See docs/index.html for manual pages.<br>
> > > [0]PETSC ERROR: --------------------[1]PETSC ERROR: ------------------------------------------------------------------------<br>
> > > [1]PETSC ERROR: Caught signal number 11 SEGV: Segmentation Violation, probably memory access out of range<br>
> > > ----------------------------------------------------<br>
> > > [0]PETSC ERROR: ./kmath.bcbcg on a arch-fuji named p01-024 by a03293 Wed Aug  5 18:24:40 2015<br>
> > > [0]PETSC ERROR: Libraries linked from /volume1/home/ra000005/a03293/kmathlibbuild/petsc-3.3-p7/arch-fujitsu-sparc64fx-opt/lib<br>
> > > [0]PETSC ERROR: Configure run at Tue Jul 28 19:23:51 2015<br>
> > > [0]PETSC ERROR: Configure options --known-level1-dcache-size=32768 --known-level1-dcache-linesize=32 --known-level1-dcache-assoc=0 --known-memcmp-ok=1 --known-sizeof-char=1 --known-sizeof-void-p=8 --known-sizeof-short=2 --known-sizeof-int=4 --known-sizeof-long=8 --known-sizeof-long-long=8 --known-sizeof-float=4 --known-sizeof-double=8 --known-sizeof-size_t=8 --known-bits-per-byte=8 --known-sizeof-MPI_Comm=8 --known-sizeof-MPI_Fint=4 --known-mpi-long-double=1 --known-mpi-c-double-complex=1 --with-cc=mpifccpx --CFLAGS="-mt -Xg" --COPTFLAGS=-Kfast,openmp --with-cxx=mpiFCCpx --CXXFLAGS=-mt --CXXOPTFLAGS=-Kfast,openmp --with-fc=mpifrtpx --FFLAGS=-Kthreadsafe --FOPTFLAGS=-Kfast,openmp --with-blas-lapack-lib="-SCALAPACK -SSL2" --with-x=0 --with-c++-support --with-batch=1 --with-info=1 --with-debugging=0 --known-mpi-shared-libraries=0 --with-valgrind=0<br>
> > > [0]PETSC ERROR: ------------------------------------------------------------------------<br>
> > > [0]PETSC ERROR: User provided function() line 0 in unknown directory unknown file<br>
> > > --------------------------------------------------------------------------<br>
> > > [mpi::mpi-api::mpi-abort]<br>
> > > MPI_ABORT was invoked on rank 0 in communicator MPI_COMM_WORLD<br>
> > > with errorcode 59.<br>
> > ><br>
> > > NOTE: invoking MPI_ABORT causes Open MPI to kill all MPI processes.<br>
> > > You may or may not see output from other processes, depending on<br>
> > > exactly when Open MPI kills them.<br>
> > > --------------------------------------------------------------------------<br>
> > > [p01-024:26516] /opt/FJSVtclang/GM-1.2.0-18/lib64/libmpi.so.0(orte_errmgr_base_error_abort+0x84) [0xffffffff0091f684]<br>
> > > [p01-024:26516] /opt/FJSVtclang/GM-1.2.0-18/lib64/libmpi.so.0(ompi_mpi_abort+0x51c) [0xffffffff006c389c]<br>
> > > [p01-024:26516] /opt/FJSVtclang/GM-1.2.0-18/lib64/libmpi.so.0(MPI_Abort+0x6c) [0xffffffff006db3ac]<br>
> > > [p01-024:26516] /opt/FJSVtclang/GM-1.2.0-18/lib64/libtrtmet_c.so.1(MPI_Abort+0x2c) [0xffffffff00281bf0]<br>
> > > [p01-024:26516] ./kmath.bcbcg [0x1bf620]<br>
> > > [p01-024:26516] ./kmath.bcbcg [0x1bf20c]<br>
> > > [p01-024:26516] /lib64/libc.so.6(killpg+0x48) [0xffffffff02d52600]<br>
> > > [p01-024:26516] [(nil)]<br>
> > > [p01-024:26516] ./kmath.bcbcg [0x1a2054]<br>
> > > [p01-024:26516] ./kmath.bcbcg [0x1064f8]<br>
> > > [p01-024:26516] ./kmath.bcbcg(MAIN__+0x9dc) [0x105d1c]<br>
> > > [p01-024:26516] ./kmath.bcbcg(main+0xec) [0x8a329c]<br>
> > > [p01-024:26516] /lib64/libc.so.6(__libc_start_main+0x194) [0xffffffff02d3b81c]<br>
> > > [p01-024:26516] ./kmath.bcbcg [0x1051ec]<br>
> > > [0]PETSC ERROR: ------------------------------------------------------------------------<br>
> > > [0]PETSC ERROR: Caught signal number 15 Terminate: Somet process (or the batch system) has told this process to end<br>
> > > [0]PETSC ERROR: Try option -start_in_debugger or -on_error_attach_debugger<br>
> > > [0]PETSC ERROR: or see <a href="http://www.mcs.anl.gov/petsc/documentation/faq.html#valgrind[0]PETSC" rel="noreferrer" target="_blank">http://www.mcs.anl.gov/petsc/documentation/faq.html#valgrind[0]PETSC</a> ERROR: or try <a href="http://valgrind.org" rel="noreferrer" target="_blank">http://valgrind.org</a> on GNU/linux and Apple Mac OS X to find memory corruption errors<br>
> > > [0]PETSC ERROR: configure using --with-debugging=yes, recompile, link, and run<br>
> > > [0]PETSC ERROR: to get more information on the crash.<br>
> > > [0]PETSC ERROR: --------------------- Error Message ------------------------------------<br>
> > > [0]PETSC ERROR: Signal received!<br>
> > > [0]PETSC ERROR: ------------------------------------------------------------------------<br>
> > > [0]PETSC ERROR: Petsc Release Version 3.3.0, Patch 7, Sat May 11 22:15:24 CDT 2013<br>
> > > [0]PETSC ERROR: See docs/changes/index.html for recent updates.<br>
> > > [0]PETSC ERROR: See docs/faq.html for hints about trouble shooting.<br>
> > > [0]PETSC ERROR: See docs/index.html for manual pages.<br>
> > > [0]PETSC ERROR: ------------------------------------------------------------------------<br>
> > > [0]PETSC ERROR: ./kmath.bcbcg on a arch-fuji named p01-024 by a03293 Wed Aug  5 18:24:40 2015<br>
> > > [0]PETSC ERROR: Libraries linked from /volume1/home/ra000005/a03293/kmathlibbuild/petsc-3.3-p7/arch-fujitsu-sparc64fx-opt/lib<br>
> > > [0]PETSC ERROR: Configure run at Tue Jul 28 19:23:51 2015<br>
> > > [0]PETSC ERROR: Configure options --known-level1-dcache-size=32768 --known-level1-dcache-linesize=32 --known-level1-dcache-assoc=0 --known-memcmp-ok=1 --known-sizeof-char=1 --known-sizeof-void-p=8 --known-sizeof-short=2 --known-sizeof-int=4 --known-sizeof-long=8 --known-sizeof-long-long=8 --known-sizeof-float=4 --known-sizeof-double=8 --known-sizeof-size_t=8 --known-bits-per-byte=8 --known-sizeof-MPI_Comm=8 --known-sizeof-MPI_Fint=4 --known-mpi-long-double=1 --known-mpi-c-double-complex=1 --with-cc=mpifccpx --CFLAGS="-mt -Xg" --COPTFLAGS=-Kfast,openmp --with-cxx=mpiFCCpx --CXXFLAGS=-mt --CXXOPTFLAGS=-Kfast,openmp --with-fc=mpifrtpx --FFLAGS=-Kthreadsafe --FOPTFLAGS=-Kfast,openmp --with-blas-lapack-lib="-SCALAPACK -SSL2" --with-x=0 --with-c++-support --with-batch=1 --with-info=1 --with-debugging=0 --known-mpi-shared-libraries=0 --with-valgrind=0<br>
> > > [0]PETSC ERROR: ------------------------------------------------------------------------<br>
> > > [0]PETSC ERROR: User provided function() line 0 in unknown directory unknown file<br>
> > > [ERR.] PLE 0019 plexec One of MPI processes was aborted.(rank=0)(nid=0x020a0028)(CODE=1938,793745140674134016,15104)<br>
> > ><br>
> > > However, if I change from<br>
> > > call MatMatMult(A,Km(stepIdx-1),MAT_REUSE_MATRIX,PETSC_DEFAULT_INTEGER,Km(stepIdx), ierr)<br>
> > > to<br>
> > > call MatMatMult(A,Km(stepIdx-1), MAT_INITIAL_MATRIX,PETSC_DEFAULT_INTEGER,Km(stepIdx), ierr)<br>
> > ><br>
> > > everything is fine.<br>
> > ><br>
> > > could you please suggest some way to solve this?<br>
> > ><br>
> > > Thanks<br>
> > ><br>
> > > Cong Li<br>
> > ><br>
> > > On Wed, Aug 5, 2015 at 10:53 AM, Cong Li <<a href="mailto:solvercorleone@gmail.com">solvercorleone@gmail.com</a>> wrote:<br>
> > > Thank you very much for your help and suggestions.<br>
> > > With your help, finally I could continue my project.<br>
> > ><br>
> > > Regards<br>
> > ><br>
> > > Cong Li<br>
> > ><br>
> > ><br>
> > ><br>
> > > On Wed, Aug 5, 2015 at 3:09 AM, Barry Smith <<a href="mailto:bsmith@mcs.anl.gov">bsmith@mcs.anl.gov</a>> wrote:<br>
> > ><br>
> > >   From the manual page:  Unless scall is MAT_REUSE_MATRIX C will be created.<br>
> > ><br>
> > >   Since you want to use the C that is passed in you should use MAT_REUSE_MATRIX.<br>
> > ><br>
> > >   Note that since your B and C matrices are dense the issue of sparsity pattern of C is not relevant.<br>
> > ><br>
> > >   Barry<br>
> > ><br>
> > > > On Aug 4, 2015, at 11:59 AM, Cong Li <<a href="mailto:solvercorleone@gmail.com">solvercorleone@gmail.com</a>> wrote:<br>
> > > ><br>
> > > > Thanks very much. This answer is very helpful.<br>
> > > > And I have a following question.<br>
> > > > If I create B1, B2, .. by the way you suggested and then use MatMatMult to do SPMM.<br>
> > > > PetscErrorCode  MatMatMult(Mat A,Mat B,MatReuse scall,PetscReal fill,Mat *C)<br>
> > > > should I use  MAT_REUSE_MATRIX for MatReuse part of the arguement.<br>
> > > ><br>
> > > > Thanks<br>
> > > ><br>
> > > > Cong Li<br>
> > > ><br>
> > > > On Wed, Aug 5, 2015 at 1:27 AM, Barry Smith <<a href="mailto:bsmith@mcs.anl.gov">bsmith@mcs.anl.gov</a>> wrote:<br>
> > > ><br>
> > > > > On Aug 4, 2015, at 4:09 AM, Cong Li <<a href="mailto:solvercorleone@gmail.com">solvercorleone@gmail.com</a>> wrote:<br>
> > > > ><br>
> > > > > I am sorry that I should have explained it more clearly.<br>
> > > > > Actually I want to compute a recurrence.<br>
> > > > ><br>
> > > > > Like, I want to firstly compute A*X1=B1, and then calculate A*B1=B2, A*B2=B3 and so on.<br>
> > > > > Finally I want to combine all these results into a bigger matrix C=[B1,B2 ...]<br>
> > > ><br>
> > > >    First create C with MatCreateDense(,&C). Then call MatDenseGetArray(C,&array); then create B1 with MatCreateDense(....,array,&B1); then create<br>
> > > > B2 with MatCreateDense(...,array+shift,&B2) etc where shift equals the number of __local__ rows in B1 times the number of columns in B1, then create B3 with a larger shift etc.<br>
> > > ><br>
> > > >    Note that you are "sharing" the array space of C with B1, B2, B3, ..., each Bi contains its columns of the C matrix.<br>
> > > ><br>
> > > >   Barry<br>
> > > ><br>
> > > ><br>
> > > ><br>
> > > > ><br>
> > > > > Is there any way to do this efficiently.<br>
> > > > ><br>
> > > > ><br>
> > > > ><br>
> > > > > On Tue, Aug 4, 2015 at 5:45 PM, Patrick Sanan <<a href="mailto:patrick.sanan@gmail.com">patrick.sanan@gmail.com</a>> wrote:<br>
> > > > > On Tue, Aug 04, 2015 at 03:42:14PM +0900, Cong Li wrote:<br>
> > > > > > Thanks for your reply.<br>
> > > > > ><br>
> > > > > > I have an other question.<br>
> > > > > > I want to do SPMM several times and combine result matrices into one bigger<br>
> > > > > > matrix.<br>
> > > > > > for example<br>
> > > > > > I firstly calculate AX1=B1, AX2=B2 ...<br>
> > > > > > then I want to combine B1, B2.. to get a C, where C=[B1,B2...]<br>
> > > > > ><br>
> > > > > > Could you please suggest a way of how to do this.<br>
> > > > > This is just linear algebra, nothing to do with PETSc specifically.<br>
> > > > > A * [X1, X2, ... ] = [AX1, AX2, ...]<br>
> > > > > ><br>
> > > > > > Thanks<br>
> > > > > ><br>
> > > > > > Cong Li<br>
> > > > > ><br>
> > > > > > On Tue, Aug 4, 2015 at 3:27 PM, Jed Brown <<a href="mailto:jed@jedbrown.org">jed@jedbrown.org</a>> wrote:<br>
> > > > > ><br>
> > > > > > > Cong Li <<a href="mailto:solvercorleone@gmail.com">solvercorleone@gmail.com</a>> writes:<br>
> > > > > > ><br>
> > > > > > > > Hello,<br>
> > > > > > > ><br>
> > > > > > > > I am a PhD student using PETsc for my research.<br>
> > > > > > > > I am wondering if there is a way to implement SPMM (Sparse matrix-matrix<br>
> > > > > > > > multiplication) by using PETSc.<br>
> > > > > > ><br>
> > > > > > ><br>
> > > > > > > <a href="http://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Mat/MatMatMult.html" rel="noreferrer" target="_blank">http://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Mat/MatMatMult.html</a><br>
> > > > > > ><br>
> > > > ><br>
> > > ><br>
> > > ><br>
> > ><br>
> > ><br>
> > ><br>
> ><br>
> ><br>
> ><br>
><br>
><br>
<br>
<br></blockquote></div><br></div>