/*@ AOApplicationToPetscIS - Maps an index set in the application-defined ordering to the PETSc ordering. Collective on AO and IS Input Parameters: + ao - the application ordering context - is - the index set; this is replaced with its mapped values Output Parameter: . is - the mapped index set Level: beginner Note: The index set cannot be of type stride or block Any integers in ia[] that are negative are left unchanged. This allows one to convert, for example, neighbor lists that use negative entries to indicate nonexistent neighbors due to boundary conditions, etc. .keywords: application ordering, mapping .seealso: AOCreateBasic(), AOView(), AOPetscToApplication(), AOPetscToApplicationIS(), AOApplicationToPetsc() @*/ PetscErrorCode AOApplicationToPetscIS(AO ao,IS is) { PetscErrorCode ierr; PetscInt n,*ia; PetscFunctionBegin; PetscValidHeaderSpecific(ao,AO_CLASSID,1); PetscValidHeaderSpecific(is,IS_CLASSID,2); ierr = ISToGeneral(is);CHKERRQ(ierr); /* we cheat because we know the is is general and that we can change the indices */ ierr = ISGetIndices(is,(const PetscInt**)&ia);CHKERRQ(ierr); ierr = ISGetLocalSize(is,&n);CHKERRQ(ierr); ierr = (*ao->ops->applicationtopetsc)(ao,n,ia);CHKERRQ(ierr); ierr = ISRestoreIndices(is,(const PetscInt**)&ia);CHKERRQ(ierr); PetscFunctionReturn(0); }
int main(int argc,char **argv) { PetscErrorCode ierr; PetscInt step = 2; IS is; ierr = PetscInitialize(&argc,&argv,(char*)0,help);CHKERRQ(ierr); ierr = PetscOptionsGetInt(NULL,"-step",&step,NULL);CHKERRQ(ierr); ierr = ISCreateStride(PETSC_COMM_SELF,10,0,step,&is);CHKERRQ(ierr); ierr = ISToGeneral(is);CHKERRQ(ierr); ierr = ISDestroy(&is);CHKERRQ(ierr); ierr = PetscFinalize(); return 0; }
void PETSC_STDCALL istogeneral_(IS is, int *__ierr ){ *__ierr = ISToGeneral( (IS)PetscToPointer((is) )); }