 |
| v0.14.0
|
Go to the documentation of this file.
7 #include <ConstrainMatrixCtx.hpp>
9 const static bool debug =
false;
11 #define INIT_DATA_CONSTRAINMATRIXCTX \
12 C(PETSC_NULL), CT(PETSC_NULL), CCT(PETSC_NULL), CTC(PETSC_NULL), \
13 K(PETSC_NULL), Cx(PETSC_NULL), CCTm1_Cx(PETSC_NULL), \
14 CT_CCTm1_Cx(PETSC_NULL), CTCx(PETSC_NULL), Qx(PETSC_NULL), \
15 KQx(PETSC_NULL), initQorP(true), initQTKQ(true), createKSP(create_ksp), \
16 createScatter(true), cancelKSPMonitor(true), \
17 ownConstrainMatrix(own_contrain_matrix)
20 string x_problem,
string y_problem,
22 bool own_contrain_matrix)
34 VecScatter scatter,
bool create_ksp,
35 bool own_contrain_matrix)
51 CHKERR MatTranspose(
C, MAT_INITIAL_MATRIX, &
CT);
53 CHKERR MatTransposeMatMult(
CT,
CT, MAT_INITIAL_MATRIX, PETSC_DEFAULT, &
CCT);
59 CHKERR KSPSetInitialGuessKnoll(
kSP, PETSC_TRUE);
66 #if PETSC_VERSION_GE(3, 5, 3)
67 CHKERR MatCreateVecs(
C, &
X, PETSC_NULL);
71 CHKERR MatGetVecs(
C, &
X, PETSC_NULL);
89 CHKERR MatTranspose(
C, MAT_REUSE_MATRIX, &
CT);
90 CHKERR MatTransposeMatMult(
CT,
CT, MAT_REUSE_MATRIX, PETSC_DEFAULT, &
CCT);
120 CHKERR MatTransposeMatMult(
C,
C, MAT_INITIAL_MATRIX, PETSC_DEFAULT, &
CTC);
124 MatGetSize(
CCT, &
m, &
n);
129 #if PETSC_VERSION_GE(3, 5, 3)
130 CHKERR MatCreateVecs(
K, &
Qx, PETSC_NULL);
147 CHKERR MatTransposeMatMult(
C,
C, MAT_REUSE_MATRIX, PETSC_DEFAULT, &
CTC);
166 CHKERR MatShellGetContext(Q, &void_ctx);
173 CHKERR VecScatterEnd(ctx->
sCatter, x, ctx->
X, INSERT_VALUES, SCATTER_FORWARD);
182 if (flg == PETSC_FALSE)
200 CHKERR MatShellGetContext(
P, &void_ctx);
206 CHKERR VecScatterEnd(ctx->
sCatter, x, ctx->
X, INSERT_VALUES, SCATTER_FORWARD);
211 CHKERR VecGhostUpdateBegin(
f, INSERT_VALUES, SCATTER_FORWARD);
212 CHKERR VecGhostUpdateEnd(
f, INSERT_VALUES, SCATTER_FORWARD);
224 CHKERR MatShellGetContext(
R, &void_ctx);
229 "you have to call first initQorP or use Q matrix");
233 CHKERR VecGhostUpdateBegin(
f, INSERT_VALUES, SCATTER_FORWARD);
234 CHKERR VecGhostUpdateEnd(
f, INSERT_VALUES, SCATTER_FORWARD);
246 CHKERR MatShellGetContext(RT, &void_ctx);
251 "you have to call first initQorP or use Q matrix");
254 CHKERR VecScatterEnd(ctx->
sCatter, x, ctx->
X, INSERT_VALUES, SCATTER_FORWARD);
264 CHKERR MatShellGetContext(CTC_QTKQ, &void_ctx);
272 CHKERR MatShellSetOperation(Q, MATOP_MULT,
280 CHKERR VecScatterEnd(ctx->
sCatter, x, ctx->
X, INSERT_VALUES, SCATTER_FORWARD);
293 CHKERR MatShellGetContext(Q, &void_ctx);
301 CHKERR MatShellGetContext(QTKQ, &void_ctx);
#define MoFEMFunctionReturnHot(a)
Last executable line of each PETSc function used for error handling. Replaces return()
MoFEMErrorCode getInterface(IFACE *&iface) const
Get interface reference to pointer of interface.
MoFEMErrorCode initializeQorP(Vec x)
initialize vectors and matrices for Q and P shell matrices, scattering is set based on x_problem and ...
MoFEMErrorCode initializeQorP(Vec x)
initialize vectors and matrices for Q and P shell matrices, scattering is set based on x_problem and ...
MoFEMErrorCode destroyQorP()
destroy sub-matrices used for shell matrices P, Q, R, RT
MoFEMErrorCode ConstrainMatrixMultOpRT(Mat RT, Vec x, Vec f)
Multiplication operator for RT = (CCT)^-TC.
MoFEMErrorCode recalculateCTC()
re-calculate CTC matrix has been changed since initialization
MoFEMErrorCode destroyQorP()
destroy sub-matrices used for shell matrices P, Q, R, RT
virtual MPI_Comm & get_comm() const =0
PetscLogEvent MOFEM_EVENT_projCTC_QTKQ
MoFEMErrorCode ConstrainMatrixDestroyOpPorQ(Mat Q)
Destroy shell matrix Q.
PetscLogEvent MOFEM_EVENT_projP
MoFEMErrorCode ConstrainMatrixMultOpP(Mat P, Vec x, Vec f)
Multiplication operator for P = CT(CCT)^-1C.
PetscErrorCode MoFEMErrorCode
MoFEM/PETSc error code.
PetscLogEvent MOFEM_EVENT_projCTC_QTKQ
Deprecated interface functions.
MoFEMErrorCode destroyQTKQ()
destroy sub-matrices used for shell matrix QTKQ
MoFEMErrorCode destroyQTKQ()
destroy sub-matrices used for shell matrix QTKQ
MoFEMErrorCode initializeQTKQ()
initialize vectors and matrices for CTC+QTKQ shell matrices, scattering is set based on x_problem and...
FTensor::Index< 'M', 3 > M
#define CHKERR
Inline error check.
PetscLogEvent MOFEM_EVENT_projR
implementation of Data Operators for Forces and Sources
PetscLogEvent MOFEM_EVENT_projQ
MoFEMErrorCode ProjectionMatrixMultOpQ(Mat Q, Vec x, Vec f)
Multiplication operator for Q = I-CTC(CCT)^-1C.
MoFEMErrorCode ConstrainMatrixMultOpCTC_QTKQ(Mat CTC_QTKQ, Vec x, Vec f)
Multiplication operator for RT = (CCT)^-TC.
MoFEMErrorCode recalculateCTandCCT()
re-calculate CT and CCT if C matrix has been changed since initialization
PetscLogEvent MOFEM_EVENT_projRT
PetscLogEvent MOFEM_EVENT_projR
Vector manager is used to create vectors \mofem_vectors.
MoFEMErrorCode ConstrainMatrixDestroyOpQTKQ(Mat QTKQ)
Destroy shell matrix.
MoFEM::Interface & mField
PetscLogEvent MOFEM_EVENT_projP
PetscLogEvent MOFEM_EVENT_projInit
MoFEM::Interface & mField
MoFEMErrorCode ConstrainMatrixMultOpR(Mat R, Vec x, Vec f)
Multiplication operator for R = CT(CCT)^-1.
const FTensor::Tensor2< T, Dim, Dim > Vec
PetscLogEvent MOFEM_EVENT_projQ
PetscLogEvent MOFEM_EVENT_projRT
FTensor::Index< 'm', 3 > m
#define INIT_DATA_CONSTRAINMATRIXCTX
structure for projection matrices
MoFEMErrorCode initializeQTKQ()
initialize vectors and matrices for CTC+QTKQ shell matrices, scattering is set based on x_problem and...
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
ConstrainMatrixCtx(MoFEM::Interface &m_field, string x_problem, string y_problem, bool create_ksp=true, bool own_contrain_matrix=false)
#define MoFEMFunctionBegin
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...