[petsc-dev] checking if a vector is ghosted
Barry Smith
bsmith at mcs.anl.gov
Tue Nov 8 14:41:00 CST 2011
We should add a VecIsGhosted()
Barry
On Nov 8, 2011, at 12:07 PM, Jed Brown wrote:
> On Tue, Nov 8, 2011 at 14:05, Matthew Knepley <knepley at gmail.com> wrote:
> Just want to check that the following is a kosher use of the return error handler
>
> bool _is_ghosted = true;
> PetscErrorCode ierr;
> PetscPushErrorHandler(PetscReturnErrorHandler,PETSC_NULL);
> ierr= VecGhostGetLocalForm(*x, x_ghosted.get());
> if (ierr != 0 )
> _is_ghosted = false;
> PetscPopErrorHandler();
>
> Do you need to mess with the error handler?
>
> Yes, otherwise an error message would be printed.
>
> Mark, what you describe is okay. We, or you, could make a VecIsGhosted(). The code shows how it determines whether a Vec is ghosted.
>
> PetscErrorCode VecGhostGetLocalForm(Vec g,Vec *l)
> {
> PetscErrorCode ierr;
> PetscBool isseq,ismpi;
>
> PetscFunctionBegin;
> PetscValidHeaderSpecific(g,VEC_CLASSID,1);
> PetscValidPointer(l,2);
>
> ierr = PetscTypeCompare((PetscObject)g,VECSEQ,&isseq);CHKERRQ(ierr);
> ierr = PetscTypeCompare((PetscObject)g,VECMPI,&ismpi);CHKERRQ(ierr);
> if (ismpi) {
> Vec_MPI *v = (Vec_MPI*)g->data;
> if (!v->localrep) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_ARG_WRONG,"Vector is not ghosted");
> *l = v->localrep;
> } else if (isseq) {
> *l = g;
> } else {
> SETERRQ1(PETSC_COMM_SELF,PETSC_ERR_ARG_WRONG,"Vector type %s does not have local representation",((PetscObject)g)->type_name);
> }
> ierr = VecGhostStateSync_Private(g,*l);CHKERRQ(ierr);
> ierr = PetscObjectReference((PetscObject)*l);CHKERRQ(ierr);
> PetscFunctionReturn(0);
> }
More information about the petsc-dev
mailing list