[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