[petsc-dev] [petsc-users] How to compute RARt with A and R as distributed (MPI) matrices ?
Franck Houssen
franck.houssen at inria.fr
Fri Jun 23 03:10:23 CDT 2017
By the way, I noticed this is exactly the same for MatRARt/PtAPNumeric/Symbolic: pages of the documentation are identical, so the user can not understand why to use the RARt or the PtAP.
I believe adding a short note in MatRARt/PtAP pages and MatRARt/PtAPNumeric/Symbolic would be welcome to say "this method is meant to do/support this but not that".
Franck
----- Mail original -----
> De: "Jed Brown" <jed at jedbrown.org>
> À: "Hong" <hzhang at mcs.anl.gov>
> Cc: "petsc-dev" <petsc-dev at mcs.anl.gov>, "PETSc users list" <petsc-users at mcs.anl.gov>
> Envoyé: Jeudi 22 Juin 2017 18:17:33
> Objet: Re: [petsc-dev] [petsc-users] How to compute RARt with A and R as distributed (MPI) matrices ?
>
> Hong <hzhang at mcs.anl.gov> writes:
>
> > Jed:
> >>
> >> >> Is it better this way or as a fallback when !A->ops->rart? MatPtAP
> >> >> handles other combinations like MAIJ.
> >> >>
> >> >
> >> > Do you mean
> >> > if ( !A->ops->rart) {
> >> > Mat Rt;
> >> > ierr = MatTranspose(R,MAT_INITIAL_MATRIX,&Rt);CHKERRQ(ierr);
> >> > ierr = MatMatMatMult(R,A,Rt,scall,fill,C);CHKERRQ(ierr);
> >> > ierr = MatDestroy(&Rt);CHKERRQ(ierr);
> >> > }
> >> > This does NOT work for most matrix formats because we do not have
> >> fallbacks
> >> > for MatTranspose() and MatMatMult().
> >>
> >> That's fine; they'll trigger an error and we'll be able to see from the
> >> stack that it can be made to work by either implementing the appropriate
> >> MatRARt or MatTranspose and MatMatMatMult.
> >>
> >
> > You prefer adding this default, even though it gives error in either
> > MatTranspose() or MatMatMatMult() depends on input matrix format?
>
> Yeah, in the sense that it gives more opportunities to succeed.
>
> > If so, we need add this type of 'default' to all mat operations --
> > currently, all routines do
> > if (!mat->ops-> )
> > SETERRQ1(PetscObjectComm((PetscObject)mat),PETSC_ERR_SUP,"Mat type
> > %s",((PetscObject)mat)->type_name);
>
> Probably.
>
More information about the petsc-dev
mailing list