[petsc-users] MAT_REUSE_MATRIX

Matthew Knepley knepley at gmail.com
Mon May 10 13:12:01 CDT 2010


On Mon, May 10, 2010 at 1:20 PM, <irfan.khan at gatech.edu> wrote:

> I get the following error at the call for MatMatMult(Mat A,Mat B,MatReuse
> scall, PetscReal fill,Mat *C).
>
> Error: Container does not exit!
>

The idea here is that you use MAT_INITIAL_MATRIX the first time, so C will
be created, and then
the same C and MAT_REUSE_MATRIX the next time.

   Matt


> Is the probable cause of this error an invalid C matrix?. Can I use
> MAT_REUSE_MATRIX in MatMatMult() and use an existing C matrix. The call
> works fine when I use MAT_INITIAL_MATRIX and use a new matrix.
>
> Here are the sequence of steps.
>
>       /* Generating A & B matrices by copying the global stiffness matrix
> */
>        ierr = MatConvert(global->Amat, MATSAME, MAT_INITIAL_MATRIX,
> &A);CHKERRQ(ierr);
>        ierr = MatConvert(global->Amat, MATSAME, MAT_INITIAL_MATRIX,
> &B);CHKERRQ(ierr);
>
>        /* Zero all the entries of the A matrix */
>        ierr = MatZeroEntries(A);CHKERRQ(ierr);
>
>        /* Fill in the diagonal entry and one off-diagonal entry of A matrix
> */
>        for(i = 0; i < bc.numPeriodic; i++){
>                if(bc.periodNode[i] > -1){
>                        for(j = 0; j < dofn; j++){
>                                row = local2Petsc[bc.periodNode[i]*dofn+j];
>                                col = bc.periodPair[i]*dofn+j;
>                        /* The diagonal Entry */
>                                ierr
> =MatSetValue(A,row,row,1.0,ADD_VALUES);CHKERRQ(ierr);
>                        /* The entry for periodic node */
>                                ierr
> =MatSetValue(A,row,col,1.0,ADD_VALUES);CHKERRQ(ierr);
>                        }
>                }
>        }
>
>        /* Assemble the new matrices */
>        ierr = MatAssemblyBegin(A, MAT_FINAL_ASSEMBLY);CHKERRQ(ierr);
>        ierr = MatAssemblyEnd(A, MAT_FINAL_ASSEMBLY);CHKERRQ(ierr);
>        ierr = MatAssemblyBegin(B, MAT_FINAL_ASSEMBLY);CHKERRQ(ierr);
>        ierr = MatAssemblyEnd(B, MAT_FINAL_ASSEMBLY);CHKERRQ(ierr);
>
>        /* Perform matrix multiplication of A and B(Amat) to add rows of
> periodic
>         * nodes. Save the new matrix in Amat */
>        ierr =
> MatMatMult(A,B,MAT_REUSE_MATRIX,PETSC_DEFAULT,&global->Amat);CHKERRQ(ierr);
>
>        ierr = MatDestroy(A);CHKERRQ(ierr);
>        ierr = MatDestroy(B);CHKERRQ(ierr);
>
>
> Thank you
> Irfan
>
> ----- Original Message -----
> From: "Matthew Knepley" <knepley at gmail.com>
> To: "PETSc users list" <petsc-users at mcs.anl.gov>
> Sent: Monday, May 10, 2010 12:26:14 PM GMT -05:00 US/Canada Eastern
> Subject: Re: [petsc-users] MAT_REUSE_MATRIX
>
> On Mon, May 10, 2010 at 12:07 PM, < irfan.khan at gatech.edu > wrote:
>
>
>
> Hi Petsc Team,
>
> When using the subroutine MatMatMult(Mat A,Mat B,PetscReal fill,Mat *C)
> with option MAT_REUSE_MATRIX, Can the C matrix be any one of A or B?
>
>
>
> I do not think that is safe. I believe C needs to be another matrix, but it
> can be
> reused for successive multiplies.
>
>
> Matt
>
>
> Thank you
> Irfan
>
> ----- Original Message -----
> From: "Matthew Knepley" < knepley at gmail.com >
> To: "PETSc users list" < petsc-users at mcs.anl.gov >
> Sent: Friday, May 7, 2010 4:03:42 PM GMT -05:00 US/Canada Eastern
> Subject: Re: [petsc-users] Adding MatAij rows
>
> On Fri, May 7, 2010 at 3:57 PM, < irfan.khan at gatech.edu > wrote:
>
>
>
>
>
>
> Petsc Team,
>
> Is there a function that can be used to add two rows and put the results
> into a third row of the same parallel matrix (MPIAIJ)? i.e
>
> A[k][l] = A[i][l] + A[j][l]
>
>
>
> No, since it would entail messing with the nonzero structure. You could
> easily
> use a second matrix to get this effect from subsequent MatMult() calls.
>
>
> Matt
>
>
>
>
>
> Thank you
> Irfan
>
> --
> PhD Candidate
> G.W. Woodruff School of Mechanical Engineering
> Georgia Institute of Technology
> Atlanta, GA (30332)
>
>
>
> --
> What most experimenters take for granted before they begin their
> experiments is infinitely more interesting than any results to which their
> experiments lead.
> -- Norbert Wiener
>
>
> --
> PhD Candidate
> G.W. Woodruff School of Mechanical Engineering
> Georgia Institute of Technology
> Atlanta, GA (30332)
>
>
>
> --
> What most experimenters take for granted before they begin their
> experiments is infinitely more interesting than any results to which their
> experiments lead.
> -- Norbert Wiener
>
>
> --
> PhD Candidate
> G.W. Woodruff School of Mechanical Engineering
> Georgia Institute of Technology
> Atlanta, GA (30332)
>



-- 
What most experimenters take for granted before they begin their experiments
is infinitely more interesting than any results to which their experiments
lead.
-- Norbert Wiener
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20100510/34a639e0/attachment.htm>


More information about the petsc-users mailing list