/*@ MatPartitioningApply - Gets a partitioning for a matrix. Collective on Mat Input Parameters: . matp - the matrix partitioning object Output Parameters: . partitioning - the partitioning. For each local node this tells the processor number that that node is assigned to. Options Database Keys: To specify the partitioning through the options database, use one of the following $ -mat_partitioning_type parmetis, -mat_partitioning current To see the partitioning result $ -mat_partitioning_view Level: beginner The user can define additional partitionings; see MatPartitioningRegister(). .keywords: matrix, get, partitioning .seealso: MatPartitioningRegister(), MatPartitioningCreate(), MatPartitioningDestroy(), MatPartitioningSetAdjacency(), ISPartitioningToNumbering(), ISPartitioningCount() @*/ PetscErrorCode MatPartitioningApply(MatPartitioning matp,IS *partitioning) { PetscErrorCode ierr; PetscBool flag = PETSC_FALSE; PetscFunctionBegin; PetscValidHeaderSpecific(matp,MAT_PARTITIONING_CLASSID,1); PetscValidPointer(partitioning,2); if (!matp->adj->assembled) SETERRQ(PetscObjectComm((PetscObject)matp),PETSC_ERR_ARG_WRONGSTATE,"Not for unassembled matrix"); if (matp->adj->factortype) SETERRQ(PetscObjectComm((PetscObject)matp),PETSC_ERR_ARG_WRONGSTATE,"Not for factored matrix"); if (!matp->ops->apply) SETERRQ(PetscObjectComm((PetscObject)matp),PETSC_ERR_ARG_WRONGSTATE,"Must set type with MatPartitioningSetFromOptions() or MatPartitioningSetType()"); ierr = PetscLogEventBegin(MAT_Partitioning,matp,0,0,0);CHKERRQ(ierr); ierr = (*matp->ops->apply)(matp,partitioning);CHKERRQ(ierr); ierr = PetscLogEventEnd(MAT_Partitioning,matp,0,0,0);CHKERRQ(ierr); ierr = PetscOptionsGetBool(NULL,"-mat_partitioning_view",&flag,NULL);CHKERRQ(ierr); if (flag) { PetscViewer viewer; ierr = PetscViewerASCIIGetStdout(PetscObjectComm((PetscObject)matp),&viewer);CHKERRQ(ierr); ierr = MatPartitioningView(matp,viewer);CHKERRQ(ierr); ierr = ISView(*partitioning,viewer);CHKERRQ(ierr); } PetscFunctionReturn(0); }
void PETSC_STDCALL matpartitioningview_(MatPartitioning *part,PetscViewer *viewer, PetscErrorCode *ierr) { PetscViewer v; PetscPatchDefaultViewers_Fortran(viewer,v); *ierr = MatPartitioningView(*part,v); }