63 std::vector<boost::shared_ptr<Range>> field_ents,
66 bool sym_schur =
false,
bool symm_op =
false);
75 boost::shared_ptr<std::vector<unsigned char>> marker_ptr,
double diag_val);
81 std::pair<std::string, std::vector<SchurFieldPair>>
106 std::pair<SmartPetscObj<Mat>, boost::shared_ptr<BlockStructure>>;
119 std::array<SmartPetscObj<Mat>, 4>,
120 std::array<boost::shared_ptr<BlockStructure>, 4>,
121 boost::shared_ptr<BlockStructure>,
181 boost::shared_ptr<BlockStructure> block_mat_data,
183 std::vector<std::string> fields_name,
184 std::vector<boost::shared_ptr<Range>> field_ents,
185 bool add_preconditioner_block =
false
209 std::vector<std::string> fields_name,
210 std::vector<boost::shared_ptr<Range>> field_ents,
232boost::shared_ptr<std::vector<double>>
253 std::string filename);
276std::pair<SmartPetscObj<Mat>, boost::shared_ptr<NestSchurData>>
319 Mat
M,
const EntitiesFieldData::EntData &row_data,
320 const EntitiesFieldData::EntData &col_data,
const MatrixDouble &mat,
336 const EntitiesFieldData::EntData &col_data,
366 const EntitiesFieldData::EntData &row_data,
367 const EntitiesFieldData::EntData &col_data,
406 Mat
M,
const EntitiesFieldData::EntData &row_data,
407 const EntitiesFieldData::EntData &col_data,
const MatrixDouble &mat,
416MatSetValues<AssemblyTypeSelector<BLOCK_PRECONDITIONER_SCHUR>>(
429VecSetValues<AssemblyTypeSelector<BLOCK_PRECONDITIONER_SCHUR>>(
432 return ::VecSetValues(V, data.getIndices().size(),
433 &*data.getIndices().begin(), &*nf.begin(), iora);
440 std::vector<std::string> fields_name,
441 std::vector<boost::shared_ptr<Range>> field_ents,
442 std::vector<SmartPetscObj<AO>> sequence_of_aos,
443 std::vector<SmartPetscObj<Mat>> sequence_of_mats,
444 std::vector<bool> sym_schur,
bool symm_op,
445 boost::shared_ptr<BlockStructure> diag_blocks =
nullptr);
451 std::vector<std::string> fields_name,
452 std::vector<boost::shared_ptr<Range>> field_ents,
453 std::vector<SmartPetscObj<AO>> sequence_of_aos,
454 std::vector<SmartPetscObj<Mat>> sequence_of_mats,
455 std::vector<bool> sym_schur, std::vector<double> diag_eps,
bool symm_op,
456 boost::shared_ptr<BlockStructure> diag_blocks =
nullptr);
459DEPRECATED inline boost::shared_ptr<NestSchurData>
461 boost::shared_ptr<BlockStructure> block_mat_data,
463 std::vector<std::string> fields_name,
464 std::vector<boost::shared_ptr<Range>> field_ents,
465 bool add_preconditioner_block =
false
469 field_ents, add_preconditioner_block);
PetscErrorCode MoFEMErrorCode
MoFEM/PETSc error code.
UBlasMatrix< double > MatrixDouble
UBlasVector< double > VectorDouble
implementation of Data Operators for Forces and Sources
MoFEMErrorCode MatSetValues< SchurElemMats >(Mat M, const EntitiesFieldData::EntData &row_data, const EntitiesFieldData::EntData &col_data, const MatrixDouble &mat, InsertMode iora)
OpSchurAssembleBase * createOpSchurAssembleEnd(std::vector< std::string > fields_name, std::vector< boost::shared_ptr< Range > > field_ents, SmartPetscObj< AO > ao, SmartPetscObj< Mat > schur, bool sym_schur, bool symm_op)
Construct a new Op Schur Assemble End object.
MoFEMErrorCode MatSetValues< SchurElemMatsBlock >(Mat M, const EntitiesFieldData::EntData &row_data, const EntitiesFieldData::EntData &col_data, const MatrixDouble &mat, InsertMode iora)
MoFEMErrorCode schurSwitchPreconditioner(boost::shared_ptr< BlockStructure > block_mat_data)
Switch preconditioner.
MoFEMErrorCode setSchurA00MatSolvePC(SmartPetscObj< PC > pc)
Set PC for A00 block.
MoFEMErrorCode MatSetValues< SchurElemMatsPreconditionedBlock >(Mat M, const EntitiesFieldData::EntData &row_data, const EntitiesFieldData::EntData &col_data, const MatrixDouble &mat, InsertMode iora)
std::pair< SmartPetscObj< Mat >, boost::shared_ptr< BlockStructure > > SchurShellMatData
std::pair< SmartPetscObj< Mat >, boost::shared_ptr< NestSchurData > > createSchurNestedMatrix(boost::shared_ptr< NestSchurData > schur_net_data_ptr)
Create a Mat Diag Blocks object.
MoFEMErrorCode MatSetValues< BlockStructure >(Mat M, const EntitiesFieldData::EntData &row_data, const EntitiesFieldData::EntData &col_data, const MatrixDouble &mat, InsertMode iora)
std::tuple< std::array< SmartPetscObj< Mat >, 4 >, std::array< boost::shared_ptr< BlockStructure >, 4 >, boost::shared_ptr< BlockStructure >, std::pair< SmartPetscObj< IS >, SmartPetscObj< IS > > > NestSchurData
std::pair< std::string, std::string > SchurFieldPair
boost::shared_ptr< std::vector< double > > getBlockMatPrconditionerStorageMat(Mat B)
Get preconditioner blocks storage.
DEPRECATED boost::shared_ptr< NestSchurData > getNestSchurData(std::pair< SmartPetscObj< DM >, SmartPetscObj< DM > > dms, boost::shared_ptr< BlockStructure > block_mat_data, std::vector< std::string > fields_name, std::vector< boost::shared_ptr< Range > > field_ents, bool add_preconditioner_block=false)
boost::shared_ptr< BlockStructure > createBlockMatStructure(DM dm, SchurFEOpsFEandFields schur_fe_op_vec)
Create block matrix structure.
boost::shared_ptr< NestSchurData > createSchurNestedMatrixStruture(std::pair< SmartPetscObj< DM >, SmartPetscObj< DM > > dms, boost::shared_ptr< BlockStructure > block_mat_data_ptr, std::vector< std::string > fields_names, std::vector< boost::shared_ptr< Range > > field_ents, bool add_preconditioner_block)
Create structure of nested matrix [A11 A10; A01 A00].
OpSchurAssembleBase * createOpSchurZeroRowsAndCols(boost::shared_ptr< std::vector< unsigned char > > marker_ptr, double diag_val)
Create a Op Schur Zero Rows And Cols object.
MoFEMErrorCode schurSaveBlockMesh(boost::shared_ptr< BlockStructure > block_mat_data, std::string filename)
Save block matrix as a mesh.
constexpr const char MoFEM_BLOCK_MAT[]
MoFEMErrorCode VecSetValues< SchurElemMatsBlock >(Vec V, const EntitiesFieldData::EntData &data, const VectorDouble &nf, InsertMode iora)
MoFEMErrorCode DMMoFEMSetNestSchurData(DM dm, boost::shared_ptr< NestSchurData >)
std::vector< std::pair< std::string, std::vector< SchurFieldPair > > > SchurFEOpsFEandFields
MoFEMErrorCode VecSetValues< SchurElemMats >(Vec V, const EntitiesFieldData::EntData &data, const VectorDouble &nf, InsertMode iora)
SchurShellMatData createBlockMat(DM dm, boost::shared_ptr< BlockStructure > data)
Create a Schur Mat object.
MoFEMErrorCode assembleBlockMatSchur(MoFEM::Interface &m_field, Mat B, Mat S, std::vector< std::string > fields_name, std::vector< boost::shared_ptr< Range > > field_ents, SmartPetscObj< AO > ao)
Assemble Schur complement S = A11 - A10 A00^{-1} A01 from block matrix.
OpSchurAssembleBase * createOpSchurAssembleBegin()
boost::shared_ptr< std::vector< double > > getBlockMatStorageMat(Mat B)
Get block values storage.
Deprecated interface functions.
Data on single entity (This is passed as argument to DataOperator::doWork)
UserDataOperator(const FieldSpace space, const char type=OPSPACE, const bool symm=true)
Constructor for operators working on finite element spaces.
OpSchurAssembleBase()=delete
static MatSetValuesPtr matSetValuesPreconditionedBlockPtr
static MatSetValuesPtr matSetValuesPtr
backend assembly function
static MatSetValuesPtr matSetValuesBlockPtr
backend assembly block mat function
SchurBackendMatSetValuesPtr()=delete
boost::function< MoFEMErrorCode(Mat M, const EntitiesFieldData::EntData &row_data, const EntitiesFieldData::EntData &col_data, const MatrixDouble &mat, InsertMode iora)> MatSetValuesPtr
Schur complement data storage.
Structure to register events for Schur block assembly and solver.
static PetscLogEvent MOFEM_EVENT_BlockStructureSetValues
static PetscLogEvent MOFEM_EVENT_BlockStructureMult
static PetscLogEvent MOFEM_EVENT_zeroRowsAndCols
static PetscLogEvent MOFEM_EVENT_opSchurAssembleEnd
static PetscLogEvent MOFEM_EVENT_BlockStructureSolve
static PetscLogEvent MOFEM_EVENT_schurMatSetValues
static PetscLogEvent MOFEM_EVENT_AssembleSchurMat
intrusive_ptr for managing petsc objects