PetscErrorCode PCGAMGgraph_GEO(PC pc,const Mat Amat,Mat *a_Gmat) { PetscErrorCode ierr; PC_MG *mg = (PC_MG*)pc->data; PC_GAMG *pc_gamg = (PC_GAMG*)mg->innerctx; const PetscInt verbose = pc_gamg->verbose; const PetscReal vfilter = pc_gamg->threshold; PetscMPIInt rank,size; MPI_Comm comm; Mat Gmat; PetscBool set,flg,symm; PetscFunctionBegin; ierr = PetscObjectGetComm((PetscObject)Amat,&comm);CHKERRQ(ierr); #if defined PETSC_USE_LOG ierr = PetscLogEventBegin(PC_GAMGGgraph_GEO,0,0,0,0);CHKERRQ(ierr); #endif ierr = MPI_Comm_rank(comm, &rank);CHKERRQ(ierr); ierr = MPI_Comm_size(comm, &size);CHKERRQ(ierr); ierr = MatIsSymmetricKnown(Amat, &set, &flg);CHKERRQ(ierr); symm = (PetscBool)!(set && flg); ierr = PCGAMGCreateGraph(Amat, &Gmat);CHKERRQ(ierr); ierr = PCGAMGFilterGraph(&Gmat, vfilter, symm, verbose);CHKERRQ(ierr); *a_Gmat = Gmat; #if defined PETSC_USE_LOG ierr = PetscLogEventEnd(PC_GAMGGgraph_GEO,0,0,0,0);CHKERRQ(ierr); #endif PetscFunctionReturn(0); }
PetscErrorCode PCGAMGGraph_GEO(PC pc,Mat Amat,Mat *a_Gmat) { PetscErrorCode ierr; PC_MG *mg = (PC_MG*)pc->data; PC_GAMG *pc_gamg = (PC_GAMG*)mg->innerctx; const PetscReal vfilter = pc_gamg->threshold; MPI_Comm comm; Mat Gmat; PetscBool set,flg,symm; PetscFunctionBegin; ierr = PetscObjectGetComm((PetscObject)Amat,&comm);CHKERRQ(ierr); ierr = PetscLogEventBegin(PC_GAMGGraph_GEO,0,0,0,0);CHKERRQ(ierr); ierr = MatIsSymmetricKnown(Amat, &set, &flg);CHKERRQ(ierr); symm = (PetscBool)!(set && flg); ierr = PCGAMGCreateGraph(Amat, &Gmat);CHKERRQ(ierr); ierr = PCGAMGFilterGraph(&Gmat, vfilter, symm);CHKERRQ(ierr); *a_Gmat = Gmat; ierr = PetscLogEventEnd(PC_GAMGGraph_GEO,0,0,0,0);CHKERRQ(ierr); PetscFunctionReturn(0); }