![Logo](MoFEMLogo.png) |
| v0.14.0
|
Go to the documentation of this file.
63 std::vector<std::string> fields_name,
64 std::vector<boost::shared_ptr<Range>> field_ents,
67 std::vector<bool> sym_schur,
bool symm_op,
68 boost::shared_ptr<BlockStructure> diag_blocks =
nullptr);
84 std::vector<std::string> fields_name,
85 std::vector<boost::shared_ptr<Range>> field_ents,
88 std::vector<bool> sym_schur, std::vector<double> diag_eps,
bool symm_op,
89 boost::shared_ptr<BlockStructure> diag_blocks =
nullptr);
95 std::pair<std::string, std::vector<SchurFieldPair>>
112 std::pair<SmartPetscObj<Mat>, boost::shared_ptr<BlockStructure>>;
125 std::array<SmartPetscObj<Mat>, 4>,
126 std::array<boost::shared_ptr<BlockStructure>, 4>,
127 boost::shared_ptr<BlockStructure>,
142 boost::shared_ptr<NestSchurData>
144 boost::shared_ptr<BlockStructure> block_mat_data,
146 std::vector<std::string> fields_name,
147 std::vector<boost::shared_ptr<Range>> field_ents,
148 bool add_preconditioner_block =
false
170 std::string filename);
193 std::pair<SmartPetscObj<Mat>, boost::shared_ptr<NestSchurData>>
335 MatSetValues<AssemblyTypeSelector<BLOCK_PRECONDITIONER_SCHUR>>(
348 VecSetValues<AssemblyTypeSelector<BLOCK_PRECONDITIONER_SCHUR>>(
352 &*data.getIndices().begin(), &*nf.begin(), iora);
357 #endif //__SCHUR_HPP__
Data on single entity (This is passed as argument to DataOperator::doWork)
MoFEMErrorCode MatSetValues< BlockStructure >(Mat M, const EntitiesFieldData::EntData &row_data, const EntitiesFieldData::EntData &col_data, const MatrixDouble &mat, InsertMode iora)
constexpr const char MoFEM_BLOCK_MAT[]
std::pair< std::string, std::string > SchurFieldPair
OpSchurAssembleBase()=delete
PetscErrorCode MoFEMErrorCode
MoFEM/PETSc error code.
UBlasMatrix< double > MatrixDouble
boost::function< MoFEMErrorCode(Mat M, const EntitiesFieldData::EntData &row_data, const EntitiesFieldData::EntData &col_data, const MatrixDouble &mat, InsertMode iora)> MatSetValuesPtr
static PetscLogEvent MOFEM_EVENT_BlockStructureMult
static PetscLogEvent MOFEM_EVENT_schurMatSetValues
MoFEMErrorCode VecSetValues(Vec V, const EntitiesFieldData::EntData &data, const double *ptr, InsertMode iora)
Assemble PETSc vector.
FTensor::Index< 'M', 3 > M
MoFEMErrorCode VecSetValues< SchurElemMatsBlock >(Vec V, const EntitiesFieldData::EntData &data, const VectorDouble &nf, InsertMode iora)
OpSchurAssembleBase * createOpSchurAssembleEnd(std::vector< std::string > fields_name, std::vector< boost::shared_ptr< Range >> field_ents, std::vector< SmartPetscObj< AO >> sequence_of_aos, std::vector< SmartPetscObj< Mat >> sequence_of_mats, std::vector< bool > sym_schur, bool symm_op, boost::shared_ptr< BlockStructure > diag_blocks)
Construct a new Op Schur Assemble End object.
SchurShellMatData createBlockMat(DM dm, boost::shared_ptr< BlockStructure > data)
Create a Schur Mat object.
implementation of Data Operators for Forces and Sources
static PetscLogEvent MOFEM_EVENT_BlockStructureSolve
MoFEMErrorCode schurSwitchPreconditioner(boost::shared_ptr< BlockStructure > block_mat_data)
Switch preconditioner.
SchurBackendMatSetValuesPtr()=delete
OpSchurAssembleBase * createOpSchurAssembleBegin()
static PetscLogEvent MOFEM_EVENT_opSchurAssembleEnd
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< SchurElemMatsPreconditionedBlock >(Mat M, const EntitiesFieldData::EntData &row_data, const EntitiesFieldData::EntData &col_data, const MatrixDouble &mat, InsertMode iora)
static MatSetValuesPtr matSetValuesPtr
backend assembly function
EntitiesFieldData::EntData EntData
MoFEMErrorCode setSchurMatSolvePC(SmartPetscObj< PC > pc)
Schur complement data storage.
MoFEMErrorCode setSchurA00MatSolvePC(SmartPetscObj< PC > pc)
Set PC for A00 block.
static MatSetValuesPtr matSetValuesPreconditionedBlockPtr
MoFEMErrorCode MatSetValues< SchurElemMats >(Mat M, const EntitiesFieldData::EntData &row_data, const EntitiesFieldData::EntData &col_data, const MatrixDouble &mat, InsertMode iora)
const FTensor::Tensor2< T, Dim, Dim > Vec
Structure to register events for Schur block assembly and solver.
std::pair< SmartPetscObj< Mat >, boost::shared_ptr< BlockStructure > > SchurShellMatData
UBlasVector< double > VectorDouble
MoFEMErrorCode DMMoFEMSetNestSchurData(DM dm, boost::shared_ptr< NestSchurData >)
MoFEMErrorCode VecSetValues< SchurElemMats >(Vec V, const EntitiesFieldData::EntData &data, const VectorDouble &nf, InsertMode iora)
boost::shared_ptr< BlockStructure > createBlockMatStructure(DM dm, SchurFEOpsFEandFields schur_fe_op_vec)
Create a Mat Diag Blocks object.
static MatSetValuesPtr matSetValuesBlockPtr
backend assembly block mat function
MoFEMErrorCode MatSetValues< SchurElemMatsBlock >(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
static PetscLogEvent MOFEM_EVENT_zeroRowsAndCols
MoFEMErrorCode schurSaveBlockMesh(boost::shared_ptr< BlockStructure > block_mat_data, std::string filename)
Save block matrix as a mesh.
static PetscLogEvent MOFEM_EVENT_BlockStructureSetValues
std::vector< std::pair< std::string, std::vector< SchurFieldPair > > > SchurFEOpsFEandFields
boost::shared_ptr< NestSchurData > getNestSchurData(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)
Get the Schur Nest Mat Array object.
UserDataOperator(const FieldSpace space, const char type=OPSPACE, const bool symm=true)