Actual source code: pcbddcprivateimpl.h

  1: /* prototypes of all BDDC private functions */
  2: #ifndef PETSC_PCBDDCPRIVATEIMPL_H
  3: #define PETSC_PCBDDCPRIVATEIMPL_H

  5: #include <petsc/private/pcbddcstructsimpl.h>

  7: /* main functions */
  8: PETSC_EXTERN PetscErrorCode PCBDDCAnalyzeInterface(PC);
  9: PETSC_EXTERN PetscErrorCode PCBDDCConstraintsSetUp(PC);

 11: /* reset functions */
 12: PETSC_EXTERN PetscErrorCode PCBDDCResetTopography(PC);
 13: PETSC_EXTERN PetscErrorCode PCBDDCResetSolvers(PC);
 14: PETSC_EXTERN PetscErrorCode PCBDDCResetCustomization(PC);

 16: /* graph */
 17: PETSC_EXTERN PetscErrorCode PCBDDCGraphCreate(PCBDDCGraph *);
 18: PETSC_EXTERN PetscErrorCode PCBDDCGraphDestroy(PCBDDCGraph *);
 19: PETSC_EXTERN PetscErrorCode PCBDDCGraphInit(PCBDDCGraph, ISLocalToGlobalMapping, PetscInt, PetscInt);
 20: PETSC_EXTERN PetscErrorCode PCBDDCGraphReset(PCBDDCGraph);
 21: PETSC_EXTERN PetscErrorCode PCBDDCGraphResetCSR(PCBDDCGraph);
 22: PETSC_EXTERN PetscErrorCode PCBDDCGraphResetCoords(PCBDDCGraph);
 23: PETSC_EXTERN PetscErrorCode PCBDDCGraphSetUp(PCBDDCGraph, PetscInt, IS, IS, PetscInt, IS[], IS);
 24: PETSC_EXTERN PetscErrorCode PCBDDCGraphComputeConnectedComponents(PCBDDCGraph);
 25: PETSC_EXTERN PetscErrorCode PCBDDCGraphComputeConnectedComponentsLocal(PCBDDCGraph);
 26: PETSC_EXTERN PetscErrorCode PCBDDCGraphASCIIView(PCBDDCGraph, PetscInt, PetscViewer);
 27: PETSC_EXTERN PetscErrorCode PCBDDCGraphGetCandidatesIS(PCBDDCGraph, PetscInt *, IS *[], PetscInt *, IS *[], IS *);
 28: PETSC_EXTERN PetscErrorCode PCBDDCGraphRestoreCandidatesIS(PCBDDCGraph, PetscInt *, IS *[], PetscInt *, IS *[], IS *);
 29: PETSC_EXTERN PetscErrorCode PCBDDCGraphGetDirichletDofs(PCBDDCGraph, IS *);
 30: PETSC_EXTERN PetscErrorCode PCBDDCGraphGetDirichletDofsB(PCBDDCGraph, IS *);
 31: PETSC_EXTERN PetscErrorCode PCBDDCDestroyGraphCandidatesIS(void *);

 33: /* interface for scaling operator */
 34: PETSC_EXTERN PetscErrorCode PCBDDCScalingSetUp(PC);
 35: PETSC_EXTERN PetscErrorCode PCBDDCScalingDestroy(PC);
 36: PETSC_EXTERN PetscErrorCode PCBDDCScalingRestriction(PC, Vec, Vec);
 37: PETSC_EXTERN PetscErrorCode PCBDDCScalingExtension(PC, Vec, Vec);

 39: /* nullspace correction */
 40: PETSC_EXTERN PetscErrorCode PCBDDCNullSpaceAssembleCorrection(PC, PetscBool, PetscBool);

 42: /* utils */
 43: PETSC_EXTERN PetscErrorCode PCBDDCComputeLocalMatrix(PC, Mat);
 44: PETSC_EXTERN PetscErrorCode PCBDDCSetUpLocalWorkVectors(PC);
 45: PETSC_EXTERN PetscErrorCode PCBDDCSetUpSolvers(PC);
 46: PETSC_EXTERN PetscErrorCode PCBDDCSetUpLocalScatters(PC);
 47: PETSC_EXTERN PetscErrorCode PCBDDCSetUpLocalSolvers(PC, PetscBool, PetscBool);
 48: PETSC_EXTERN PetscErrorCode PCBDDCSetUpCorrection(PC, PetscScalar **);
 49: PETSC_EXTERN PetscErrorCode PCBDDCSetUpCoarseSolver(PC, PetscScalar *);
 50: PETSC_EXTERN PetscErrorCode PCBDDCComputePrimalNumbering(PC, PetscInt *, PetscInt **);
 51: PETSC_EXTERN PetscErrorCode PCBDDCScatterCoarseDataBegin(PC, InsertMode, ScatterMode);
 52: PETSC_EXTERN PetscErrorCode PCBDDCScatterCoarseDataEnd(PC, InsertMode, ScatterMode);
 53: PETSC_EXTERN PetscErrorCode PCBDDCApplyInterfacePreconditioner(PC, PetscBool);
 54: PETSC_EXTERN PetscErrorCode PCBDDCOrthonormalizeVecs(PetscInt *, Vec[]);
 55: PETSC_EXTERN PetscErrorCode PCBDDCSetUseExactDirichlet(PC, PetscBool);
 56: PETSC_EXTERN PetscErrorCode PCBDDCSetLevel(PC, PetscInt);
 57: PETSC_EXTERN PetscErrorCode PCBDDCGlobalToLocal(VecScatter, Vec, Vec, IS, IS *);
 58: PETSC_EXTERN PetscErrorCode PCBDDCAdaptiveSelection(PC);
 59: PETSC_EXTERN PetscErrorCode PCBDDCConsistencyCheckIS(PC, MPI_Op, IS *);
 60: PETSC_EXTERN PetscErrorCode PCBDDCComputeLocalTopologyInfo(PC);
 61: PETSC_EXTERN PetscErrorCode MatCreateSubMatrixUnsorted(Mat, IS, IS, Mat *);
 62: PETSC_EXTERN PetscErrorCode PCBDDCDetectDisconnectedComponents(PC, PetscBool, PetscInt *, IS *[], IS *);
 63: PETSC_EXTERN PetscErrorCode MatSeqAIJCompress(Mat, Mat *);
 64: PETSC_EXTERN PetscErrorCode PCBDDCReuseSolversBenignAdapt(PCBDDCReuseSolvers, Vec, Vec, PetscBool, PetscBool);
 65: PETSC_EXTERN PetscErrorCode PCBDDCComputeNoNetFlux(Mat, Mat, PetscBool, IS, PCBDDCGraph, MatNullSpace *);
 66: PETSC_EXTERN PetscErrorCode PCBDDCNullSpaceCreate(MPI_Comm, PetscBool, PetscInt, Vec[], MatNullSpace *);
 67: PETSC_EXTERN PetscErrorCode PCBDDCNedelecSupport(PC);
 68: PETSC_EXTERN PetscErrorCode PCBDDCAddPrimalVerticesLocalIS(PC, IS);
 69: PETSC_EXTERN PetscErrorCode PCBDDCComputeFakeChange(PC, PetscBool, PCBDDCGraph, PCBDDCSubSchurs, Mat *, IS *, IS *, PetscBool *);

 71: /* benign subspace trick */
 72: PETSC_EXTERN PetscErrorCode PCBDDCBenignPopOrPushB0(PC, PetscBool);
 73: PETSC_EXTERN PetscErrorCode PCBDDCBenignGetOrSetP0(PC, Vec, PetscBool);
 74: PETSC_EXTERN PetscErrorCode PCBDDCBenignDetectSaddlePoint(PC, PetscBool, IS *);
 75: PETSC_EXTERN PetscErrorCode PCBDDCBenignCheck(PC, IS);
 76: PETSC_EXTERN PetscErrorCode PCBDDCBenignShellMat(PC, PetscBool);
 77: PETSC_EXTERN PetscErrorCode PCBDDCBenignRemoveInterior(PC, Vec, Vec);

 79: /* feti-dp */
 80: PETSC_EXTERN PetscErrorCode PCBDDCCreateFETIDPMatContext(PC, FETIDPMat_ctx *);
 81: PETSC_EXTERN PetscErrorCode PCBDDCSetupFETIDPMatContext(FETIDPMat_ctx);
 82: PETSC_EXTERN PetscErrorCode PCBDDCCreateFETIDPPCContext(PC, FETIDPPC_ctx *);
 83: PETSC_EXTERN PetscErrorCode PCBDDCSetupFETIDPPCContext(Mat, FETIDPPC_ctx);
 84: PETSC_EXTERN PetscErrorCode FETIDPPCApply(PC, Vec, Vec);
 85: PETSC_EXTERN PetscErrorCode FETIDPPCApplyTranspose(PC, Vec, Vec);
 86: PETSC_EXTERN PetscErrorCode FETIDPPCView(PC, PetscViewer);
 87: PETSC_EXTERN PetscErrorCode PCBDDCDestroyFETIDPPC(PC);
 88: PETSC_EXTERN PetscErrorCode FETIDPMatMult(Mat, Vec, Vec);
 89: PETSC_EXTERN PetscErrorCode FETIDPMatMultTranspose(Mat, Vec, Vec);

 91: PETSC_EXTERN PetscErrorCode PCBDDCDestroyFETIDPMat(Mat);

 93: /* interface to SubSchurs */
 94: PETSC_EXTERN PetscErrorCode PCBDDCInitSubSchurs(PC);
 95: PETSC_EXTERN PetscErrorCode PCBDDCSetUpSubSchurs(PC);

 97: /* sub schurs API */
 98: PETSC_EXTERN PetscErrorCode PCBDDCSubSchursCreate(PCBDDCSubSchurs *);
 99: PETSC_EXTERN PetscErrorCode PCBDDCSubSchursInit(PCBDDCSubSchurs, const char *, IS, IS, PCBDDCGraph, ISLocalToGlobalMapping, PetscBool, PetscBool);
100: PETSC_EXTERN PetscErrorCode PCBDDCSubSchursReset(PCBDDCSubSchurs);
101: PETSC_EXTERN PetscErrorCode PCBDDCSubSchursDestroy(PCBDDCSubSchurs *);
102: PETSC_EXTERN PetscErrorCode PCBDDCSubSchursSetUp(PCBDDCSubSchurs, Mat, Mat, PetscBool, PetscInt[], PetscInt[], PetscInt, Vec, PetscBool, PetscBool, PetscBool, PetscInt, PetscInt[], IS[], Mat, IS);

104: #endif // PETSC_PCBDDCPRIVATEIMPL_H