Actual source code: pcbddcprivateimpl.h
1: /* prototypes of all BDDC private functions */
2: #pragma once
4: #include <petsc/private/pcbddcstructsimpl.h>
6: /* main functions */
7: PETSC_INTERN PetscErrorCode PCBDDCAnalyzeInterface(PC);
8: PETSC_INTERN PetscErrorCode PCBDDCConstraintsSetUp(PC);
10: /* reset functions */
11: PETSC_EXTERN PetscErrorCode PCBDDCResetTopography(PC);
12: PETSC_EXTERN PetscErrorCode PCBDDCResetSolvers(PC);
13: PETSC_EXTERN PetscErrorCode PCBDDCResetCustomization(PC);
15: /* graph */
16: PETSC_EXTERN PetscErrorCode PCBDDCGraphCreate(PCBDDCGraph *);
17: PETSC_EXTERN PetscErrorCode PCBDDCGraphDestroy(PCBDDCGraph *);
18: PETSC_EXTERN PetscErrorCode PCBDDCGraphInit(PCBDDCGraph, ISLocalToGlobalMapping, PetscInt, PetscInt);
19: PETSC_EXTERN PetscErrorCode PCBDDCGraphReset(PCBDDCGraph);
20: PETSC_EXTERN PetscErrorCode PCBDDCGraphResetCSR(PCBDDCGraph);
21: PETSC_EXTERN PetscErrorCode PCBDDCGraphResetCoords(PCBDDCGraph);
22: PETSC_EXTERN PetscErrorCode PCBDDCGraphSetUp(PCBDDCGraph, PetscInt, IS, IS, PetscInt, IS[], IS);
23: PETSC_EXTERN PetscErrorCode PCBDDCGraphComputeConnectedComponents(PCBDDCGraph);
24: PETSC_EXTERN PetscErrorCode PCBDDCGraphComputeConnectedComponentsLocal(PCBDDCGraph);
25: PETSC_EXTERN PetscErrorCode PCBDDCGraphASCIIView(PCBDDCGraph, PetscInt, PetscViewer);
26: PETSC_EXTERN PetscErrorCode PCBDDCGraphGetCandidatesIS(PCBDDCGraph, PetscInt *, IS *[], PetscInt *, IS *[], IS *);
27: PETSC_EXTERN PetscErrorCode PCBDDCGraphRestoreCandidatesIS(PCBDDCGraph, PetscInt *, IS *[], PetscInt *, IS *[], IS *);
28: PETSC_EXTERN PetscErrorCode PCBDDCGraphCreateLocalSubdomainAdjacency(PCBDDCGraph, PetscInt *, PetscInt **, PetscInt **);
29: PETSC_INTERN PetscErrorCode PCBDDCGraphPartitionLocalSubdomains(PCBDDCGraph, const char *, PetscInt *, PetscInt, PetscInt *, PetscInt *, IS *);
30: PETSC_EXTERN PetscErrorCode PCBDDCGraphGetDirichletDofs(PCBDDCGraph, IS *);
31: PETSC_EXTERN PetscErrorCode PCBDDCGraphGetDirichletDofsB(PCBDDCGraph, IS *);
32: PETSC_EXTERN PetscCtxDestroyFn PCBDDCDestroyGraphCandidatesIS;
34: /* interface for scaling operator */
35: PETSC_INTERN PetscErrorCode PCBDDCScalingSetUp(PC);
36: PETSC_INTERN PetscErrorCode PCBDDCScalingDestroy(PC);
37: PETSC_INTERN PetscErrorCode PCBDDCScalingRestriction(PC, Vec, Vec);
38: PETSC_INTERN PetscErrorCode PCBDDCScalingExtension(PC, Vec, Vec);
40: /* nullspace correction */
41: PETSC_INTERN PetscErrorCode PCBDDCNullSpaceAssembleCorrection(PC, PetscBool, PetscBool);
43: /* utils */
44: PETSC_INTERN PetscErrorCode PCBDDCComputeLocalMatrix(PC, Mat);
45: PETSC_INTERN PetscErrorCode PCBDDCSetUpLocalWorkVectors(PC);
46: PETSC_INTERN PetscErrorCode PCBDDCSetUpSolvers(PC);
47: PETSC_INTERN PetscErrorCode PCBDDCSetUpLocalScatters(PC);
48: PETSC_INTERN PetscErrorCode PCBDDCSetUpLocalSolvers(PC, PetscBool, PetscBool);
49: PETSC_INTERN PetscErrorCode PCBDDCSetUpCorrection(PC, Mat *);
50: PETSC_INTERN PetscErrorCode PCBDDCSetUpCoarseSolver(PC, Mat);
51: PETSC_INTERN PetscErrorCode PCBDDCAggregateLocalCoarseMat(PC, Mat, IS, PetscInt, MatReuse, Vec *, Mat *);
52: PETSC_INTERN PetscErrorCode PCBDDCComputePrimalNumbering(PC, PetscInt *, PetscInt **);
53: PETSC_INTERN PetscErrorCode PCBDDCScatterCoarseDataBegin(PC, InsertMode, ScatterMode);
54: PETSC_INTERN PetscErrorCode PCBDDCScatterCoarseDataEnd(PC, InsertMode, ScatterMode);
55: PETSC_INTERN PetscErrorCode PCBDDCApplyInterfacePreconditioner(PC, PetscBool);
56: PETSC_INTERN PetscErrorCode PCBDDCOrthonormalizeVecs(PetscInt *, Vec[]);
57: PETSC_INTERN PetscErrorCode PCBDDCSetUseExactDirichlet(PC, PetscBool);
58: PETSC_INTERN PetscErrorCode PCBDDCSetLevel(PC, PetscInt);
59: PETSC_INTERN PetscErrorCode PCBDDCGlobalToLocal(VecScatter, Vec, Vec, IS, IS *);
60: PETSC_INTERN PetscErrorCode PCBDDCAdaptiveSelection(PC);
61: PETSC_INTERN PetscErrorCode PCBDDCConsistencyCheckIS(PC, MPI_Op, IS *);
62: PETSC_INTERN PetscErrorCode PCBDDCComputeLocalTopologyInfo(PC);
63: PETSC_INTERN PetscErrorCode PCBDDCDetectDisconnectedComponents(PC, PetscBool, PetscInt *, IS *[], IS *);
64: PETSC_INTERN PetscErrorCode PCBDDCReuseSolversBenignAdapt(PCBDDCReuseSolvers, Vec, Vec, PetscBool, PetscBool);
65: PETSC_INTERN PetscErrorCode PCBDDCComputeNoNetFlux(Mat, Mat, PetscBool, IS, PCBDDCGraph, MatNullSpace *);
66: PETSC_INTERN PetscErrorCode PCBDDCNullSpaceCreate(MPI_Comm, PetscBool, PetscInt, Vec[], MatNullSpace *);
67: PETSC_INTERN PetscErrorCode PCBDDCNedelecSupport(PC);
68: PETSC_INTERN PetscErrorCode PCBDDCAddPrimalVerticesLocalIS(PC, IS);
69: PETSC_INTERN PetscErrorCode PCBDDCComputeFakeChange(PC, PetscBool, PCBDDCGraph, PCBDDCSubSchurs, Mat *, IS *, IS *, PetscBool *);
70: PETSC_INTERN PetscErrorCode PCBDDCViewGlobalIS(PC, IS, PetscViewer);
71: PETSC_INTERN PetscErrorCode MatCreateSubMatrixUnsorted(Mat, IS, IS, Mat *);
72: PETSC_INTERN PetscErrorCode MatSeqAIJCompress(Mat, Mat *);
73: PETSC_INTERN PetscErrorCode MatNullSpacePropagateAny_Private(Mat, IS, Mat);
75: /* benign subspace trick */
76: PETSC_INTERN PetscErrorCode PCBDDCBenignPopOrPushB0(PC, PetscBool);
77: PETSC_INTERN PetscErrorCode PCBDDCBenignGetOrSetP0(PC, Vec, PetscBool);
78: PETSC_INTERN PetscErrorCode PCBDDCBenignDetectSaddlePoint(PC, PetscBool, IS *);
79: PETSC_INTERN PetscErrorCode PCBDDCBenignCheck(PC, IS);
80: PETSC_INTERN PetscErrorCode PCBDDCBenignShellMat(PC, PetscBool);
81: PETSC_INTERN PetscErrorCode PCBDDCBenignRemoveInterior(PC, Vec, Vec);
83: /* feti-dp */
84: PETSC_INTERN PetscErrorCode PCBDDCCreateFETIDPMatContext(PC, FETIDPMat_ctx *);
85: PETSC_INTERN PetscErrorCode PCBDDCSetupFETIDPMatContext(FETIDPMat_ctx);
86: PETSC_INTERN PetscErrorCode PCBDDCCreateFETIDPPCContext(PC, FETIDPPC_ctx *);
87: PETSC_INTERN PetscErrorCode PCBDDCSetupFETIDPPCContext(Mat, FETIDPPC_ctx);
88: PETSC_INTERN PetscErrorCode FETIDPPCApply(PC, Vec, Vec);
89: PETSC_INTERN PetscErrorCode FETIDPPCApplyTranspose(PC, Vec, Vec);
90: PETSC_INTERN PetscErrorCode FETIDPPCView(PC, PetscViewer);
91: PETSC_INTERN PetscErrorCode PCBDDCDestroyFETIDPPC(PC);
92: PETSC_INTERN PetscErrorCode FETIDPMatMult(Mat, Vec, Vec);
93: PETSC_INTERN PetscErrorCode FETIDPMatMultTranspose(Mat, Vec, Vec);
95: PETSC_INTERN PetscErrorCode PCBDDCDestroyFETIDPMat(Mat);
97: /* interface to SubSchurs */
98: PETSC_INTERN PetscErrorCode PCBDDCInitSubSchurs(PC);
99: PETSC_INTERN PetscErrorCode PCBDDCSetUpSubSchurs(PC);
101: /* sub schurs API */
102: PETSC_INTERN PetscErrorCode PCBDDCSubSchursCreate(PCBDDCSubSchurs *);
103: PETSC_INTERN PetscErrorCode PCBDDCSubSchursInit(PCBDDCSubSchurs, const char *, IS, IS, PCBDDCGraph, ISLocalToGlobalMapping, PetscBool, PetscBool);
104: PETSC_INTERN PetscErrorCode PCBDDCSubSchursReset(PCBDDCSubSchurs);
105: PETSC_INTERN PetscErrorCode PCBDDCSubSchursDestroy(PCBDDCSubSchurs *);
106: PETSC_INTERN PetscErrorCode PCBDDCSubSchursSetUp(PCBDDCSubSchurs, Mat, Mat, PetscBool, PetscInt[], PetscInt[], PetscInt, Vec, PetscBool, PetscBool, PetscBool, PetscInt, PetscInt[], IS[], Mat, IS);